2017-01-16 8 views
-2

私はmax-minを計算するmatlabコードを書いています。私は、次のような問題を解決するために、MATLABの "fminimaxを" を使用しています :MATLABでmax-minを検索

ki=G(i,:); 
ki(i)=0; 
fs(i)=-((G(i,i)*pt(i)+sum(ki.*pt)+C1)-(C2*(sum(ki.*pt)+C1))); 

G:システム行列です。 pt:は最適化変数です。

実際のシステム行列を使用すると、 "fminimax"は1回の繰り返しの後に停止し、 "pt"の初期値が何であっても解が見つからなくても "pt"の初期値を返します。 (初期値はドキュメントのX0として定義されています)。システムは、以下のパラメータを有する.Gはe-11のオーダーであり、ptはe-1のオーダーであり、c1はe-14のオーダーである。
ランダムに生成されたテスト行列と異なるパラメータを試してみると、 "fminimax"が問題の解決策を見つけ、すべて正常に動作します。 Gはe-2、ptはe-2、c1はe-7の順である。
私は実際のシステムを拡大しようとしました: "fminimax"は複数の反復を続けましたが、まだptの初期値を返しました。つまり解決策が見つかりませんでした。
"options" [StepTolerance、OptimalityTolerance、ConstraintTolerance、およびfunctiontolerance]を使用して、 "fminmax"の許容値を変更しようとしました。全く影響はありませんでした。まだ解決策はありません。

"fminimax"の精度がそれほど高くないか、問題を解決するのに適していないという問題が考えられました。私はそれも遅いと思う。
私はCPLXをダウンロードしました。私は本で見つけた方法を使ってmax-min問題を線形プログラミングに変換したかったのです。しかし、シンプルなミニマックスで自分のコードを試しても、同じ解決策はありませんでした。

私はCVXを使用すると考えましたが、問題は凸ではありません。

何が問題なのですか?
P.システムマトリックス、Gは、異なる実現を持って、私はそれらのいくつかを試してみました。しかし、「fminimax」は、すべて同じ方法で応答します。つまり、適切な解決策を見つけることができませんでした。

+0

本、ツール、ソフトウェアライブラリ、チュートリアル、またはその他のオフサイトリソースをお勧めする質問は、スタックオーバーフローの話題になりがちです有害な回答やスパムを引き付けます。代わりに、問題を説明し、それを解決するためにこれまでに何が行われているかを記述します。 – dasdingonesin

+0

@dasdingonesin私は質問を修正した、私はそれが今より適していることを願っています。ヘッドアップをありがとう。 – os12

答えて

0

私は、最適化ソルバーが壊れているとは確信していません。問題が非凸である場合、複数のローカルミニマイザが存在する可能性があります。あなたが提供した情報があれば、私たちはあなたが最初の状態で始まったかどうかを知る方法がありません。

最初に行う必要があるのは、最適化の終了条件から詳細を取得することです...繰り返し回数に達したため終了しましたか? (何度も反復しているわけではないので願っていません)...許容範囲に達したために終了しましたか(たとえば、関数がxxxx以上で変更されていないなど)それとも実現可能な解決策が見つからなかったのでしょうか? (私は、あなたが満たす必要のある制約があるかどうかわかりません)。

おそらく、あなたはそれを実現せずにローカルミニマイザーから始めていると推測します。したがって、あなたが最初の推測で評価された関数のヤコビアンを見て、実際にローカルミニマイザーにいるかどうかを判断する必要があります。解析的に計算するか有限階近似を使用してください。

関連する問題