遗传算法相同的结果

4视图(30天)
Fatih Yigit
Fatih Yigit 2022年4月14日
评论道: Fatih Yigit2022年4月16日
你好。我有一个优化问题,旨在安排机械降低旅行距离5部分组成。这些问题由8机和5部分组成。机器应该是串行的方式组织。
我创建的函数计算的距离。
这两个函数。如果我输入一个可行sılution它有正确的输出。
而遗传算法部分下面,总是以79和进度要转换的结果5-4-3-2-1-8-7-6机订单。
(1:9:64)= 1;即使是这个解决方案也比79,因为它给了67。实际上它是1-2-3-4-5-6-7-8机器的订单。
不管有多少运行时,它总是以相同的结果。
我甚至不知道原因,但手动有多个更好的解决方案。万博 尤文图斯请你帮我图的原因是卡在一个单一的解决方案吗?
+ +
clc;清除所有;关闭所有;
磅= 0 (64);
乌兰巴托= 1 (64);
说真的= [1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1];% =等式约束的一部分
j = 0;
j = 1:8
Aeq (j, 1 + j-1:8:64 + j - 1) = 1;%等式约束
结束
j = 1:8
Aeq (j + 8 (j - 1) * 8 + 1: (j - 1) * 8 + 8) = 1;
结束
选择= optimoptions(“遗传算法”,“PlotFcn”, @gaplotbestf);
[x, fval exitflag、输出人口,分数)= ga (@TotalDistanceTravelledv2, 64年,[][],Aeq,说真的,磅,乌兰巴托,[],1,选项)
z = 0;
s = 1:8
z = z + 1;
结果(z) =找到(x ((s - 1) * 8 + 1: (s - 1) * 8 + 8) = = 1);
结束
+ +
%使用二进制值作为输入的第一个函数。
函数[TotalDistanceTravelled] = TotalDistanceTravelledv2 (MachineInput)
s manbetx 845ProductSchedule = readmatrix (“UrunSira.xlsx”);
z = 0;
s = 1:8
z = z + 1;
MachineRevised (z) =找到(MachineInput ((s - 1) * 8 + 1: (s - 1) * 8 + 8) = = 1);
结束
MachineInput = MachineRevised;
j = 1:8
序列= MachineInput (j);
MachineLayout (j,序列)= 1;
结束
TotalDistanceTravelled = DistanceTravelledCalculation s manbetx 845(ProductSchedule MachineLayout);
结束
第二个函数%计算距离
函数[TotalDistanceTravelled] = DistanceTravelledCalculation (Producs manbetx 845tSchedule MachineLayout)
%机布局眼睛(8)Dersteki Ornek
%s manbetx 845 ProductSchedule伊势Dosyadan Alınıyor excel dosyası
%机指数
s = 1:8
MachineIndex (s) =找到(MachineLayout(年代:)= = 1);
结束
%确定Hesabı
因为我= 1:5
j = 1:8
t = s manbetx 845ProductSchedule (i, j);% Verinin Al nmas ?
如果t = = 0
t =时间表(i, j - 1);% Arada " 0 "瓦萨Onun Duzeltilmesi
结束
计划(i, j) =找到(MachineLayout (t):) = = 1);
结束
结束
ScheduleBackup =时间表;
%计算行驶距离
j = 1:5
因为我= 1:7
如果时间表(j,我+ 1)= = 0
计划(j,我+ 1)=计划(j,我);
结束
DistanceTravelled (j,我)= abs(计划(j,我+ 1)-计划(j,我));
结束
结束
TotalDistanceTravelled =总和(DistanceTravelled,“所有的”);
结束

答案(1)

Xinzhi江
Xinzhi江 2022年4月15日
嗨Fatih,
我没有经过你的代码,但有一个技巧可以帮助避免前一个解决办法是制定解决方案作为你下次运行约束,
如。
abs (x (i) - your_undesirable_value_of_x(我))-公差< = 0
希望有帮助。
3评论
Fatih Yigit
Fatih Yigit 2022年4月16日
我相信这是Matlab的版本。我没有给反馈和Matlab网站没有这样的信息。
不管怎样,都要谢谢您。

登录置评。

标签

社区寻宝

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

开始狩猎!