【问题标题】:What are some ways to crossover in a Genetic Algorithm?遗传算法中有哪些交叉方法?
【发布时间】:2021-02-07 15:12:37
【问题描述】:

下面是一个非常小的例子:

假设我的人口规模为 4。现在,假设我根据他们的适应度对它们进行排序,然后我决定删除最后 2 个(所以现在我的人口规模为 2)。现在我需要回到原来的大小,但首先我必须创建后代。

假设我有这个:(不是用任何特定语言编写的)

population = [[2.2],[49.7],[34.1],[25.39]] //original population, I would run this under a fitness function
sortedPopulation = [[49.7],[25.39],[2.2],[34.1]] //sorted population based upon their fitness
best = [[49.7],[25.39]] //updated population with the last 2 elements being dropped (because they are the 2 worst)

此时,我正试图弄清楚如何交叉并创造后代。在后代之后,我将产生更多的双打以恢复到原来的种群规模(我已经知道该怎么做)。有哪些穿越的方法?交叉的结果实际上会是什么样子?

我还想确保有一种方法适用于总体元素中的任何 # 个元素。 例如,如果每个元素都是 2 双,那么我将如何从这样的东西中创建后代:

best = [[3.3,92.56],[10.5,15.01]]

【问题讨论】:

    标签: algorithm genetic-algorithm population crossover


    【解决方案1】:

    如果您使用整数,最好将它们作为二进制使用...然后您可以例如将最后 2 位交换为交叉,交换每一个第二位等...甚至更好地作为格雷码 (@ 987654321@) 否则你可能会卡在 Hamming 的障碍上 (https://en.wikipedia.org/wiki/Hamming_distance)

    希望对你有帮助^^ 帕特里克

    【讨论】:

    • 抱歉,我实际上正在使用双打,但我向 Int's 提出了我的问题。我现在修复了它,我看到大多数 GA 示例都使用位,但我没有看到很多使用双打的示例,这就是我要问的部分原因。
    • 那为什么不把两个数字都表示为二进制呢?
    • 我正在尝试创建一个处理数学的 GA。例如:计算函数的最大值/最小值。
    • @GregMowers 考虑使用一组 X 值计算函数的最小值/最大值。给定父母 X1 和 X2,可能的交叉函数是在 X1 和 X2 之间随机选择任何值。只要有两个个体具有良好的适应度并跨越正确的 X,这将像二分搜索一样工作。为了使交叉更加稳健,您可以扩大后代的范围。例如,如果 X2-X1=D,那么您可以在 X1-D 和 X2+D 之间选择一个值。这样,如果父母在附近,但没有跨过正确的 X,后代仍然可以向它移动。
    • 那么我更新后的人口会是什么样子?会是 [[parent1],[parent2],[offspring]] 吗?我对交叉结果的实际外观感到困惑。
    猜你喜欢
    • 2014-08-12
    • 1970-01-01
    • 2016-08-31
    • 2015-07-03
    • 2016-09-16
    • 1970-01-01
    • 2011-10-11
    • 2015-07-15
    相关资源
    最近更新 更多