背景
我正在使用遗传算法来解决多次旅行商问题。当我的适应度函数只有一个约束(距离)时,它工作得很好:即:总距离越小,个体生存的机会就越大。
但现在我想添加其他约束,例如:
time-windows:例如:salesman1 (S1) 工作在 9h 和 17h 之间,city1 (C1) 工作在 9h 和 12h 之间,C2 工作在 11h 和 13h 之间。
容量:S1 有一辆容量为 10 箱(无论是什么单位)的车辆,C1 想要 2 箱,C2 将提供 3 箱。
能力:S1 有冷藏车,S1 需要易腐烂的货物,等等。
另外,我认为当一个人可以生存一代(有更多机会)时,即使约束没有完全满足(即:距离,时间窗口),约束也是软的。必须满足硬约束才能使个人生存(即:能力、能力)。
我已经对基因表示和我应该用来解决这个问题的技术感到满意。
我的尝试
到目前为止,这就是我想出的实现我的健身功能的方法:
对于每个人:
(1)我将分别为每个约束计算/分配一个分数:
- 距离:每个推销员走过的总距离在
1 / km哪里km - time-window:每个城市的实际时间(当推销员访问城市时)与城市时间窗口之间的秒差在
1 / second哪里second - 容量:销售员车辆的超载/欠载数量在
1 / box哪里box - 能力:
+1如果分配的推销员满足要求的能力,则针对每个城市
(2)我将每个约束分数乘以一个因子(一种优先级,这就是使每个约束变硬或变软的原因?)
distance score * 20time-windows score * 20capacity score * 30competence score * 30
(3)然后将所有这些结果相加。这个总和就是健身成本,越高越好。
问题
- 拳头,我的方向正确吗?
- 是否有推荐/一般的方法来实现多目标健身功能?
- 我怎样才能使这些约束变硬或变软?
- 我怎样才能防止过早优化或局部最优(即:除了距离之外的所有约束都得到满足,但是距离优化更好的个体会因为他们在适应度函数中表现不佳而不断死亡)?
非常欢迎其他建议!
谢谢!
PS:很抱歉我选择了标签,我没有创建新标签的声誉,我至少会用遗传算法标记它!