Main Content

このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。

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 がリセットされ、別の解決策を見つけようとする場合は、次の手順を実行します。

  1. いくつかの制約を緩和します。

    • いくつかの線形制約を非線形に変更します。これにより、ソルバーは厳密な実行可能性を要求しなくなります。これにより、surrogateopt はサロゲートの構築に使用できる、より実現可能なポイントを獲得できるようになります。

    • b ベクトルに大きな値を選択して、いくつかの線形不等式制約を緩和します。スカラーを追加することで、すべての b 値を一度に緩和できます。

      b = b + 5;
  2. 同様に、境界制約によって問題の実行可能なポイントが少なすぎる場合、問題にとってそれが理にかなっている場合は、境界を緩和します。上限を大きくするか、下限を小さくするか、またはその両方を選択します。スカラーを加算または減算することで、すべての境界を一度に緩和できます。

    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 オプションを使用して初期ポイントのセットを指定することもできます。

参考

関連するトピック