【发布时间】: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 代,它会打印到屏幕上
然后在优化终止后它看起来像:
有什么想法吗?谢谢!
【问题讨论】: