如何设计一个衡量饮食重要性的健身功能?

人工智能 进化算法 整洁的 适应功能 健身设计
2021-11-11 17:09:09

概括:

我正在教机器人在运动场上挑选食物。有些食物有毒,有些食物很好。

食物详情:

  • 有毒食物减分,好食物加分。
  • 食物点因其大小而异。
  • 有毒食物与好食物的比例约为 9:1,因此更多的机会以负数告终。
  • 食物加班点数增长。
  • 食物在某些预定大小变得有毒后变质。

健身功能:

我使用的适应度函数只是在迭代结束时计算点数。机器人可能会选择吃掉它或跳过它。

问题:

我遇到的问题是,在第一代中,大多数机器人吃了很多坏东西,而好奇的东西最终变成了负数。所以,大部分成功的都是那些懒惰、不吃东西或不去吃东西的人,而且大多数时候,最适合前几代人的结果是 0 分和 0 吃任何种类的食物食物。

经过长时间的训练,他们最终只是等待食物而不是多次进食。通常,当他们等待时,食物变质了,他们最终会去吃另一种食物。这样,在迭代结束时,我就有了一些赢家,但他们远未达到他们本来可以达到的潜力。

问题:

我不知何故需要权衡吃食物的重要性。我希望他们最终学会吃饭。

所以我想到了这个:

brain.score += foodValue * numTimesTheyAteSoFar

但这使分数过高,现在食品质量没有得到尊重,他们只是吞食略高于 0 的任何东西。

1个回答

一个人类的类比可以帮助你(差异)。

用初始值初始化所有代理X; 我们称之为energyUnits我稍后会更多地谈论这个。

现在,每当代理吃到好吃的食物时,添加一些价值作为激励energyUnits您需要添加一个函数,该函数将不断递减代理的值energyUnits,因为人类会随着时间的推移降低能量(卡路里)。我们将调用这个函数normalDegrade这是解决您的问题的核心部分。

现在,对于坏的(或有毒的)食物,你可以更有创意。每当代理吃有毒食物时,您都可以简单地减去给定值。或者您可以normalDegrade使用非常高的向下坡度来扩展您的功能。在这种情况下,代理的能量单位(值)会下降得非常快。这将迫使特工寻找好的食物来生存。

由于食物与有毒的比例是 9:1,所以需要初始化X( energyUnits) 很高。您需要进行一些反复试验才能在这里找到适合您的产品。

此外,我假设只要值为X是零或某个负值(取决于)。这很重要,因为它确保算法不会浪费时间处理不良代理。

正因为如此,人口灭绝的另一个问题出现了。为此,您需要不断生成任何遗传算法都可以使用的新代理。拥有更好父母的新人口将保持人口健康和高效。

一个好的适应度函数是解决这类问题的核心,有时很难找到。您可能需要使用不同的值进行一些试验和错误来寻找合适的值。