このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。
varindex
を使用した問題ベースアプローチでのオプションの設定
問題ベースのアプローチを使用するときに特定のオプションを設定するには、varindex
を呼び出して問題変数をインデックスに変換する必要があります。たとえば、ga
ソルバーは、2 行の行列である InitialPopulationRange
という名前のオプションを受け入れます。最初の行は問題の変数の下限を表し、2 番目の行は上限を表します。行列の列は、問題の変数である集団内の個体を表します。列インデックスを問題の変数に一致させるには、varindex
を使用します。
たとえば、目的関数を、この例の最後に示されているヘルパー関数 mrosenbrock
に設定します。この目的関数は、すべてのに対して点の近くで0に近くなります。3D 問題変数 x
と y
を行形式で作成します。これは、ga
が期待する形式です。
x = optimvar("x",1,3); y = optimvar("y",1,3);
目的関数 mrosenbrock(x,y)
を使用して最適化問題を作成します。
prob = optimproblem("Objective",mrosenbrock(x,y));
x
変数の初期範囲を [-1 2]
に設定し、 y
変数の初期範囲を [0 3]
に設定します。そのためには、変数のインデックスを見つけます。
xidx = varindex(prob,"x")
xidx = 1×3
1 2 3
yidx = varindex(prob,"y")
yidx = 1×3
4 5 6
初期範囲を 2 行の行列として設定します。最初の行には下限が含まれ、2 番目の行には上限が含まれます。
poprange = zeros(2,max([xidx,yidx])); poprange(1,xidx) = -1; poprange(2,xidx) = 2; poprange(1,yidx) = 0; poprange(2,yidx) = 3; disp(poprange)
-1 -1 -1 0 0 0 2 2 2 3 3 3
乱数ジェネレータを設定し、初期範囲行列を使用して問題を解きます。
rng default % For reproducibility opts = optimoptions("ga","InitialPopulationRange",poprange); [sol,fval] = solve(prob,"Solver","ga","Options",opts)
Solving problem using ga. ga stopped because the average change in the fitness value is less than options.FunctionTolerance.
sol = struct with fields:
x: [1.2583 0.7522 1.2317]
y: [1.5830 0.5653 1.5167]
fval = 0.1818
返されるソリューションの目的関数値はかなり小さくなります。
補助関数
次のコードは、補助関数 mrosenbrock
を作成します。
function F = mrosenbrock(x,y) F = [10*(y - x.^2),1 - x]; F = sum(F.^2,2); end