このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
surrogateopt
ソリューションまたはプロセスの改善
surrogateopt
停滞
線形制約と整数制約の両方がある場合、surrogateopt
は、サロゲートを作成するために実行可能なポイントまたは十分な数の異なる実行可能なポイントを見つけられない可能性があります。このような場合、ソルバーは終了フラグ 2
(実行可能なポイントが見つからない) または 3
(実行可能なポイントが少なすぎる) で終了します。終了フラグ2
の詳細については、実行可能点が見つかりませんを参照してください。
終了フラグ 3
は、次の 2 つの方法で発生する可能性があります。
初期の代替を構築するには実行可能点が少なすぎました。
サロゲート リセット後にサロゲートを構築するには実行可能なポイントが少なすぎました。
surrogateoptplot
プロット関数を使用すると、どのケースが当てはまるかを確認できます。
options = optimoptions('surrogateopt','PlotFcn','surrogateoptplot'); [sol,fval,exitflag] = surrogateopt(arguments,options);
各サロゲートのリセット後、surrogateopt
は次のサロゲートを構築するためにさらに実行可能なポイントを必要とします。整数制約がある場合、surrogateopt
は実行可能点の集合を使い尽くすか、あるいは実行可能点が残っていても新しい実行可能点を見つけられない可能性がある。
surrogateopt
が少なくとも 1 回のリセットを実行した場合、解決策の探索は正常に完了しています。この場合、問題の解決策が見つかるかもしれません。
surrogateopt
が初期サロゲートを作成できなかった場合、または surrogateopt
がリセットされ、別の解決策を見つけようとする場合は、次の手順を実行します。
いくつかの制約を緩和します。
いくつかの線形制約を非線形に変更します。これにより、ソルバーは厳密な実行可能性を要求しなくなります。これにより、
surrogateopt
はサロゲートの構築に使用できるより実行可能点を獲得できるようになります。b
ベクトルに大きな値を選択して、いくつかの線形不等式制約を緩和します。スカラーを追加することで、すべてのb
値を一度に緩和できます。b = b + 5;
同様に、境界制約によって問題の実行可能なポイントが少なすぎる場合、およびそれが問題にとって意味がある場合は、境界を緩和します。上限を大きくするか、下限を小さくするか、またはその両方を選択します。スカラーを加算または減算することで、すべての境界を一度に緩和できます。
ub = ub + 3; lb = lb - 1;
実行可能点が見つかりません
surrogateopt
は、境界、整数制約、および線形制約に関して実行可能なポイントを見つけられない場合、終了フラグ 2
を返します。この場合、問題は本当に実行不可能です。
ただし、非線形不等式制約に関して実行可能なポイントを見つけられない場合、ソルバーは終了フラグ 2
を返すこともできます。実行可能なポイントが存在する場合でも、これが発生することがあります。続行するには、実行不可能な点に収束 の手順に従ってください。
解決策は最適ではないかもしれない
通常、surrogateopt
は関数評価がなくなると停止します。これは、surrogateopt
が最適解に到達しても停止しないことを意味します。ただし、サロゲート リセットが発生すると、現在のソリューションは通常、局所最適値に近くなります。
ソリューションの品質をどのように評価できますか?一般的に、これを実行するのは困難です。ここでは、ソリューションを調査してそのローカル品質を判断するための手順をいくつか示します。ただし、ある点が大域解であることを保証する手順は存在しません。ソリューションがグローバルであることを証明できますか?を参照してください。
問題に整数制約がない場合は、近くの点を調べます。これを行うには、返されたソリューションに対して
patternsearch
を呼び出します。InitialMeshSize
オプションを、使用する探索ステップのサイズに設定します。patternsearch
に時間がかかりすぎないようにするには、MaxIterations
オプションを1
に設定し、UseCompletePoll
オプションをtrue
に設定します。options = optimoptions('patternsearch',... 'InitialMeshSize',1e-3,... 'MaxIterations',1,'UseCompletePoll',true);
問題に非線形制約がある場合は、まず 非線形制約を surrogateopt 形式と他のソルバー形式の間で変換する を使用して制約を
patternsearch
が受け入れる形式に変換します。問題に整数制約がない場合は、ソリューションから始めて
fmincon
を実行してみてください。繰り返しになりますが、問題に非線形制約がある場合は、まず 非線形制約を surrogateopt 形式と他のソルバー形式の間で変換する を使用して制約をfmincon
が受け入れる形式に変換します。問題でシミュレーションまたは ODE ソルバーが使用される場合は、fmincon
の差分オプションを大きく設定する必要があるかもしれません。シミュレーションまたは常微分方程式の最適化を参照してください。問題に整数制約がある場合は、
surrogateopt
を実行してさらに関数を評価する以外にできることはほとんどありません。チェックポイント ファイルを使用すると、最も効率的に実行できます。チェックポイントファイルの操作を参照してください。チェックポイント ファイルを使用していない場合は、InitialPoints
オプションを使用して初期点のセットを指定することもできます。