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

时间:2018-03-02 22:36:27

标签: algorithm artificial-intelligence genetic-algorithm

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

我创造新一代的方式:

  1. 挑选8个距离最近的机器人并将它们放入下一代(没有交叉)

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

  3. 随机变换2个交叉机器人,最后将它们放入下一代。现在我在新一代中有16个机器人。
  4. 问题是:我只在所有尝试的1/100中得到距离== 0。但我经常得到距离1和2(我等到1000代然后我放弃,再试一次) 有没有办法改善这个?或者GA不可能做得更好吗?

3 个答案:

答案 0 :(得分:4)

有很多事情都出错了。

一些一般性意见

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

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

  3. Crossover vs. Mutation

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

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

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

    将它放在一起

    我的建议是,在给定时间内减少人群中的交叉量。最初,交叉可能会帮助您获得快速进步。但是,随着时间的推移,特别是在模拟结束时,您将需要精细细化。这种技术类似于simulated annealing

答案 1 :(得分:0)

调试进化的时间!

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

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

祝你好运调试!

答案 2 :(得分:0)

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

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

你能做什么?尝试使用7个最佳元素进行N + 1代,而不是从8代中挑选一个随机元素(可能是最差的)。

enter image description here