Kev*_*len 8 algorithm python-2.x roulette-wheel-selection fitness genetic-algorithm
我已经实现了一个简单的遗传算法来生成基于Aesop寓言的短篇小说.以下是我正在使用的参数:
突变:单字交换突变,测试率为0.01.
交叉:在给定点交换故事句子.率 - 0.7
选择:轮盘选择 - /sf/answers/372099731/
健身功能:3种不同功能.每个人的最高得分是1.0.所以最高健康分数是3.0.
人口规模:由于我使用的是86个Aesop寓言,我测试的人口规模是50.
初始人口:所有86个寓言句子都被洗牌,以便完全废话.我的目标是从这些结构丢失的寓言中产生一些有意义的东西(至少在一定程度上).
停止条件:3000代.结果如下:

但是,这仍然没有产生有利的结果.我期待着几代人的情节.为什么我的GA表现更差的结果呢?
更新:正如你们所有人所建议的那样,我将当前一代的10%的精英主义复制到了下一代.结果仍然保持不变:

可能我应该选择锦标赛.
上面所有的回复都很好,我会研究一下。我会添加我的想法。
突变
你的突变率看起来不错,尽管使用遗传算法突变率如果不正确可能会导致很多问题。我会确保您测试许多其他值以确定。
对于突变,我可能会使用两种类型的突变。一种是用字典中的其他单词替换单词,另一种是交换句子中的两个单词。这将鼓励整体人口多元化,并重新调整措辞。
交叉
我不知道你到底是如何实现这一点的,但单点交叉在这种情况下似乎并不那么有效。我会尝试实现一个 n 点交叉,这会更好地打乱你的句子。同样,我不确定它是如何实现的,但仅仅交换可能不是最好的解决方案。例如,如果一个单词位于第一个点,是否有任何方法可以将其移动到另一个位置,或者如果通过选择选择它,它将始终是第一个单词?
如果词序对于您选择的问题很重要,那么简单的交叉可能并不理想。
选择
同样,这看起来不错,但我会确保您测试其他选项。过去,我发现基于排名的轮盘选择要成功得多。
健康
这始终是任何遗传算法中要考虑的最重要的事情,并且考虑到问题的复杂性,我会加倍确保它有效。您是否测试过它是否可以解决“已知”问题?
人口规模
你的价值似乎很小,但我已经看到遗传算法在小群体中成功工作。不过,我会再次对更大的人群进行实验,看看你的结果是否更好。
到目前为止,最受欢迎的建议是实施精英主义,我肯定会推荐它。它不必太多,甚至只是每一代最好的一对染色体(尽管与其他所有事情一样,我会尝试不同的值)。
另一个有时有用的实现操作是剔除。破坏最弱的染色体的一部分,或与其他染色体(或两者)相似的染色体,并用新染色体替换它们。这应该有助于阻止您的人口变得“陈旧”,从您的图表来看,这种情况可能正在发生。突变对人口多样化的作用有限。