【问题标题】:Genetic Algorithm in Matlab - Not terminating as expectedMatlab中的遗传算法 - 未按预期终止
【发布时间】:2015-05-01 05:16:33
【问题描述】:

我正在尝试在 Matlab 中使用 GA 解决问题,并且优化正在运行设定的代数并按预期减少函数值(如下图所示)。但出乎意料的是,它没有绘制一代 me 的百分比标准,例如在下图中它应该完成了不到 40%,但事实并非如此。

这是我的代码:

IntCon=[]; % Set integer variables
vfun=@(x)objective(x, univ_names, univ_data, weight_names, weight_data, net_names, net_data, normalized_name, normalized_data);
nonlcon=@(x)constraint(x,net_names, net_data);

 pop = 40;
 gen =50; 
 ini=rand(pop,nvars);
 time = inf; % time in (s)
 options = gaoptimset('TimeLimit', time, 'InitialPopulation',ini,'PopulationSize',pop,'Generations',gen,'PlotFcns',{@gaplotbestfun, @gaplotstopping});

[x,fval,exitflag,output] = ga(vfun,nvars,[],[],[],[],x_L,x_U,nonlcon,IntCon,options)

然后,如果我让它继续,它会从头开始(以更差的函数值),此时它开始认为它已经满足了代数终止标准的某个百分比

然后让它完成后,我得到: 和

Optimization terminated: average change in the fitness value less than options.TolFun
 and constraint violation is less than options.TolCon.

x =3.3242    1.8450    0.5918    0.6000


fval =  3.5208e+03


exitflag =   1


output = 

      problemtype: 'nonlinearconstr'
         rngstate: [1x1 struct]
      generations: 3
        funccount: 6160
          message: [1x140 char]
    maxconstraint: 0

所以,不知何故,它选择了比第一次运行时发现的更差的函数值!为什么要进行“第二次”和“第三次运行”?

在另一个例子中,我包含了迭代信息,很明显它没有包含从一代到下一代的最佳函数值。例如,在图表中,它显示在 50 代之后,它会将函数值降低到几乎 425,如下图底部的一组三角形所示:

但它认为最小值是 435.011?而这50代人只是其中之一。见下图: Generation f-count f(x) 约束 Generations 1 1060 435.011 0 0 2 2100 434.396 0 0 3 3140 434.267 0 0

但是,matlab 终端中的输出认为,在图上大约 50 代之后是 1 代,它会打印到屏幕上

然后在优化终止后它看起来像:

有什么想法吗?谢谢!

【问题讨论】:

    标签: matlab genetic-algorithm


    【解决方案1】:

    问题是,如果没有整数变量,Matlab 的具有非线性约束的遗传算法实现无法处理设计问题!我将其中一个变量更改为整数变量

    IntCon=[1]; % Set integer variables
    

    然后我运行相同的脚本和函数来获取

    优化终止:超过了最大代数。

    x =

    3.0000    1.6261    0.5881    0.6002
    

    fval =

    3.5410e+03

    退出标志 =

     0
    

    输出 =

      problemtype: 'integerconstraints'
         rngstate: [1x1 struct]
      generations: 50
        funccount: 2041
          message: 'Optimization terminated: maximum number of generations exceeded.'
    maxconstraint: 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-03
      • 2013-11-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      • 2014-06-15
      相关资源
      最近更新 更多