Main Content

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

surrogateopt の開始点と値の指定 (問題ベース)

一部のソルバーでは、目的関数値と制約関数値がある場合、それらの値を x0 引数の solve に渡すことができます。これによってソルバーの時間を短縮できます。OptimizationValues オブジェクトのベクトルを渡します。関数 optimvalues を使用して、これらのベクトルを作成します。

目的関数値を使用できるソルバーは次のとおりです。

  • ga

  • gamultiobj

  • paretosearch

  • surrogateopt

非線形制約関数値を使用できるソルバーは次のとおりです。

  • paretosearch

  • surrogateopt

たとえば、初期点のグリッドからの値で開始し、surrogateopt を使用して関数 peaks を最小化します。変数 x に -10 ~ 10 のグリッドを作成し、変数 y に間隔 1/2 で –5/25/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: 26.4598
          funccount: 200
    constrviolation: 0
               ineq: [1x1 struct]
           rngstate: [1x1 struct]
            message: 'surrogateopt stopped because it exceeded the function evaluation limit set by ...'
             solver: 'surrogateopt'

参考

| |

関連するトピック