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

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

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

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

Детали моей ГА:

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

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

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

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

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

Выбор - это рулетка...

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

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


person Fernando    schedule 13.10.2011    source источник
comment
вопросы: 1) как вы сопоставляете гены с поведением? и 2) сколько отдельных тестовых прогонов в вашем наборе тестов?   -  person RBarryYoung    schedule 14.10.2011
comment
Привет, спасибо за комментарий. Каждый ген — это число от 0,0 до 1,0, представляющее вес какой-то конкретной функции, например, количество отверстий в доске. Теперь я переключился на стабильный GA, и он работает лучше, по крайней мере, быстрее. Я не делаю прогоны, пока не наберется хотя бы 2000 строк... я думаю, что проблема в мутации/кроссовере...   -  person Fernando    schedule 14.10.2011
comment
Хм, до сих пор не понял. Можешь поделиться ссылкой на эту бумагу?   -  person RBarryYoung    schedule 14.10.2011
comment
В том-то и проблема, что в этих документах не содержится подробностей о функциях ГА, но они использовали только 4 гена и устойчивое состояние ГА. Но вот один google.com.br/   -  person Fernando    schedule 14.10.2011
comment
Да я вижу. Но у вас нет фактора неровности, как в газете.   -  person RBarryYoung    schedule 14.10.2011
comment
Да, я называю это плоскостностью ... я думаю, что должен реализовать двоичную хромосому из 1 и 0 и перевести это в реальное число, похоже, они это сделали.   -  person Fernando    schedule 14.10.2011


Ответы (2)


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

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

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

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

(выделено мной)

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

person RBarryYoung    schedule 14.10.2011
comment
Эти 4 кажутся наиболее важными, на самом деле у меня есть несколько других, в том числе те, что указаны в статье. Я запутался в том, как сделать непрерывный GA, вот и вся проблема ... у вас есть предложения по этому поводу? Теперь я использую 4 функции и 4 значения с плавающей запятой для каждой функции, поэтому моя хромосома представляет собой массив [16] с плавающей запятой... никаких улучшений еще не сделано! Мой процессор горит. - person Fernando; 14.10.2011
comment
Отслеживание колодцев важно, потому что только I может заполнить один, не делая закрытого отверстия (от которого трудно избавиться). Попробуйте со всеми пятью функциями и генами и посмотрите, не решит ли это вашу проблему. - person RBarryYoung; 14.10.2011

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

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

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

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

person Louis Ricci    schedule 14.10.2011
comment
Да, я тоже планирую добавить это. Но я знаю, что он может работать очень хорошо и без этого, так что я попробую какую-нибудь другую схему кодирования и посмотрю, что получится. Спасибо! - person Fernando; 14.10.2011