このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
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.