提问者:小点点

遗传算法 - 新一代越来越差


我实现了一个简单的遗传算法,以伊索寓言为基础生成短篇小说。以下是我正在使用的参数:

突变:单字互换突变,检出率为0.01。

交叉:在给定点交换故事句子。率-0.7

选择:轮盘选择 - https://stackoverflow.com/a/5315710/536474

适应度功能:3种不同的功能。每种功能的最高分为1.0。所以总的最高适应度得分为3.0。

人口规模:由于我使用了 86 个伊索寓言,所以我用 50 个测试了人口规模。

初始人口:所有86个寓言句子顺序被打乱,以使完全无意义。我的目标是从这些结构化的失落的寓言中产生一些有意义的东西(至少在某种程度上)。

停止条件:3000代。结果如下:

然而,这仍然没有产生有利的结果。我期待着几代人的情节。知道为什么我的GA表现更差吗?

也许我应该使用锦标赛选择。


共3个答案

匿名用户

以上所有回答都很好,我会仔细研究。我会补充我的想法。

突变

你的突变率似乎很好,尽管使用遗传算法,如果突变率不正确,可能会导致很多问题。我会确保你测试了很多其他值来确定。

对于突变,我可能会用两种类型的突变。一种是用字典中的其他单词替换单词,另一种是在一个句子中交换两个单词。这将鼓励人口作为一个整体多样化,并洗牌。

交叉

我不知道你到底是如何实现的,但是单点交叉在这种情况下似乎不会那么有效。我会尝试实现n点交叉,这将更好地打乱你的句子。同样,我不确定它是如何实现的,但是仅仅交换可能不是最好的解决方案。例如,如果一个单词在第一个点,有没有办法让它移动到另一个位置,或者如果它被选择了,它总是第一个单词?

如果单词顺序对你选择的问题很重要,那么简单的交叉可能并不理想。

选择

同样,这看起来不错,但我会确保您测试其他选项。在过去,我发现基于排名的轮盘选择更成功。

健身

这始终是任何遗传算法中要考虑的最重要的事情,并且由于您遇到的问题的复杂性,我会加倍确保它有效。您是否测试过它适用于“已知”问题?

群体大小

你的价值似乎很小,但我已经看到遗传算法在小群体中成功地工作。尽管如此,我还是会对更大的人群进行实验,看看你的结果是否更好。

到目前为止,最受欢迎的建议是实施精英主义,我绝对推荐它。它不需要太多,即使只是每一代最好的一对染色体(尽管和其他一切一样,我会尝试不同的价值观)。

另一个有时有用的运算符是剔除。摧毁你最弱的染色体的一部分,或与其他染色体相似的一部分(或两者),并用新的染色体替换它们。这将有助于阻止您的人口“过时”,从您的图表来看,这可能正在发生。突变只会使种群多样化。

匿名用户

你可能会失去最好的组合,你应该保持每一代人最好的组合而不交叉(精英)。此外,你的功能似乎相当稳定,尝试其他类型的突变,这应该会有所改善。

匿名用户

放弃5%到10%的人口成为精英,这样你就不会失去你所拥有的最好的。

确保你的选拔过程设置得很好,如果糟糕的候选人经常通过,这会破坏你的发展。你也可能陷入局部最优状态,你可能需要在你的基因组中引入其他物质,否则你就走不了多远。

移动句子和单词可能不会让你走得很远,引入新的句子或单词可能会很有趣。

如果你认为故事是一个点x,y,你的评估函数是f(x,y),你试图找到f(x,y)的最大值,但你的突变和交叉仅限于x-