Matlab中的遗传算法-未按预期终止
我正试图在Matlab中使用GA解决一个问题,优化正在通过设定的代数运行,并按预期减少函数值(如下图所示)。但不期望的是,它没有绘制生成me的百分比标准,例如,在下图中,它应该略低于40%完成,但事实并非如此。 这是我的密码:Matlab中的遗传算法-未按预期终止,matlab,genetic-algorithm,Matlab,Genetic Algorithm,我正试图在Matlab中使用GA解决一个问题,优化正在通过设定的代数运行,并按预期减少函数值(如下图所示)。但不期望的是,它没有绘制生成me的百分比标准,例如,在下图中,它应该略低于40%完成,但事实并非如此。 这是我的密码: IntCon=[]; % Set integer variables vfun=@(x)objective(x, univ_names, univ_data, weight_names, weight_data, net_names, net_data, normali
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)
然后,如果我让它继续,它从一开始就重新开始(在一个更糟糕的函数值),在这一点上,它开始认为它已经满足了一些终止标准的百分比,即代数
然后让它完成后,我得到:
及
因此,它选择了一个比第一次运行时更糟糕的函数值!它为什么要做“第二次”和“第三次”呢
在另一个例子中,我包含了迭代信息,很明显,它没有包含从一代到下一代的最佳函数值。例如,图中显示,在经过50代之后,函数值几乎降低到425,如下图中底部三角形集所示:
但是它认为min是435.011?而这50代人只是一代。见下文:
生成f-计数f(x)约束生成
1 1060 435.011 0 0
2 2100 434.396 0 0
33140434.267000
但是,matlab终端中的输出认为,经过大约50代之后,图形是1代,并打印到屏幕上
然后,在终止优化后,它看起来像:
有什么想法吗?谢谢 问题在于,如果没有整数变量,则具有非线性约束的遗传算法的Matlab实现无法处理设计问题!我将may变量中的一个变量更改为整数变量,如下所示
IntCon=[1]; % Set integer variables
然后我运行相同的脚本和函数来获得
优化已终止:超过最大生成数
x=
fval=
3.5410e+03
出口滞后=
0
输出=
problemtype: 'integerconstraints'
rngstate: [1x1 struct]
generations: 50
funccount: 2041
message: 'Optimization terminated: maximum number of generations exceeded.'
maxconstraint: 0
0
problemtype: 'integerconstraints'
rngstate: [1x1 struct]
generations: 50
funccount: 2041
message: 'Optimization terminated: maximum number of generations exceeded.'
maxconstraint: 0