algorithm - 有没有办法改进我的遗传算法?

标签 algorithm artificial-intelligence genetic-algorithm

我对 GA 很感兴趣,想做我自己的。
这是任务,我要实现:
我有一个“世界”16x16 的领域。我用随机基因创建了 16 个机器人。每个基因都是一个数组,其中包含 1-19 中的 4 个数字(16-19 将转向机器人方向,1-15 是机器人将沿指定方向移动的场数)。在这个词中,我采取了一个随机位置,并试图使领导者机器人到目标的距离尽可能小。

我创造新一代的方式:

  1. 选择距离最短的 8 个机器人并将它们放入下一代(不交叉)

  2. 对我在“1)”中挑选的 8 个最佳机器人进行交叉(所以我得到了 8 个新机器人)

  3. 随机变异 2 个交叉机器人,并最终将它们放入下一代。现在我有 16 个新一代机器人。

问题是:我只有 1/100 次尝试得到距离 == 0。但是我经常得到距离 1 和 2(我等到第 1000 代然后我放弃,再试一次) 有没有办法改善这一点?还是不能用 GA 做得更好?

最佳答案

有很多地方出了问题。

一些一般性评论

  1. 遗传算法通常是算法学家的最后一门类(class)。当 Dijkstra(最适合您的用例)、线性规划、特定约束满足技术等都失败时,您可以使用它们。据推测,您正在使用它们是因为您想探索这个区域。

  2. 使用遗传算法的人很少期望他们实现解决方案的全局最优。 “好”的局部最优通常是你能做的最好的。 GA 会很容易地找到这些,但很难“确定”解决方案。 (加州大学伯克利分校的计算机科学家 Papadimitriou 已经表明,进化实际上并没有最大化适应性,而是基因的混合性。)

交叉与突变

交叉用于交换已知有效的基因组的大部分。突变改进了基因组的片段。粗略地说,交叉可以帮助你结合两个好的解决方案,希望这会迅速引导你找到一个更好的解决方案,而突变则探索解决方案附近的空间。

Crossover 也可以破坏一个好的解决方案,因为它会将一个好的解决方案分成两个单独没有意义的部分,或者将两个产生无意义输出的部分组合起来。

在许多情况下,变异足以探索整个空间,尽管速度很慢。在您的空间中就是这种情况,因为分数会随着与目标的距离而单调下降。在更复杂的空间中,交叉可以帮助您跳过局部最小值之间的障碍。

放在一起

我的建议是您在给定时间内减少种群中的交叉数量。最初,交叉可能会帮助你在进步中获得一些快速的收获。但是,随着时间的推移,尤其是在模拟接近尾声时,您会需要精细的改进。此技术类似于 simulated annealing .

关于algorithm - 有没有办法改进我的遗传算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49078442/

相关文章:

javascript - 如何在 JavaScript 中获取字符串与给定替换的所有组合?

algorithm - 如何教电脑做推论

machine-learning - 检测表单中相关字段的学习方法(图像格式)

java - 顺序交叉 (OX) - 遗传算法

python - 如何在不使用梯度、不使用约束和范围的情况下最小化 Python 中的函数?

python - 如何更改字符串中的字母,知道它在 Python 中的位置?

c++ - 在棋盘游戏中检查大量复选框的最佳方法

algorithm - 具有高效查找缺失的一组键的数据结构

python-3.x - 如何在列表中找到所有不相等的 bool 元素的条纹?

python - 遗传算法-Python中的有序交叉