Selecting a surviving population in a "voter" Genetic Algorithm
我一直在研究一种遗传算法,其中有一个由具有颜色和偏好的个体组成的群体。偏好和颜色来自少数有限状态,可能大约 4 或 5。(例如:1|1、5|2、3|3 等)
每个人都为他们的偏好投下"一票",这有助于那些以该票为代表的人。
我目前的想法是循环遍历每个人,并根据投票数等计算他们应该生存的机会,然后掷骰子看看他们是否还活着。
我目前正在这样做,如果
有没有人知道我可以使用一种随机方法来确定一个人必须生存的机会?例如,对于
嗯,你可以根据传递每个返回的值来加权概率
成本函数的总体成员。
在我看来,这是最直接的方式,符合遗传
元启发式。
不过,更常见的是将当前人口划分为多个部分,基于
将它们传递给成本函数返回的值。
例如,
如果每一代由100个成员组成,那么前N(N只是一个用户定义的
参数,通常是总数的 5-10%)具有最低成本的成员
功能结果)原封不动地传给下一代(精英主义)。
也许这就是你所说的"生存"。如果是这样,那么,这些"幸存者"
通过根据成本函数对总体成员进行排名来确定
值并选择那些高于您定义的精英分数常数的成员。
下一代的其余部分(大多数)要么由
突变或交叉。
突变:
1 2 3 4 5 6 | # one member of the current population: [4, 5, 1, 7, 4, 2, 8, 9] # small random change in one member of prior generation, to create mutant that is # a member of the next generation [4, 9, 1, 7, 4, 2, 8, 9] |
交叉:
1 2 3 4 5 6 | # two of the 'top' members of the current generation [4, 5, 1, 7, 4, 2, 8, 9] [2, 3, 6, 9, 2, 1, 6, 4] # offpsring is a member of the next generation [4, 5, 1, 7, 2, 1, 6, 4] |
按原样将您的适应度(在您的情况下生存的可能性)分配给每个人,然后按适应度降序对它们进行排序,并使用二元锦标赛选择或类似的方法对您所选规模的另一个群体进行抽样。