Иллюстрация: Smithsonian Magazine

Пользователь GitHub под ником victorqriberio показал свою версию классической аркады Space Invaders. Его вариант называется InvaderZ. В нем всё так же нужно отстреливать появляющихся вверху экрана пришельцев, но каждая волна «вторженцев» уникальна. Victorqriberio использовал генетический алгоритм, который изменяет форму каждого нового пришельца.

Генетический алгоритм — это алгоритм поиска, работающий как естественный отбор в природе. Алгоритм пользуется тремя основными функциями: отбор, скрещивание и формирование новых поколений. Применять генетический алгоритм можно не только и не столько на играх, но и для задач на графы и компоновки, при составлении расписаний, и т.д. Для генетического алгоритма нужно определить параметр успешности «особи». Если в живой природе это выживаемость и продолжение рода, то в случае с генетическими алгоритмами в программировании это может быть эффективность решения задачи.

Самое первое поколение врагов в InvaderZ генерируется случайно. Все пришельцы умещаются в квадрат, который делится на четыре сектора. У отдельно взятого пришельца есть показатель выживаемости — насколько далеко он продвинулся по экрану, пока его не уничтожили (если уничтожили вовсе). Свои «гены» следующим поколениям передают пришельцы с лучшим показателем выживаемости. После того как первая волна прошла, алгоритм генерирует новую волну шестью способами:

  • Первый квадрат по горизонтали от одного «родителя», второй квадрат по горизонтали от второго «родителя»
  • Первый квадрат по горизонтали от первого «родителя», второй квадрат по горизонтали от первого «родителя»
  • Первый квадрат по вертикали от одного «родителя», второй квадрат по вертикали от второго «родителя»
  • Первый квадрат по вертикали от первого «родителя», второй квадрат по вертикали от первого «родителя»
  • Четные гены от первого родителя», нечетные — от второго
  • Нечетные гены от первого родителя», четные — от второго


Иллюстрация: Github

Заложен 10% шанс случайных изменений. При этом форма пришельца влияет на то, как он двигается по экрану. После семи волн отбор запускается по новой, а среди семи прошедших поколений сохраняются только лучшие пришельцы.

Игра сохраняет простоту управления Space Invaders: две кнопки движения и одна стрельбы. Игра запускается в браузере или на телефоне.

Еще одним примером использования генетического алгоритма в играх стала Evolution, созданная Keiwan. В этой игре нужно создавать существо из точек — суставов, соединенных костями. Кости соединяются между собой мышцами, которые приводят всю конструкцию в движение. Игрок может создавать любое существо на свой вкус с рядом ограничений: мышца соединяет только две кости, а две кости можно соединить только одной мышцей. Мышца в Evolution действует как биологический аналог: она ??может как сокращаться, так и расширяться. При этом мышца прикладывает силы к костям в соответствующих точках соединения, что позволяет существу двигаться.

Игрок создает свое существо, а после дает ему задание — прыгать, бегать, перепрыгивать препятствия или взбираться на гору. Затем существо обучается пользоваться созданной пользователем конструкцией. Keiwan пояснил, что не стал встраивать в игру эволюцию самого существа, потому что это потребовало бы переписать большой кусок кода.


Поиграть в Evolution также можно в браузере, но для сохранения существ вам понадобится скачать и установить игру.

Пользователь Хабра JediPhilosopher нашел генетическому алгоритму еще одно применение. С помощью такого алгоритма он научил нейросеть строить круговые туристические маршруты по Санкт-Петербургу (в теории можно применить к любому городу). Он отобрал достопримечательности, присвоил им индекс интересности и задал такие параметры:

  • Не слишком короткий и не слишком длинный маршрут.
  • Максимальная суммарная интересность объектов.
  • Маршрут без пересечений.
  • Маршрут должен стремиться к форме круга.

В итоге JediPhilosopher научил алгоритм строить круговые, насыщенные достопримечательностями, маршруты по центру Петербурга.

Комментарии (1)


  1. xa6p
    20.11.2019 17:14
    -1

    ссылку поправте