私はMatlabスクリプト(実際には関数funModel
)を持っています。これは、遺伝的アルゴリズムを介して7つの整数変数で解決しようとしています。
nvars = 7; %number of variables
Aineq = [1 1 1 1 1 1 1]; Aeq = [];
bineq = [VesMaxCrew]; beq = [];
LowBound = [1 1 1 1 1 4 0];
UpBound = [1 1 VesMaxCrew 1 VesMaxCrew VesMaxCrew VesMaxCrew];
Nonlcon = [];
IntCon = [1:7]; % all 7 variables to be treated as integers
Options = gaoptimset('Display','iter',... %display every iteration
'Generations',70,... %maximum number of generations is 70
'TolFun',1,... %tolerance for optimisation is 1
'TolCon',1,...
'PlotFcns',@gaplotbestf);
OptimisedValue = ga(@funModel,nvars,Aineq,bineq,Aeq,beq,,LowBound,UpBound,NonlCon,IntCon,Options);
遺伝的アルゴリズムは正常に機能し、70世代以内に簡単に適切な解を見つけます(プロット関数で確認できます@gaplotbestf
)。現在の入力では、25〜30世代後のすべての個人に最適なソリューションが選択されます。ただし、アルゴリズムは51世代が作成されるまで実行され続けます。これは、少なくとも20世代は多すぎるように思われます。
の入力パラメータを変更してもfunModel
、遺伝的アルゴリズムは少なくとも51世代を実行します。これは、アルゴリズムが最低51世代を実行する必要があるという制約や設定があるためです。(ご覧のとおり、最大世代数が入力されています)
なぜアルゴリズムは25世代または30世代の間で停止しないのですか?(または30世代直後)そしてもっと重要なことに、これを変更する方法を知っている人はいますか?
(Matlabのドキュメントで最小世代の設定()について何も見つけることがgaoptimset
できませんでした。同じ問題/質問を持つ人を見つけることもできませんでした。)