Выбор входных данных для змеиного ИИPython

Программы на Python
Ответить
Anonymous
 Выбор входных данных для змеиного ИИ

Сообщение Anonymous »

Я пытаюсь создать змеиный ИИ с помощью библиотеки Python-NEAT. Проблема, с которой я столкнулся, связана с входными данными для нейронной сети. Прямо сейчас я просто вычисляю расстояние до всех стен (сверху, справа, слева, снизу) и расстояние до еды и передаю это в нейронную сеть. с другой стороны, во многих видеороликах на YouTube и в других темах на разных платформах люди говорят о том, чтобы проверить, чисто ли побережье слева, справа и спереди, и где находится еда. Мой вопрос в том, как мне это получить. Использую ли я opencv для захвата изображений или в pygame есть другой способ?

Вот мой объект-змея

class Snake:
def __init__(self):
self.snake_block = 10
self.x = int(round(random.randrange(0, height - self.snake_block) / 10.0) * 10.0)
self.y = int(round(random.randrange(0, height - self.snake_block) / 10.0) * 10.0)
self.dx = 0
self.dy = 0
self.snake_head = []
self.snake_full = []
self.snake_length = 1
self.dtw = 0
self.dbw = 0
self.dlw = 0
self.drw = 0
self.brain = SnakeAI()
self.direction = 4
self.dfx = 0
self.dfy = 0
self.step_allowed = 100
self.decesion = []

def draw(self):
for x in self.snake_full:
pygame.draw.rect(screen, red, (x[0], x[1], self.snake_block, self.snake_block))

def move(self):
if self.direction is 0:
self.dy = -self.snake_block
self.dx = 0
if self.direction is 1:
self.dy = self.snake_block
self.dx = 0
if self.direction is 2:
self.dy = 0
self.dx = -self.snake_block
if self.direction is 3:
self.dy = 0
self.dx = self.snake_block
self.step_allowed -= 1
self.x += self.dx
self.y += self.dy
self.snake_head = []
self.snake_head.append(self.x)
self.snake_head.append(self.y)
self.snake_full.append(self.snake_head)
if len(self.snake_full) > self.snake_length:
del self.snake_full[0]
self.draw()

def grow(self):
self.snake_length += 1

def senses(self, fx, fy):
self.dtw = self.y - 0
self.dbw = self.y - height
self.dlw = self.x - 0
self.drw = self.x - width
self.dfx = self.x - fx
self.dfy = self.y - fy


вот как я передаю это в нейронную сеть

snake.senses(food.x, food.y)
output = nets[snakes.index(snake)].activate((height, abs(snake.dbw), width, abs(snake.drw),
abs(snake.dfx), abs(snake.dfy)))
output = int(np.argmax(output))
snake.direction = output
snake.move()


Подробнее здесь: https://stackoverflow.com/questions/612 ... r-snake-ai
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»