具有硬约束和软约束的多目标适应度函数

计算科学 优化 算法
2021-12-02 18:07:25

背景

我正在使用遗传算法来解决多次旅行商问题。当我的适应度函数只有一个约束(距离)时,它工作得很好:即:总距离越小,个体生存的机会就越大。

但现在我想添加其他约束,例如:

  • 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 * 20
  • time-windows score * 20
  • capacity score * 30
  • competence score * 30

(3)然后将所有这些结果相加。这个总和就是健身成本,越高越好。

问题

  1. 拳头,我的方向正确吗?
  2. 是否有推荐/一般的方法来实现多目标健身功能?
  3. 我怎样才能使这些约束变硬或变软?
  4. 我怎样才能防止过早优化或局部最优(即:除了距离之外的所有约束都得到满足,但是距离优化更好的个体会因为他们在适应度函数中表现不佳而不断死亡)?

非常欢迎其他建议!

谢谢!

PS:很抱歉我选择了标签,我没有创建新标签的声誉,我至少会用遗传算法标记它!

1个回答

使用不同适应度函数的加权和是处理多个目标的相当标准的方法。当然,您的最终答案很大程度上取决于您设置的优先级。

就使约束变硬和变软而言,看起来您当前的设置似乎都具有软约束。如果某个人在其中一个目标上做得足够好,它可能无法满足其他要求,我认为这不是你想要的。

我会从适应度函数中移除硬约束,并简单地检查每个人以确保他们满足所有要求。如果他们不满足他们,甚至不评估适应度函数,把他们扔掉。

对于您的软约束,一种选择是在您进入后代时更改您的多目标系数。例如,让D是距离的客观值,越高D变得更好。T是时间的客观价值,你提到的是你的软约束之一。然后,您可以将目标函数表述为:D+f(n)T在哪里n是你所在的那一代人。如果f(n)是一个递增函数,如果个人在您的距离度量中表现得足够好,您将允许早期几代人错过时间,但是因为n增加,T变得越来越重要,直到您的所有个人都满足您的时间要求(其中T会达到一些高但恒定的值)。

这种设置将有助于避免您在第四点中提到的局部最小值。当然,我会在这里听从其他回答者的意见,因为我自己在优化这种类型方面的经验很少,并且可能有更多的“教科书”方式来处理软约束。