我一直在研究一种遗传算法,其中有一个由具有颜色和偏好的个体组成的群体。偏好和颜色来自少量的有限状态,可能在4或5左右。(例如: 1|1,5|2,3|3等)
每个人都为自己的喜好投了一张“票”,这有助于这些人将这张票作为他们的颜色。
我现在的想法是循环每个人,根据票数等计算他们应该存活的机会,然后掷骰子看看他们是否还活着。
我目前正在这样做,如果v[x]代表颜色x的投票百分比,则具有颜色c的单个k有v[c]存活的机会。然而,这意味着如果所有5种类型的(a|a)个体的数量相等,其中4/5会死亡,这是不好的。
有没有人知道一种随机性的方法,我可以用它来确定一个人生存的机会?例如,对于v为c投票的算法,具有颜色c的v个体存活(在统计平均值上)。
发布于 2011-02-01 02:57:19
将你的适合度(在你的情况下,生存的可能性)按原样分配给每个人,然后按降适合度对它们进行排序,并使用二元锦标赛选择或类似的方法来采样另一个你选择的大小的群体。
发布于 2011-02-01 03:13:57
那么,您可以根据将人口中的每个成员传递给成本函数所返回的值来加权概率。
在我看来,这似乎是最直接的方法,与遗传元启发式一致。
不过,更常见的方法是根据将当前人口传递给成本函数所返回的值,将当前人口划分为多个部分。
例如,如果每一代由100个成员组成,那么前N个(N只是一个用户定义的参数,通常约占总数的5%-10%)成员(具有最低成本函数结果)将按其精英主义(精英主义)传递给下一代。也许这就是你所说的“生存”。如果是,那么再一次,这些“幸存者”是通过根据成本函数值对群体成员进行排名,并选择高于您定义的精英主义分数常数的成员来确定的。下一代的其余部分(大多数)是通过变异或交叉产生的。
突变
# 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]交叉
# 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]https://stackoverflow.com/questions/4854621
复制相似问题