Пытаюсь сделать симулятор эволюции. И это оказалось сложнее, чем я думал. Часть 1.

Я делаю проект под названием WorldES — это симулятор эволюции, где в мире живут агенты с генами, обучением и естественным отбором.

Изначально всё звучало довольно просто: «Ну, агенты двигаются, ищут еду, размножаются — что тут сложного?»
Оказалось — почти всё.

Первая проблема — баланс

Если дать агентам слишком много опыта — популяция вымирает за пару минут. Если чуть-чуть занизить параметры — всё вымирает ещё быстрее.

Найти баланс между:

  • скоростью обучения,
  • вознаграждение за действия,
  • воспроизводством,
  • ресурсами на карте

— это постоянная игра в микроскопические цифры. И любое изменение ломает систему.

Вторая проблема — поведение

Я не хотел делать «скриптовых агентов». Хотелось, чтобы поведение рождалось из генов.

Но тогда появляется хаос:

  • существа крутятся на месте,
  • бегут в стену,
  • игнорируют еду,
  • умирают толпой.

И ты сидишь и думаешь — это баг или «естественный отбор»?

Третья проблема — производительность

Когда организмов 2 — всё красиво. Когда их 500 — сервер начинает чувствовать жизнь.

Каждое существо:

  • двигается,
  • проверяет окружение,
  • взаимодействует с другими,
  • передаёт гены потомству.

И всё это должно работать онлайн.

Самое интересное

Иногда в симуляции появляются неожиданные паттерны. Например, выживает не самый быстрый, а тот, кто экономит свои ресурсы.
Сейчас работаю над добавлением животных, чтобы агенты получали больше возможности на поиск пропитания.
И в планах внедрить систему управления за агента, ты пишешь ему задачу, он в зависимости от настроения может начать её делать или нет.

Зачем я вообще это делаю?

Мне интересно, можно ли сделать систему, где:

  • нет заранее прописанных победителей,
  • нет сценария,

Без «уровней». Без «сюжета». Просто среда и законы. Что-то типо своего рогалика, только в большом масштабе.

Буду рад если вы тоже примите участие в эксперименте! Создадите своего агента и поможете получать как можно больше данных для обучения и развитие проекта.

Во второй части, буду писать ответы на вопросы в расширенном варианте (если они будут), и более подробно описывать функционал.

2
2 комментария