このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
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)
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)
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