Пытаюсь сделать симулятор эволюции. И это оказалось сложнее, чем я думал. Часть 1.
Я делаю проект под названием WorldES — это симулятор эволюции, где в мире живут агенты с генами, обучением и естественным отбором.
Изначально всё звучало довольно просто: «Ну, агенты двигаются, ищут еду, размножаются — что тут сложного?»
Оказалось — почти всё.
Первая проблема — баланс
Если дать агентам слишком много опыта — популяция вымирает за пару минут. Если чуть-чуть занизить параметры — всё вымирает ещё быстрее.
Найти баланс между:
- скоростью обучения,
- вознаграждение за действия,
- воспроизводством,
- ресурсами на карте
— это постоянная игра в микроскопические цифры. И любое изменение ломает систему.
Вторая проблема — поведение
Я не хотел делать «скриптовых агентов». Хотелось, чтобы поведение рождалось из генов.
Но тогда появляется хаос:
- существа крутятся на месте,
- бегут в стену,
- игнорируют еду,
- умирают толпой.
И ты сидишь и думаешь — это баг или «естественный отбор»?
Третья проблема — производительность
Когда организмов 2 — всё красиво. Когда их 500 — сервер начинает чувствовать жизнь.
Каждое существо:
- двигается,
- проверяет окружение,
- взаимодействует с другими,
- передаёт гены потомству.
И всё это должно работать онлайн.
Самое интересное
Иногда в симуляции появляются неожиданные паттерны. Например, выживает не самый быстрый, а тот, кто экономит свои ресурсы.
Сейчас работаю над добавлением животных, чтобы агенты получали больше возможности на поиск пропитания.
И в планах внедрить систему управления за агента, ты пишешь ему задачу, он в зависимости от настроения может начать её делать или нет.
Зачем я вообще это делаю?
Мне интересно, можно ли сделать систему, где:
- нет заранее прописанных победителей,
- нет сценария,
Без «уровней». Без «сюжета». Просто среда и законы. Что-то типо своего рогалика, только в большом масштабе.
Буду рад если вы тоже примите участие в эксперименте! Создадите своего агента и поможете получать как можно больше данных для обучения и развитие проекта.
Во второй части, буду писать ответы на вопросы в расширенном варианте (если они будут), и более подробно описывать функционал.