我有一个 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 代内轻松找到了一个很好的解决方案(从 plot 函数可以看出@gaplotbestf
)。使用当前输入,在 25 到 30 代后为每个个体选择最佳解决方案。然而,该算法会继续运行,直到完成 51 代。这看起来至少有 20 代太多了。
即使我更改 的输入参数funModel
,遗传算法仍然至少运行 51 代,就像有一些约束或设置说算法必须至少运行 51 代。(可以看出,已经输入了最大代数)
为什么算法不会在 25 或 30 代之间停止?(或仅在 30 代之后)更重要的是,有人知道如何改变这一点吗?
(我无法gaoptimset
在 Matlab 文档中找到关于最小代数设置()的任何信息。我也找不到有相同问题/问题的人。)