このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。
Global Optimization Toolbox ソルバーの初期ポイント
一部の Global Optimization Toolbox ソルバーでは、初期点 x0
が必要です: patternsearch
、simulannealbnd
、GlobalSearch
、および MultiStart
。問題ベースのアプローチを使用して最適化問題を解決する場合、solve
と prob2struct
の 2 番目の引数に x0
を指定します。初期ポイントを指定するには、変数名をフィールドとして、変数値を構造体の値として持つ構造体を作成します。たとえば、スカラー変数 x
と patternsearch
ソルバーの 2 行 2 列の行列 y
の場合は、次のコードを入力します。
x0.x = 5; x0.y = eye(2) + 0.1*randn(2); [sol,fval] = solve(prob,x0,"Solver","patternsearch")
次に示すように、optimvalues
を使用してこれらのソルバーの初期点を指定することもできます。
その他の Global Optimization Toolbox ソルバーは初期点を必要としませんが、初期点または初期点のセットを受け入れることができます: ga
、gamultiobj
、paretosearch
、および surrogateopt
。これらのソルバーに初期ポイントを渡すには、optimvalues
を使用してポイントを作成します。
メモ
問題ベースのアプローチを使用する場合、次のようなオプションを使用して初期ポイントまたは初期集団を渡すことはできません。
InitialPopulationMatrix
(ga
用)InitialSwarmMatrix
(particleswarm
用)InitialPoints
(surrogateopt
用)
たとえば、ga
ソルバーの 2 次元変数 x
と 2 行 2 列の行列 y
を取ります。
x = optimvar('x',2,"LowerBound",-1,"UpperBound",1); y = optimvar('y',2,2,"LowerBound",-1,"UpperBound",1); prob = optimproblem("Objective",... cosh(dot(y*x,[2;-1])) - sinh(dot(y*x,[1;-2]))); prob.Constraints = y(1,2) == y(2,1); % Set initial population: x0x for x, x0y for y rng default x0x = [1;1/2]; x0y = eye(2)/2 + 0.1*randn(2); x0 = optimvalues(prob,'x',x0x,'y',x0y); % Solve problem [sol,fval] = solve(prob,Solver="ga")
ga stopped because the average change in the fitness value is less than options.FunctionTolerance. sol = struct with fields: x: [2×1 double] y: [2×2 double] fval = -48.6317
解は制約 y(1,2) == y(2,1)
を制約許容値 1e-3
内でのみ満たします: sol.y(2,1) = -1.0000
、ただし sol.y(1,2) = -0.9990
。