СПРОСИ ПРОФИ
👍
0
👎 01

Neat интегрировать в мой код

Добрый вечер) кто может объяснить как neat интегрировать в мой код? Там совсем простой на pygame типа гугл динозаврика. Решил на его примере немного врубиться в эту тему
Гугл динозаврик на pygame, задача ии тут либо прыгнуть в зависимости от расстояния до кактуса, его ширины и скорости игры.

программисты IT     #1   18 июн 2025 20:54   Увидели: 101 клиент, 1 специалист   Ответить
👍
0
👎 0

чатжыпити отвечает так:

Привет! Отличная идея — использовать NEAT (NeuroEvolution of Augmenting Topologies) для обучения ИИ управлять персонажем в игре типа Google Dinosaur на Pygame. Я помогу тебе с интеграцией NEAT в простой проект. Ниже краткий план и пример интеграции:
🔧 Что тебе нужно:

Установить библиотеку neat-python

pip install neat-python

Настроить конфигурационный файл config-feedforward.txt (подробнее ниже).

Обернуть игровую логику в функцию, чтобы можно было передавать геномы и сети из NEAT.

🧠 Пример структуры кода

Допустим, у тебя есть такой код динозавра:

class Dino:
def init(self):
self.y = 300
self.vel_y = 0
self.is_jumping = False
self.gravity = 1

def update(self):
if self.is_jumping:
self.y += self.vel_y
self.vel_y += self.gravity
if self.y >= 300:
self.y = 300
self.is_jumping = False

def jump(self):
if not self.is_jumping:
self.is_jumping = True
self.vel_y = -15

🧩 Интеграция NEAT
1. Подготовка функции для обучения:

import neat
import pygame
import os
import random

def eval_genomes(genomes, config):
obstacles = [Cactus()] # твой класс кактуса
dinos = []
nets = []
ge = []

for genome_id, genome in genomes:
genome.fitness = 0
net = neat.nn.FeedForwardNetwork.create(genome, config)
dino = Dino()
nets.append(net)
dinos.append(dino)
ge.append(genome)

run = True
while run and len(dinos) > 0:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
pygame.quit()
return

# Здесь будет логика передвижения кактуса и столкновений

for i, dino in enumerate(dinos):
# Получаем расстояние до следующего кактуса
cactus = get_next_cactus(obstacles) # реализуй сам
distance = cactus.x — dino.x
speed = game_speed # текущая скорость игры
width = cactus.width

# Нормализация, чтобы было удобнее обучать
inputs = (distance / 600, width / 100, speed / 20)
output = nets[i].activate(inputs)

if output[0] > 0.5:
dino.jump()

dino.update()
# Обновляй фитнес
ge[i].fitness += 0.1

2. Конфигурационный файл NEAT (config-feedforward.txt)

Создай файл config-feedforward.txt в том же каталоге:

[NEAT]
fitness_criterion = max
fitness_threshold = 500
pop_size = 50
reset_on_extinction = False

[DefaultGenome]
num_inputs = 3
num_outputs = 1
num_hidden = 0
activation_default = relu
aggregation_default = sum
bias_init_mean = 0.0
bias_init_stdev = 1.0

[DefaultSpeciesSet]
compatibility_threshold = 3.0

[DefaultStagnation]
species_fitness_func = max
max_stagnation = 15
species_elitism = 2

[DefaultReproduction]
elitism = 2
survival_threshold = 0.2

3. Запуск NEAT

def run_neat():
config_path = «config-feedforward.txt»
config = neat.Config(
neat.DefaultGenome,
neat.DefaultReproduction,
neat.DefaultSpeciesSet,
neat.DefaultStagnation,
config_path
)

p = neat.Population(config)
p.add_reporter(neat.StdOutReporter(True))
stats = neat.StatisticsReporter()
p.add_reporter(stats)

winner = p.run(eval_genomes, 50)

✅ Что дальше

Включи обработку столкновений, чтобы удалять динозавров при ошибке и завершать геном.

Можно визуализировать лучший результат.

Настрой нормализацию входных данных.

Если хочешь, я могу помочь адаптировать конкретный твой код — просто пришли его.

Хочешь, я сгенерирую шаблон проекта (структуру файлов и базовый Pygame + NEAT код)?

Задайте свой вопрос программистам –
профессионалам

Сейчас онлайн 75 программистов
Получите ответ профи быстро и бесплатно
ASK.PROFI.RU © 2020-2025