我正在here进行练习(注意:不要上学!) 这是我第二次尝试GA,并遇到以下问题:
如何“复制”,如何组合我的后代。
我有一个随机生成的人口,其中我知道个人适合度(这是目标值的总和距离)。
但是,我不能随意地在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中,儿童染色体也不能复制城市。
一些经典的有序交叉算子:
为了让你的染色体在突变后保持有序,你也需要有序的变异算子: