Я пытаюсь создать змеиный ИИ с помощью библиотеки 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
Выбор входных данных для змеиного ИИ ⇐ Python
Программы на Python
1763685481
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()
Подробнее здесь: [url]https://stackoverflow.com/questions/61297284/deciding-on-inputs-for-snake-ai[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия