【问题标题】:Genetic algorithm: Minimum Number of Generations?遗传算法:最小代数?
【发布时间】:2013-02-15 19:01:58
【问题描述】:

我有一个 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) 的任何信息。我​​也找不到遇到相同问题的人。)

【问题讨论】:

  • 你能给我们看一下“最佳解决方案超过一代”和“社会平均适应度超过一代”的图表吗?可能是,即使找到了最优值,它仍然会尝试改进(因为它当然不知道找到的最优值)。
  • @Shahbaz:感谢您的快速回复!然而,即使它试图找到一个更优化的解决方案,为什么总是这个最少的 51 代?
  • 可能很幸运,并且与您的问题的性质有关。或者可能是实施该算法的人认为至少 50 代有助于防止过早(和错误)终止,所以他只是将其放在实施中而没有记录它。
  • "Stall generation" 选项的默认值为 50。这实际上是在您的情况下停止的点。 [MatlabDoc] (mathworks.com/help/gads/genetic-algorithm-examples.html#f15811)
  • @aircooled:这确实是我想要的。很抱歉,我没有检查手册足够好:s。非常感谢您的回答!

标签: matlab optimization genetic-algorithm minimum


【解决方案1】:

“Stall generation”选项的默认值为 50。这实际上是它在您的情况下停止的点。这可以被认为是最小的世代数。更多详情请查看here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-08
    • 2017-05-30
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 2016-09-13
    相关资源
    最近更新 更多