ga(遗传算法)违反了线性约束

4视图(30天)
气,所以
气,所以 2020年12月7日
回答: 艾伦·韦斯 2020年12月7日
你好,
我创建了一个基于仿真的优化问题,但我一直得到解答,违反了线性约束。我无能为力复制粘贴整个代码因为有太多的线。因此,我创建了一个函数 函数 我已经取代模拟:
= (1 1 0 0 0 0 0 0;0 0 1 1 0 0 0 0;0 0 0 0 1 1 0 0;0 0 0 0 0 0 1);
b = (0, 0, 0, 0);
1磅= [1 e-9 e-9 0.6 0.6 1 e-9 1 e-9 0.5 - 0.5);
乌兰巴托= [1 e - 1 e - 0.8 - 0.8 1 e - 1 e - 1 1];
全球xvar yscore
xvar = [];
yscore = [];
func = @ (x) x (1) / (2) * x (3) + (5) / x (6) * (4) - x (1) / x (6) * (7) + x (2) / (5) * x (8);
选择= optimoptions(“遗传算法”,“ConstraintTolerance”, 1 e-13 OutputFcn, @gaoutfun, PlotFcn, @gaplotbestf, UseParallel,真的,CrossoverFcn, {@crossoverintermediate 1}, CrossoverFraction, 0.2,“MutationFcn”,“mutationadaptfeasible”)
[x, fval exitflag、输出人口,分数)= ga (func 8 A、b[],[],磅,乌兰巴托,[],[],选项);
函数[选项,optchanged] = gaoutfun(选项、状态标志)
全球xvar yscore
xvar = [xvar;state.Population];
yscore = [yscore;state.Score];
optchanged = false;
结束
在这个例子中,我能够得到正确的解决方案。然而,我检查 xvar, 我notoiced有些种群线性约束违反。我想如果他们还将导致线性约束情况,违反了因为我还看见他们在orignial优化问题。

答案(1)

艾伦·韦斯
艾伦·韦斯 2020年12月7日
首先我会重新调节问题。你的 x (1) , x (2) , x (5) , x (6) 变量应乘以1 e8或1 e9,以便他们有1/10范围10或1到100,而不是1 e-9 1 e。你可以扩展他们下来在你的健身功能。
艾伦·韦斯
MATLAB数学工具箱文档

类别

找到更多的在农业帮助中心文件交换

s manbetx 845


释放

R2020b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!