我对GA很感兴趣,想要自己做
这是我想要实现的任务:
我有一个“世界”16x16领域。我用随机基因创建了16个机器人。每个基因是一个阵列,其中4个数字来自1-19(16-19将转向机器人方向,1-15是机器人将沿指定方向前进的数量)。在这个词中,我采取一个随机的位置,并尝试尽可能小的从领导机器人到目标的距离。
我创造新一代的方式:
挑选8个距离最近的机器人并将它们放入下一代(没有交叉)
为我在'1)中挑选的8个最佳机器人进行交叉(所以我得到8个新机器人)
问题是:我只在所有尝试的1/100中得到距离== 0。但我经常得到距离1和2(我等到1000代然后我放弃,再试一次) 有没有办法改善这个?或者GA不可能做得更好吗?
答案 0 :(得分:4)
有很多事情都出错了。
一些一般性意见
遗传算法通常是算法的最后手段。您可以在Dijkstra(最适合您的用例),线性编程,特定约束满足技术等方面使用它们。据推测,您正在使用它们,因为您想要探索这个区域。
使用遗传算法的人很少期望他们达到解决方案的全局最优。 "良好的"当地的最佳通常是你能做的最好的。 GA将很容易找到这些,但是会很难"归零"在一个解决方案。 (加州大学伯克利分校的计算机科学家Papadimitriou已经表明,进化实际上并没有最大化适应性,而是基因的混合性。)
Crossover vs. Mutation
Crossover用于交换已知有效的基因组的大部分。突变改进了基因组的片段。粗略地说,交叉可以帮助您将两个好的解决方案结合起来,希望能够快速引导您获得更好的解决方案,同时突变可以探索解决方案附近的空间。
交叉也可以通过将它分成两个独立的部分或组合两个产生非感性输出的部分来破坏一个好的解决方案。
在许多情况下,突变足以探索整个空间,尽管是缓慢的。在您的空间中就是这种情况,因为得分会随着距离目标的距离而单调减少。在更复杂的空间中,交叉可以帮助您跳过局部最小值之间的障碍。
将它放在一起
我的建议是,在给定时间内减少人群中的交叉量。最初,交叉可能会帮助您获得快速进步。但是,随着时间的推移,特别是在模拟结束时,您将需要精细细化。这种技术类似于simulated annealing。
答案 1 :(得分:0)
调试进化的时间!
最终解决方案(路径)是什么样的?我认为,他们只能去NSEW。如果是这样,那么它很容易陷入局部(一两个)解决方案。
此外,观察最佳解决方案如何随着时间的推移而发展将是有用的。这可以非常有见地(并且很有趣!)
祝你好运调试!
答案 2 :(得分:0)