Main Content

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

履歴書 ga

デフォルトでは、ga は実行するたびに新しい初期集団を作成します。ただし、前回の実行からの最終的な集団を新しい実行の初期集団として使用することで、より良い結果が得られる可能性があります。そのためには、gaを次の構文で呼び出して、前回の実行から最終的な集団を保存しておく必要があります。

[x,fval,exitflag,output,final_pop] = ga(@fitnessfcn,nvars);

最後の出力引数は最終的な母集団です。final_popを初期集団としてgaを実行するには、次のように入力します。

options = optimoptions('ga','InitialPop',final_pop);
[x,fval,exitflag,output,final_pop2] = ... 
		ga(@fitnessfcn,nvars,[],[],[],[],[],[],[],options);

次に、2 回目の実行からの最終的な集団である final_pop2 を、3 回目の実行の初期集団として使用できます。

たとえば、この例を実行するときに使用できる 2 つの変数の関数である Ackley 関数を最小化します。

rng(100) % For reproducibiliity
[x,fval,exitflag,output,final_pop] = ga(@ackleyfcn,2);
ga stopped because the average change in the fitness value is less than options.FunctionTolerance.

最適な関数値を調べます。

disp(fval)
    3.5527

最終的な集団から ga を実行して、より良い解を得るようにしてください。

options = optimoptions('ga','InitialPopulationMatrix',final_pop);
[x,fval2,exitflag2,output2,final_pop2] = ... 
		ga(@ackleyfcn,2,[],[],[],[],[],[],[],options);
ga stopped because the average change in the fitness value is less than options.FunctionTolerance.
disp(fval2)
    2.9886

適応度関数の値が大幅に向上します。

もう一度試して解決策を改善してください。

options.InitialPopulationMatrix = final_pop2;
[x,fval3,exitflag3,output3,final_pop3] = ... 
		ga(@ackleyfcn,2,[],[],[],[],[],[],[],options);
ga stopped because the average change in the fitness value is less than options.FunctionTolerance.
disp(fval3)
    2.9846

今回の改善はわずかです。

著作権 2020–2022 The MathWorks, Inc.

関連するトピック