このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。
surrogateopt
の開始点と値の指定 (問題ベース)
一部のソルバーでは、目的関数値と制約関数値がある場合、それらの値を x0
引数の solve
に渡すことができます。これによってソルバーの時間を短縮できます。OptimizationValues
オブジェクトのベクトルを渡します。関数 optimvalues
を使用して、これらのベクトルを作成します。
目的関数値を使用できるソルバーは次のとおりです。
ga
gamultiobj
paretosearch
surrogateopt
非線形制約関数値を使用できるソルバーは次のとおりです。
paretosearch
surrogateopt
たとえば、初期点のグリッドからの値で開始し、surrogateopt
を使用して関数 peaks
を最小化します。変数 x
に -10 ~ 10 のグリッドを作成し、変数 y
に間隔 1/2 で –5/2
~ 5/2
のグリッドを作成します。初期点での目的関数値を計算します。
x = optimvar("x",LowerBound=-10,UpperBound=10); y = optimvar("y",LowerBound=-5/2,UpperBound=5/2); prob = optimproblem("Objective",peaks(x,y)); xval = -10:10; yval = (-5:5)/2; [x0x,x0y] = meshgrid(xval,yval); peaksvals = peaks(x0x,x0y);
optimvalues
を使用して x0
引数の値を渡します。これにより、solve
が値を計算する必要がなくなり、solve
の時間が短縮されます。行ベクトルとして値を渡します。
x0 = optimvalues(prob,'x',x0x(:)','y',x0y(:)',... "Objective",peaksvals(:)');
surrogateopt
と初期値を使用して、問題を解きます。
[sol,fval,eflag,output] = solve(prob,x0,Solver="surrogateopt")
Solving problem using surrogateopt.
surrogateopt stopped because it exceeded the function evaluation limit set by 'options.MaxFunctionEvaluations'.
sol = struct with fields:
x: 0.2279
y: -1.6258
fval = -6.5511
eflag = SolverLimitExceeded
output = struct with fields:
elapsedtime: 19.2871
funccount: 200
constrviolation: 0
ineq: [1x1 struct]
rngstate: [1x1 struct]
message: 'surrogateopt stopped because it exceeded the function evaluation limit set by ...'
solver: 'surrogateopt'
参考
surrogateopt
| solve
| optimvalues