我有一个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
)的任何内容。我也没能找到有同样问题/问题的人。)