メインコンテンツ

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

surrogateopt の変数を修正

この例では、いくつかの制御変数を最適化から削除して、その値を修正する方法を示します。値を修正する最も簡単な方法は、上限と下限を等しく設定することですが、一部のソルバーでは等しい境界が許可されません。ただし、surrogateopt は、最適化を試みる前に問題から固定変数を内部的に削除することで、等しい境界を適切に処理します。

multirosenbrock 関数は、任意の偶数個の制御変数を受け入れます。最小値 0 は点 [1,1,...,1,1] で達成されます。10 個の変数の下限を -1、上限を 5 に設定し、最初の 6 つの上限と下限を 1 に設定します。この設定により、問題から 6 つの変数が削除され、4 つの変数を含む問題が残ります。

lb = -1*ones(1,10);
ub = 5*ones(1,10);
lb(1:6) = 1;
ub(1:6) = 1;

問題を解きます。

fun = @multirosenbrock;
rng default % For reproducibility
[x,fval,exitflag] = surrogateopt(fun,lb,ub)

Figure Optimization Plot Function contains an axes object. The axes object with title Best Function Value: 0.942618, xlabel Iteration, ylabel Function value contains an object of type scatter. This object represents Best function value.

surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
x = 1×10

    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.1502    1.3170    0.0437   -0.0025

fval = 
0.9426
exitflag = 
0

ソルバーは大域的最小値に近いポイントを返します。ソルバーは 500 回の関数評価を実行することに注意してください。これは、10 個の変数を持つ問題の場合のデフォルト値です。ソルバーは、いくつかの変数を固定した場合でも、このデフォルト値を変更しません。

変数を固定しないと、ソルバーは大域的最小値に近い点に到達しません。

lb = -1*ones(1,10);
ub = 5*ones(1,10);
rng default % For reproducibility
[x,fval,exitflag] = surrogateopt(fun,lb,ub)

Figure Optimization Plot Function contains an axes object. The axes object with title Best Function Value: 0.810901, xlabel Iteration, ylabel Function value contains an object of type scatter. This object represents Best function value.

surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
x = 1×10

    1.3874    1.9276    1.4301    2.0454    1.3518    1.8288    1.3938    1.9430    1.4427    2.0821

fval = 
0.8109
exitflag = 
0

参考

トピック