2017-06-04 5 views
1

Matlabはリニアプログラムを解決するための複数のアルゴリズムを提供しています。例えば、Matlab R2012bは、「アクティブセット」、「信頼領域反射」、「内点」、「内点凸」、「levenberg-marquardt」、「信頼領域dogleg」、 lm-line-search '、または' sqp 'を指定します。matlabはすべてのlinprogアルゴリズムを実行しています(アルゴリズムのmatlabリストはありますか?)

しかし、他のバージョンのMatlabでは、さまざまなアルゴリズムがサポートされています。

ユーザーMatlab-Versionでサポートされているすべてのアルゴリズムでループを実行したいと思います。 Matlabの推奨命令のように注文するようにしたいと思います。

私はこのような何かを実装したいと思います:

i=1; 
x=[]; 
while (isempty(x)) 
    options=optimset(options,'Algorithm',Here_I_need_a_list_of_Algorithms(i)) 
    x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options); 
end 

99%で、このコードは

x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options); 

と同等でなければなりませんが、時にはアルゴリズムがあるため数値的な問題の空の配列をバック与えます( exitflag -4)。他のアルゴリズムの1つが解決策を見つける可能性がある場合は、私もそれらを試してみたいと思います。

私の質問は: インストールされているMatlabバージョンでサポートされているすべてのlinprogアルゴリズムのリストをMatlabが推奨するように自動的に取得する可能性はありますか?

私はすべてのアルゴリズムをループすると、他のシナリオでも意味をなさないと思います。たとえば、非常に正確なデータが必要で時間がかかる場合は、それらをすべて実行し、最良の結果を与えるものを評価することができます。 または、特定の構造を持つLPに対してどのアルゴリズムが最適であるかを見たい場合は、すべてのアルゴリズムをループしたいと考えています。

+0

私はmatlabに詳しくはありませんが、[クイックチェック](https://de.mathworks.com/help/optim/ug/choosing-the-algorithm.html#bsbwx4h)にはデュアルシンプレックス私が期待していた私のための2つの内点アルゴリズム(あなたは本当にLPについて話していますか?)もちろん、非線形アプローチのほとんどはLPも解くことができますが、私はそれをお勧めしません。私はそれらの実装がどれほど良いのか分かりませんが、LPは面倒ではありません(非常に不安定なものを除いて)。私はデュアルシンプレックスとインテリアポイントのalgsを試し、他のすべてを無視するだろう! (これは精度についての推論も簡素化します) – sascha

+0

@sascha残念ながら、dual-simplexは私の古いMatlab R2012bでは実装されていません。しかし、現在のMatlab R2017aのデュアルシンプレックスはデフォルトです。大規模な内部ポイント •中規模のアクティブセット •中規模のシンプレックス は、私の元の質問に記載されているアルゴリズムの一部がLP-ソルバー。 – Jakob

答えて

1

私が知る限りこれを自動的に行う方法はありません。本当にやりたいのなら、最も簡単なことは、オンラインドキュメントに行き、以前のバージョンをチェックすることです(最新のリリースだけでなく、古いバージョンでもオンラインドキュメントが利用可能です)。 :

r2012balgos = {'active-set', 'trust-region-reflective', 'interior-point', 'interior-point-convex', 'levenberg-marquardt', 'trust-region-dogleg', 'lm-line-search', 'sqp'}; 

... 

r2017aalgos = {...}; 

v = ver('matlab'); 

switch v.Release 
    case '(R2012b)' 
     algos = r2012balgos; 
    .... 
    case '(R2017a)' 
     algos = r2017aalgos; 
end 

% loop through each of the algorithms 

退屈なようですが、約30分かかります。

あなたが望んでいるほど、マスワークスがこれを簡単に作っていない理由は、あなたが求めていることは素晴らしい考えではないからです。

解決策が見つかるアルゴリズムとそうでないアルゴリズムが混在する人工的な問題を構築することは可能です。しかし、実際には、推奨されるアルゴリズムが解決策を見つけられない場合、これはアルゴリズムを切り替えるべきではないことを示しています。問題がうまく策定されていないことを示しています。 、または目的関数を再定式化する。

さらに、代わりのアルゴリズムをループするだけで、なぜ停止するのですか?制約の公差、最適性の公差、関数評価の最大数などのような他のオプションについても、たくさんの値をループさせてみませんか?これらは、アルゴリズムの選択として物事に影響を及ぼす可能性があります。そしてすぐに、最適化アルゴリズムを実行して、オリジナルの最適化のためのメタパラメータの領域を検索します。

これは素晴らしい計画ではありません。推奨されるアルゴリズムの1つを選択してそれに固執するのが良いでしょう。もし問題が解決しない場合は、最適化自体を過剰に調整するのではなく、 。

+0

私のアルゴリズムでは、理論上は解決策が必要な方法でLPが策定されています。しかし、1%未満では、exitflag -4が得られます。Exiting:primal residual、dual residual、またはupper-bound feasibilityがNaNであるため、収束できません。 (もちろん、ソルバ入力にNaNがないことを確認しました)インターネットでexitflag -4について見つかったのは、https://de.mathworks.com/matlabcentral/answers/272798-how-i-です。 MATLABソルバーのバグであるように見える、この問題が線形プログラムで発生する問題を解決します。パラメータを変更するだけで、exitフラグ-4を避けることができます。 – Jakob

+0

終了フラグが-4の場合は、NaNが最適化のどこかで取得されており、続行できないことを意味します。確かにバグかもしれませんが、それは起こりそうもなく、リンクにはそれを示すために何も言及していません。 NaNがある点で正しいとあなたの問題を定式化した可能性が高いです。おそらくパラメータを変更すると、これらの点が回避されたことになります。または、NaNが表示されないように問題を再定式化することができます。 –

+0

物事を診断するには、 'Display'オプションを' iter-detailed'に設定してみて、繰り返しのたびに何が起こっているのかを正確に見ることができます。私はNaNが正しかったことを知っていると思うでしょう。これは、あなたが物事を再構成して、彼らが起こり続けることがないようにするのに役立ちます。 –

関連する問題