Генетический алгоритм и тетрис

Im создает игрока Tetris с использованием генетических алгоритмов и сталкивается с некоторыми проблемами. Я прочитал много связанных работ, но они не дают мне достаточно подробностей о GA.

Проблема в том, что мой агент, похоже, очень быстро застревает... Я использую функцию оценки, занимаю 4 функции: высоту, закрытые отверстия, плоскость и количество очищенных строк. Я прочитал статью, которая использует ту же оценку и способна выполнять тысячи строк.

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

Подробности моего GA:

поколения: 600 Население: 100

гены: массив из 4 значений поплавка, от 0 до 1.

Равномерный кроссовер происходит с определенной вероятностью и свопит гены между двумя родителями с определенной вероятностью.

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

У меня элитный уровень 50%, и заметил, что некоторые хорошие агенты выбираются и рождаются худшими агентами, загрязняя население.

Выбор колесика рулетки...

Если кто-то может дать мне информацию о наилучшем способе кроссовера и мутации, я ценю!

Спасибо, и извините за длинный пост!

Ответ 1

Кажется, что есть какая-то разница в функциях оценки. Вы описываете четыре функции:

  • высота,
  • покрытые отверстия,
  • плоскость и
  • количество очищенных строк

Однако в документе, который вы ссылаетесь, описывается пять функций:

Функция, которую агент использует для определения полезности состояния плат, представляет собой взвешенную линейную сумму численных признаков, вычисленную из состояния. Активисты Colin Faheys использовали эти функции: высота свай, количество закрытых дыр и количество скважин (Fahey 2003). Добавленные нами функции состоят из числа строк, которые были сделаны только, а число, которое представляет , как "ухабистый" куча.

(акцент мой)

Итак, кажется, что вам не хватает функции "колодцев" в вашей оценочной функции и составе генов.

Ответ 2

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

Имитировать все возможные места размещения текущей пьесы, а затем "следующую часть" перед вычислением "полезности".

В целях производительности вы можете кэшировать места размещения "следующей части" для лучшей "утилиты", чтобы они не нуждались в повторном пересчете в качестве мест размещения "текущая часть".

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