我正在尝试使用 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 位置,以及食物在屏幕上的位置。
蛇选择远离食物,不知道为什么?
我已经活了 50 代,但这条蛇仍然什么都不做,它几乎不会四处走动,也不会去觅食。我尝试重新加载文件大约 10 次,而蛇只吃过一次食物,这是偶然的。
我已经根据蛇与食物的距离(然后除以 500)添加了奖励,但这仍然没有改变任何东西。
我给了蛇它与食物的角度,它的距离,它仍然没有改变任何东西。蛇有时会四处走动,但出于某种原因,它们并没有瞄准食物。