首页 文章

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

提问于
浏览
0

我对GA很感兴趣,想要自己做 .
这是任务,我想实现:
我有一个"world" 16x16字段 . 我用随机基因创建了16个机器人 . 每个基因是一个阵列,其中4个数字来自1-19(16-19将转向机器人方向,1-15是机器人将沿指定方向前进的数量) . 在这个词中,我采取一个随机的位置,并尝试尽可能小的从领导机器人到目标的距离 .

我创造新一代的方式:
1)挑选8个距离最近的机器人并将它们放入下一代(没有交叉)
2)我在'1)'中挑选的8个最佳机器人进行交叉(所以我得到8个新机器人)
3)随机变换两个交叉机器人,最后将它们放入下一代 . 现在我在新一代有16个机器人 .

问题是:我只在所有尝试的1/100中得到距离== 0 . 但我经常得到距离1和2(我等到1000代然后我放弃,再试一次)是否有办法改善这一点?或者使用GA更好地做到这一点并不容易?

3 回答

  • 0

    有很多事情都出错了 .

    Some general comments

    • 遗传算法通常是算法的最后手段 . 您可以在Dijkstra(最适合您的用例),线性编程,特定约束满足技术等方面使用它们 . 据推测,你正在使用它们,因为你想探索这个区域 .

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

    Crossover vs. Mutation

    交叉用于交换已知有效的基因组的大部分 . 突变改进了基因组的片段 . 粗略地说,交叉可以帮助您将两个好的解决方案结合起来,希望能够快速引导您获得更好的解决方案,同时突变可以探索解决方案附近的空间 .

    交叉也可以破坏一个好的解决方案,将它分成两个独立的部分,或者组合两个产生非感性输出的部分 .

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

    Putting It Together

    我的建议是你 reduce the amount of crossover in your populations given time . 最初,交叉可能会帮助您获得快速进步 . 但是,随着时间的推移,特别是在模拟结束时,您将需要精细的细化 . 这种技术类似于simulated annealing .

  • 0

    是时候调试进化了!

    最终的解决方案(路径)是什么样的?我认为,他们只能去NSEW . 如果是这样,那么很容易陷入局部(一两个)解决方案 .

    此外,观察最佳解决方案如何随着时间的推移而发展将是有用的 . 这可以非常有见地(并且很有趣!)

    祝你好运调试!

  • 4

    我想根据我的GA经验添加一些东西 . 在我的学习期间,我发现使用“精英选择”来创建N 1代通常会在解决方案上形成一个平台:你确实会严格而且非常快地找到最佳解决方案,但你可以找到一个本地最小值并保持在那里(图中的橙色) .

    所以我做了什么:我添加了一个随机性的步骤(超过最佳元素的交叉和变异),其中显然解决方案更糟,但可以产生跳跃到一个新的最小值,可以是全局的(你的零,绿色跳跃)在图像中)

    你可以做什么?尝试使用7个最佳元素用于N 1代,而不是8个从N代选择一个随机元素(可能是最差的) .

    enter image description here

相关问题