2

我有一个 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 文档中找到关于最小代数设置()的任何信息。我​​也找不到有相同问题/问题的人。)

4

1 回答 1

1

“摊位世代”选项的默认值为 50。这实际上是它在您的情况下停止的点。这可以被认为是最小的世代数。欲了解更多详情,请查看此处

于 2013-03-20T20:46:29.320 回答