У NEAT AI нет стимула добывать еду

Я пытаюсь создать искусственный интеллект змеи, используя библиотеку NEAT в Python. Но по какой-то причине змея не хочет получать пищу. Я передал их в систему как данные, а также представил систему, в которой, если змея не получает еды, она теряет очко пригодности, но змея либо ничего не делает, либо продолжает быстро перемещаться влево и вправо, поэтому что он остается на том же месте и продолжает оставаться в живых.

Как мне заставить змею хотеть добыть еду? код движения змейки:

          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), но это все равно ничего не меняет.

ИЗМЕНИТЬ СНОВА: Я добавил больше змей, сначала я пошел на 20, мой ноутбук не справился с этим, но я все еще пробовал, и это не помогло, и теперь я на 5.

0 ответов

Другие вопросы по тегам