2017-04-17 77 views
1

我一直在重新编码,优化和解码遗传算法。我第一次尝试的是有序交叉的旅行推销员,这很有效。我发现一篇文章试图优化更复杂的基因组,同时优化2d包装问题。断头台切割优化的遗传算法

作者用有意义的反向波兰符号来编码问题。它使用部件和V或H作为操作者的组合。

即34H5V

与具有被解析为这是我的最终布局一个堆叠元件堆栈进行解码。也就是说,直到某个点的操作员数量必须比直到同一点的部件数量少1个。作者然后说,他使用交叉混合交叉,对操作员使用零件和二元交叉。

我仔细研究了这一点,但我无法理解他在交叉之前如何分离零件和操作员,然后在评估性能之前重新组合它们,并提供一些细节。如果发生二元交叉时,用“X”代替部件以保持相对位置,以便在交叉之后重新组合,但操作员与部件之间的关系不成立。

有没有人可能有一个处理过类似情况的资源,或者可能已经成功地使用了它。

回答

0

这看起来比实际上更困难。当生成原始群体时,您需要遵守由后缀表示法设定的限制。当穿越时,您只需建立父面具

即xxxxooxoxx

其中x是一个对象,O是operaror。一旦你的面具持有的位置,你可以创建一个只有操作员和只有一个对象的刺。操作员可以通过二进制交叉和对象作为部分映射交叉来完成。一旦完成,您将按照它们在每个组中出现的顺序填充掩码。由于面膜是有效的,后代也是有效的。

唯一的问题是获得所有可能的安排,因为没有它,它将被限制在面具。他通过做一个由突变率决定的交换突变来解决这个问题。

  1. 随机选择一个项目。
  2. 如果该项目是一个操作员,然后 A. Swithc操作员到另一种 B.选择另一个。如果它的一个对象,然后确保符合要求,如果是的话,然后切换。