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

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

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

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

детали моего GA:

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

гены: массив из 4 значений float, между 0 и 1.

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

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

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

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

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

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

2 ответов


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

  1. высота
  2. покрыты отверстиями,
  3. плоскостности и
  4. количество очищенных строк

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

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

(курсив мой)

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


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

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

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

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