NEAT AI 没有动力去获取食物

问题描述

我正在尝试使用 Python 中的 NEAT 库创建蛇形 AI。但出于某种原因,蛇不想得到食物。我已经将它作为数据传递给系统,并且我还引入了一个系统,如果蛇没有得到食物,它们就会失去一个健康点,但是蛇要么什么都不做,要么继续快速左右移动,所以它保持在同一个位置并继续保持活力。

如何让蛇想要得到食物?

蛇运动代码

for index,snake in enumerate(snakes):
    output = nets[index].activate(snake.getData())
    i = output.index(max(output))
    xChange = 0
    yChange = 0
    print(i,index)
    if i == 0:
        xChange = 10
    elif i == 1:
        xChange = -10
    elif i == 2:
        yChange = 10
    else:
        yChange = -10
    snake.definePosChange(xChange,yChange)
    snake.game()

为蛇添加适应度的代码

remainSnake = 0
for i,snake in enumerate(snakes):
    if snake.getAlive():
        remainSnake += 1
        genomes[i][1].fitness += snake.getReward()

为蛇获得“奖励”的函数

def getReward(self):
    if self.score <= 0:
        return -1
    return self.score * 100

获取蛇数据的函数

def getData(self):
    data = [self.x_position,self.y_position,self.food_x,self.food_y]
    return data

对于数据,我传递了它的 x 和 y 位置,以及食物在屏幕上的位置。

蛇选择远离食物,不知道为什么?

Snake

snake AI again

我已经过了 50 代了,但这条蛇仍然什么都不做,它几乎不走动,也从不去觅食。我尝试重新加载文件大约 10 次,但蛇只吃过一次食物,这是意外。

我根据蛇到食物的距离添加了奖励(然后除以 500),但这仍然没有任何改变。

我已经给了蛇它与食物的角度和距离,它仍然没有改变任何东西。蛇有时会走得更多一些,但出于某种原因,它们并没有瞄准食物。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)