卡片遗传算法

时间:2015-12-16 10:48:55

标签: genetic-algorithm

我正在here进行练习(注意:不要上学!) 这是我第二次尝试GA,并遇到以下问题:

如何“复制”,如何组合我的后代。

我有一个随机生成的人口,其中我知道个人适合度(这是目标值的总和距离)。

但是,我不能随意地在2个“父母”之间切换卡片,因为可以使用哪些卡片(每张卡片只对群体中的每个元素使用一次)。

我希望得到你们的好评。如果需要,我可以提供其他信息。

2 个答案:

答案 0 :(得分:1)

问题是每张卡只能使用一次,你必须将它们分成两堆,所以让问题更容易一点,只需使用数字1-10。

例如,采取以下两种解决方案:

Parent 1:
1 2 5 7 8 - 3 4 6 9 10
Parent 2:
1 4 5 6 9 - 2 3 7 8 10

在这种情况下,我们无法将它们拆分并合并,您最终会得到重复的数字。那么我们如何从中创造健康的孩子呢?我通常看到的一种方法是将其中一种解决方案作为主要的解决方案。父节点。

例如父1,我们占用父母的一半:

Child 1:
1 * 5 * 8 - * 4 * 9 *
Child 2:
* 2 * 7 * - 3 * 6 * 10

接下来我们采用我们的第二个父母并用它来填补缺失的空白:

Parent 2:
1 4 5 6 9 - 2 3 7 8 10
Child 1:
1 * 5 * 8 - * 4 * 9 *
First we filter out the ones used in child 1:
6 - 2 3 7 10
Next we try to fill the blanks as good as possible:
1 5 6 8 * - 2 3 4 7 9
Now assign the leftovers (they jump side).
The resulting children will be:

Child 1:
1 5 6 8 10 - 2 3 4 7 9
Child 2:
1 2 4 5 7 - 3 6 8 9 10

这个想法存在一些问题,例如,孩子1中的10个已跳过侧面,并且父母双方都将它们放在第二堆中。这可以通过首先固定两个堆中相同的数字来抵消。

只要有创意,您就会找到最适合您情况的方法。

答案 1 :(得分:1)

你可以使用TSP(旅行商问题)中的一些交叉操作来避免后代染色体上的重复数字,正如@ roy-van-rijn所提到的那样。在TSP中,儿童染色体也不能复制城市。

一些经典的有序交叉算子:

为了让你的染色体在突变后保持有序,你也需要有序的变异算子: