在这种情况下使用的遗传算法编码技术

时间:2016-04-24 19:35:38

标签: encoding genetic-algorithm

问题是找到使用遗传算法在许多仓库中产生最小总成本的最佳数量。

假设有n个仓库。与每个仓库相关的因素有几个:

  • LCost i :仓库i的装载成本
  • HCost i :仓库i的持有成本
  • TCost i :仓库运输成本
  • OCost i :仓库i的订购成本

每个仓库都有与之关联的数量Q i ,必须满足以下4个标准:

  • 加载约束:Q i * LCost i > = a i for warehouse i
  • 持有约束:Q i * HCost i > = B i for warehouse i
  • 交通限制:Q i * TCost i > = C i for warehouse i
  • 订购约束:Q i * OCost i > = D i for warehouse i

其中A,B,C和D是每个仓库的常数。

另一个重要标准是每个Q i 必须满足:

  • D i > = Q i

其中D i 是仓库中的需求。

总费用的等式是:

  

总成本=总和(Q i *(LCost i + HCost i + TCost i )+ OCost i / Q i

如何针对此问题编码染色体?我在想的是,结合给出Q i 的最小允许值的四个约束之一和最后一个约束,我可以得到Q i 的范围。然后我可以为该初始种群随机生成该范围内的值。但是如何在上述场景中执行交叉和变异?我如何编码染色体?

2 个答案:

答案 0 :(得分:1)

通常,在受约束的问题中,您基本上有三种可能的方法(关于进化算法):

1。将约束违规纳入适应性

您可以将您的适应度设计为违反约束的实际目标和惩罚的总和。极端情况是“死刑”,即任何以任何方式违反任何限制的个人都会受到最严重的伤害。

这种方法通常很容易实现,但是有一个很大的缺点:它经常会对具有良好构建块但过多地违反约束的解决方案进行处罚。

2。校正算子,抗编码

如果您的问题可能,您可以实施"纠正操作员" - 采用违反约束的解决方案并将其转换为不违反约束的另一个约束的运算符,从原始解决方案中保留尽可能多的结构。类似的事情是使用保证这样的编码,解决方案始终是可行的,即你有这样的解码算法,总能产生有效的解决方案。

如果可能,这可能是您可以采取的最佳方法。然而,它通常很难实现,或者如果没有重大变化而无法实现,这可能会大大减慢搜索速度,甚至使搜索变得无用。

3。多目标方法

使用一些多目标(MO)算法,例如NSGA-II,将您的约束违规措施转化为目标,并立即优化所有目标。 MO算法通常提供解决方案的pareto-front - 一组位于客观违规权衡空间前面的解决方案。

答案 1 :(得分:1)

使用Differential Evolution,您可以保持相同的表示形式,避免双重转换(整数 - >二进制,二进制 - >整数)。

变异操作是:

V(g+1, i) = X(g, r1) + F ⋅ (X(g, r2) − X(g, r3))

其中:

  • ir1r2r3是对人口中向量的引用,没有一个等于另一个
  • F是[0,1.5]范围内的随机常数

V突变体载体)与目标载体X(g, i))的元素重组,构建试验载体 u(g+1, i)。选择过程从试验向量和目标向量中选择更好的候选者(更多细节参见下面的参考文献)。

这种方法的有趣方面是:

  • 您没有重新设计代码。你需要一个不同的变异/重组算子,(或许)你必须将一些实数转换为整数,但它简单快速;
  • 对于约束管理,您可以采用zegkljan's answer;
  • 中描述的技术
  • DE已被证明对大范围的优化问题有效,并且它似乎适合您的问题。

参考文献: