Генетический алгоритм и тетрис - PullRequest
10 голосов
/ 14 октября 2011

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

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

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

Подробная информация о моем GA:

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

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

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

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

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 14 октября 2011

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

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

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

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

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

Похоже, вам не хватает функции "ямы" в функции оценки и структуре генов.

0 голосов
/ 14 октября 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...