問題タブ [nonlinear-optimization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
matlab - MatLab で fmincon を最小化する総和目的関数の定式化
次のような合計目的関数 (非線形ポートフォリオ最適化) があります。
- wは決定ベクトルです。
- cvは既知の 10 行 10 列の行列です
制約 (プロジェクト制約用の別の .m ファイル) と fmincon の実行 (下限/上限、初期値、および引数を指定して fmincon を呼び出すための別の .m ファイル) の定式化を行いました。
目的関数の実行方法がわかりません。私は、matlab ではなく GLPK での線形プログラミングに慣れているので、あまりうまくいっていません。
私は現在持っています:
ObjectiveFunction.m
...しかし、これは機能していません。
どんな助けでも大歓迎です!前もって感謝します :)
c++ - 固有エラー: please_protect_your_min_with_parentheses
パッケージに付属のテストコードを実行して、Eigen の NonLinear Optimization 機能をテストしようとしています。
私はこれらのエラーで立ち往生しています(むしろ困惑しています):
ちなみに、(私が思うに)これを引き起こす行は次のようになります。
エラーは次の行を参照しています (上記の 28 行目と 184 行目の 2 つの異なる場所にあります)。
どんなアドバイスでも大歓迎です
r - 関数を検索するR関数
更新:元の質問は次のとおりです。matlabの「lsqnonlin」関数に実装されているのと同じアルゴリズムを使用するR関数はありますか?ただし、答えはRで関数を検索することに関連しています。答えは、一般的にRユーザーにとって非常に役立つと思います。そこで、タイトルを編集しましたが、ここでもう一度元の質問をしました。Rで、微分方程式を解くことを含む非線形最小二乗最適化を行う方法は?
私は非線形最小二乗最適化を行っていますが、matlab関数lsqnonlin
は、Rで試したすべての最適化アルゴリズム(関数、、、などのアルゴリズムを含むoptimx
)nlm
よりnlminb
もsolnp
高速であり、「正しい」ソリューション。
ただし、Matlabで使用されているRでの「trust-region-reflective」アルゴリズムの実装は見つかりませんでした。誰かがすでに実装があるかどうか知っていますか?また、「trust-region-reflective」アルゴリズムがこの種の最適化に適したアルゴリズムであることは常に真実ですか?
mathematical-optimization - 特定の機能ターゲットの最適化を満たすアイテムのコレクションからの選択
コレクションからアイテムを選択するという問題に取り組むのに苦労しています。
私はアイテムのコレクションを持っています。各アイテムには、X、Y、Z の 3 つの機能があり、2 倍の値があります。
いくつかのターゲットがあります。
1) 選択した項目のすべての X 値の合計の特定の下限に到達する。
2) 選択した項目のすべての Y 値の合計の特定の下限に到達する。
3) 選択した項目のすべての Z 値の平均の特定の下限に到達する。
4) 上記の要件を満たす項目の数を最小限に抑えます。
どのタイプの最適化アルゴリズムを試せばよいかわかりません。正しい方向へのポインタをいただければ幸いです。可能であれば、何らかの形で目標に優先順位を付け、境界を「ソフト」にしたいと考えています。たとえそれらすべてを一斉に満たすことができなくても、「近い」選択を返します。
nonlinear-optimization - 不等式と範囲制約による最適化
不等式と範囲制約を使用して最適化を実行したいと思います。
最大化するにはf= SEA (a,b,c,d)
制約あり
文献に基づくと、fmincon が適切なオプションです。ただし、Minitab ヘルプでは、例は不等式と範囲制約に分かれています。両方のタイプの制約を使用して、この問題を matlab で記述するにはどうすればよいですか?
r - 「R」の nls.lm() の目的関数を変更する
関数 nls.lm {package: minpack.lm} を使用して、水文モデルのパラメータを最適化しています。関数は非常にうまく機能していますが、他のobjective function (OF)
. 通常、nls.lm 内のオブジェクト関数「fn」は次のように定義されます。
Nash-Sutcliff-Efficiency
今、次のように定義されているを使用したい
またはその他の OF。問題はnls.lm
、式が最小化され、sum(x)^2
のみx
が変更可能になることです。私はそれを知っていbest fit NSE = 1
ます。したがって1 - NSE
、実際の最小化問題が作成されます。
ところで:nls.lm
ヘルプ ページの例 1は良い例です。そこの
最小化されていますが、実際には
はnls.lm
関数によって最小化されますが、 がgetPred(p,xx)
返されますsim
。
どんな提案も役に立ちます。前もって感謝します。ミカ
c++ - 物体の浮遊状態を求める最適化手法
解決すべき問題は、浮体の重量と重心を考慮して、浮体の浮状態を見つけることです。
私が使用する関数は、沈下、かかと、およびトリムが与えられたときに、変位した体積と体の浮力の中心を計算します。シンケージは長さの単位で、ヒール/トリムは -90 ~ 90 の値に制限された角度です。
浮いている状態は、押しのけ容積が重量に等しく、重心が弾心と垂直の線上にあるときです。
これは、3 つの変数 (沈み込み、トリム、ヒール) と 3 つの方程式を使用した非線形ニュートン ラフソン根検出問題として実装されています。この方法は機能しますが、適切な初期推測が必要です。したがって、これに対するより良いアプローチ、または初期値を見つけるための良い方法を見つけたいと思っています。
以下は、ニュートン-ラフソン反復に使用されるニュートンおよびヤコビアン アルゴリズムのコードです。関数 volume は、sinkage、heel、および trim のパラメーターを使用します。ボリュームと浮力の中心の座標を返します。
maxabs と GSolve2 アルゴリズムも含めました。これらは Numerical Recipies から取得したものだと思います。
r - Rでは、微分方程式を解くことを含む非線形最小二乗最適化を行う方法は?
私の問題を説明するために再現可能な例で更新してください
私の最初の質問は、「R での信頼領域反射最適化アルゴリズムの実装」でした。ただし、再現可能な例を作成する途中で(@Benのアドバイスに感謝します)、私の問題はMatlabの1つの関数であることに気付きましたlsqnonlin
私が持っているほとんどの場合に十分です(つまり、良い開始値を選択する必要がないことを意味します)が、Rにはそのような1対1の関数はありません。さまざまな最適化アルゴリズムが、さまざまなケースで適切に機能します。アルゴリズムが異なれば、到達する解も異なります。この背後にある理由は、R の最適化アルゴリズムが Matlab の信頼領域反射アルゴリズムより劣っているということではなく、R が自動微分を処理する方法にも関連している可能性があります。この問題は、実際には 2 年前に中断された作業が原因です。当時、パッケージoptimxの作成者の 1 人である John C Nash 教授は、Matlab lsqnonlin が R の最適化関数/アルゴリズムよりも優れたパフォーマンスを発揮する理由かもしれません。
以下の例は、私が遭遇したいくつかの問題を示しています (より再現可能な例が追加されています)。サンプルを実行するには、まず を実行しますinstall_github("KineticEval","zhenglei-gao")
。パッケージmkinとその依存関係をインストールする必要があり、さまざまな最適化アルゴリズム用に他のパッケージを多数インストールする必要がある場合もあります。
lsqnonlin
基本的に、Matlab 関数のドキュメント ( http://www.mathworks.de/de/help/optim/ug/lsqnonlin.html )で説明されているように、非線形最小二乗曲線近似問題を解決しようとしています。私の場合の曲線は、一連の微分方程式によってモデル化されています。例を挙げてもう少し説明します。私が試した最適化アルゴリズムは次のとおりです。
nls.lm
レーベンバーグ・マルカート出身のマルク- からのポート
nlm.inb
- からのL-BGFS-B
optim
- からのspg
optimx
solnp
パッケージのRsolnp
他にもいくつか試しましたが、ここには示していません。
私の質問の要約
lsqnonlin
私のタイプの非線形最小二乗問題を解決できるMatlabのように、Rには信頼できる関数/アルゴリズムがありますか? (私はそれを見つけることができませんでした。)- 単純なケースで、異なる最適化が異なるソリューションに到達する理由は何ですか?
lsqnonlin
R の機能の優れている点は何ですか? 信頼領域反射アルゴリズムまたはその他の理由?- 私のタイプの問題を別の方法で解決するためのより良い方法はありますか? 多分もっと簡単な解決策があるかもしれませんが、私はそれを知りません。
例 1: 単純なケース
最初に R コードを与え、後で説明します。
最後の行からの出力は次のとおりです。
「Marq」と「solnp」を除いて、他のアルゴリズムは最適に達しませんでした。さらに、「spg」メソッド (「bobyqa」などの他のメソッドも) は、このような単純なケースに対してあまりにも多くの関数評価を必要とします。さらに、開始値を変更してk_Parent=0.0058
、ランダムに選択された の代わりに (そのパラメーターの最適値) を作成すると0.1
、「Marq」は最適値を見つけることができなくなります。(以下にコードを示します)。「solnp」が最適なものを見つけられないデータセットもありました。ただし、lsqnonlin
Matlab で使用する場合、このような単純なケースでは問題は発生しませんでした。
最後の行からの出力は次のとおりです。
ここで最適化していることを説明します。上記のスクリプトを実行して曲線を確認した場合は、一次反応を伴う 2 コンパートメント モデルを使用して曲線を記述します。モデルを表す微分方程式は次のex1$diffs
とおりです。
この単純なケースでは、微分方程式から 2 つの曲線を表す方程式を導き出すことができます。最適化されるパラメータは$M_0,k_p, k_m, c=\mbox{FF_parent_to_Met} $
制約付き$M_0>0,k_p>0, k_m>0, 1> c >0$
です。
したがって、微分方程式を解かずに曲線を当てはめることができます。
このようにすると、経過時間はほぼゼロになり、最適に達します。ただし、この単純なケースが常にあるとは限りません。モデルは複雑になる可能性があり、微分方程式を解く必要があります。例 2 を参照
例 2、複雑なモデル
私はずっと前にこのデータセットに取り組んでいましたが、次のスクリプトを自分で実行し終える時間がありませんでした。(実行が完了するまで数時間かかる場合があります。)
これは、次のような警告メッセージが表示される例です。
元の質問
Matlab Optimization Toolbox ソルバーで使用される方法の多くは、信頼領域に基づいています。CRAN タスク ビュー ページによると、パッケージtrust、trustOptim、minqaのみ に、信頼領域ベースのメソッドが実装されています。ただし、勾配とヘシアンが必要ですtrust
。minqaでは、私が探しているものではないようです。私の個人的な経験から、Matlab の信頼領域 Reflective アルゴリズムは、R で試したアルゴリズムと比較してパフォーマンスが優れていることが多いため、R でこのアルゴリズムの同様の実装を見つけようとしました。trustOptim
bobyqa
ここで関連する質問をしました: R function to search for function
Matthew Plourde が提供した回答はlsqnonlin
、Matlab で同じ関数名を持つ関数を提供しますが、信頼領域反射アルゴリズムが実装されていません。Matthew Plourde の回答は一般に、関数を探している R ユーザーにとって非常に役立つと思うので、古いものを編集し、ここで新しい質問をしました。
もう一度検索しましたが、運がありません。同様の matlab 関数を実装する関数/パッケージがまだいくつかあります。そうでない場合は、Matlab 関数を直接 R に翻訳して、自分の目的に使用することが許されるかどうか疑問に思います。
r - R の非線形回帰はエラーを示します
nlsLM
パッケージの R 関数を使用してminpack.LM
いますが、次のエラーが発生します。
私はノイズを含む独自の信号を生成するため、信号の生成に使用したのと同じ関数を使用して回帰分析を実行しようとしているすべてのパラメーターを知っています。
問題は、そのnlsLM
関数が正常に実行され、正しいパラメーター値を見つけることさえできますが、最終的にそれらを見つけると、エラーが次のように表示されることです。
これ。23、RSS = 14.4698、Par. = 42.6727 0.78112 1 65.2211 15.6065 1
これ。24、RSS = 14.4698、Par. = 42.671 0.781102 1 65.2212 15.6069 1
stats:::nlsModel(formula, mf, start, wts) のエラー: 初期パラメータ推定値での特異勾配行列
そして、私は何をすべきかわかりません。それが何であるか、そしてどのように解決できるかを説明してください!
追加情報:
信号生成機能
gaus_width=15, gaus_A=1,Y0=0, error=2.0, show_graph=TRUE, norm="False"){
performance - Maximum efficiency
Maximum efficiency problem
The are N cities and there is a wanderer.
The time it takes for him to go from a town to another town is known - Txy (from town x to town y).
From any town he can go to any other town so it is a complete graph.
In each town there is a an amount of money Mx the wanderer wants to collect.
It isn't enough time to pass through all cities.
Having the total available time T and the starting point i, the problem is to find the best route so that the money he collects will be maximum.
Input numbers range:
- N is between 400 and 600
- Mx(M1, M2, ...) are between 100 and 500, x between 1 and N
- Txy are between 80 and 200, x and y are between 1 and N
- Txy is the optimal time distance so that Txy < Txz + Tzy, for any x, y and z between 1 and N.
- T is between 3500 and 5000