【问题标题】:Can a genetic algorithm strategy (chromosome) use memory?遗传算法策略(染色体)可以使用内存吗?
【发布时间】:2023-04-03 05:52:01
【问题描述】:

我一直想实现一种遗传算法,为跳伞机器人问题制定策略。

基本上,两个机器人降落在一个无限的一维世界的随机位置,该世界被划分为离散的正方形。每个机器人在降落的地方留下一个降落伞。

我们的目标是编写一个算法,如果两个机器人都遵循它保证让它们相遇。

可能的行动。 向左移动,向右移动,等待转弯。 可能的状态:站在降落伞上,而不是站在降落伞上。

根据我对染色体编码策略的理解,我可以做这样的事情。

0 move left
1 move right 
3 wait

对于各州来说,第一个索引是没有降落伞,第二个索引是有降落伞,所以

03 - move left if you are not on a parachute and wait if you are.

该问题的实际解决方案涉及以下策略:向左移动并循环等待,除非您看到降落伞,然后停止等待(赶上另一个机器人)这样的策略如何编码为染色体?谢谢。

【问题讨论】:

  • 问题在于,一种足以表达解决方案的强大语言将难以在遗传算法中使用。这显然不是一个可以用遗传算法解决的难题。实际的解决方案应该类似于target=1;repeat{move to target; target=-2*target}(其中move to x 表示向左或向右定位x 相对于起点)。如果机器人发现另一个机器人的降落伞,它应该停止的附加规则。如果机器人从距离 d 开始,机器人将在 O(d) 时间内找到彼此。
  • 我不同意遗传算法无法解决它!仅当您错误地构图时。

标签: algorithm genetic-algorithm evolutionary-algorithm


【解决方案1】:

如果您想使用遗传算法来解决问题,我相信您最好的办法是使用 2 位整数列表作为染色体。 每个数字代表一个州采取的行动。所以如果我们说:

0 表示向左移动

1 表示向右移动

3 表示等待

那么 01 表示

if(state == noParachute){
    moveLeft();
}else{
    moveright();
}

您可以让染色体的长度随着时间的推移而增加,以获得更复杂的解决方案。

另一种方法是使用神经网络并使用 NEAT 对其进行训练。

【讨论】:

  • 没错。这里的关键是基因的含义非常灵活。您建议的 NEAT 方法基于这种灵活性。在 NEAT 中,染色体将对人工神经网络的结构进行编码,该网络将在给定一些输入的情况下确定一个动作。
猜你喜欢
  • 2017-10-30
  • 2018-07-24
  • 1970-01-01
  • 1970-01-01
  • 2018-12-10
  • 2017-04-18
  • 2012-05-15
  • 1970-01-01
  • 2017-10-14
相关资源
最近更新 更多