Алгоритм генерации хода для игры Эрудит / Хабр
Доброго времени суток, хабр!
В этой статье я расскажу о том, как я создавал искусственный интеллект для игры Эрудит. Подробности под катом.
Эрудит
Эрудит — отечественный аналог всемирно известной игры Scrabble — настольной игры, в которую могут играть от 2 до 4 человек, выкладывая слова из имеющихся у них букв в игровое поле. Игровое поле состоит из 15 х 15, то есть 225 клеток, на которых участники игры составляют слова. Каждое составленное слово приносит очки в зависимости от ценности используемых букв и клеток поля.
Поле для игры Эрудит выглядит так:
Рисунок 1. Поле для игры
Основные правила
Обычно правила оговариваются игроками до начала игры, но имеются некоторые общепринятые правила игры:
- В начале игры каждому игроку даётся по семь фишек. За один ход можно выложить несколько слов.
Каждое новое слово должно соприкасаться (иметь общую букву или буквы) с ранее выложенными словами. Слова читаются только по горизонтали слева направо и по вертикали сверху вниз.
- Если игрок не хочет или не может выложить ни одного слова, — он имеет право поменять любое количество своих букв, пропустив при этом ход
- Если за ход игрок использовал все семь фишек, то ему начисляются дополнительные 15 очков.
- Сумма очков каждого хода состоит из суммы очков составленных букв, а также премий, получаемых за размещение букв на премиальных клетках.
- Премиальные клетки для букв: очки буквы, расположенной на зеленой клетке, удваиваются, на желтой – утраиваются.
- Премиальные клетки для слов: если одна из букв слова расположена на синей клетке, сумма очков всего слова удваивается, на красной – утраивается.
Первые шаги
Прежде чем разрабатывать алгоритм для генерации хода, необходимо разобраться с тем, какие слова и где можно расположить на поле. Для этого достаточно найти как можно построить все возможные слова по горизонтали поля – построение по вертикали получается аналогично.
Введем два определения:
Префиксом слова называется любой последовательный набор букв слова, начинающийся с первой буквы слова, но не включающий в себя последнюю.
Пример
Префиксы слова ХАБР:
- Х
- ХА
- ХАБ
Суффиксом слова называется любой последовательный набор букв слова, оканчивающийся последней буквой слова, но не включающий в себя первую.
Пример
Суффиксы слова ХАБР:
- АБР
- БР
- Р
Точки привязки
Рисунок 2. Рассматриваемый ряд
Рассмотрим ряд изображенный на рисунке выше. Необходимо найти все слова, которые можно построить в этом ряду. По правилам игры любое слово должно включать в себя уже имеющуюся букву из ряда. Тогда места, где можно сформировать слово – это пустые клетки, смежные с уже занятыми клетками. Назовем эти клетки точками привязки (англ. acnhor). В данном ряду существует пять точек привязки, которые выделены красным цветом на рисунке ниже.
Рисунок 3. Точки привязки
Как только все точки привязки найдены, необходимо найти возможное количество букв префикса для точек привязки, которые будут формировать слово. Если соседняя слева от точки привязки клетка занята, то она используется как часть префикса составляемого слова. В этом случае возможное количество букв префикса фиксировано. Если же эта клетка пуста, то префикс формируется из букв игрока и тогда количество букв префикса ограничено расстоянием до ближайшей слева непустой или являющейся точкой привязки клетки.
Рисунок 4. Возможное количество букв префикса
Алгоритм нахождения слов в ряду
Для каждой клетки, являющейся точкой привязки – ищем все возможные слова следующим образом:
- Найти все возможные префиксы, связанные с данной точкой привязки и удовлетворяющие возможной длине префикса, заданной для точки привязки.
- Для каждого найденного префикса в пункте выше найти все подходящие суффиксы, которые будут формировать вместе с префиксом слово из словаря. Суффиксы строятся используя буквы игрока или уже имеющиеся на поле буквы.
Префикс слова будет содержать либо клетки из руки игрока, либо клетки, уже размещенные на доске, но не одновременно.
Пример
В ходе работы алгоритма может быть найдено слово «КОРАБЛЬ » для точки привязки 4, если у игрока имеются буквы «Б» и «Ь«. В этом случае префиксом будет «КОРА«, суффикс будет построен при помощи двух букв игрока и буквы «Л» на поле
Теперь, имея способ нахождения всех слов на поле, можно перейти непосредственно к описанию алгоритмов генерации хода.
Алгоритмы генерации хода
Я выбрал три алгоритма генерации хода: алгоритм выбора максимального значения, метод полного перебора, метод альфа-бета отсечения.
Алгоритм выбора максимального значения
На каждой итерации метода ищется слово, которое принесет большее количество очков, чем остальные. После нахождения этого слова оно выкладывается на поле и поиск выполняется снова для новой позиции и нового набора букв в руке до тех пор, пока на каком-то шаге множество найденных слов не будет пусто.
Основной проблемой данного алгоритма является то, что полученный набор слов не обязательно будет самым лучшим ходом в данной позиции с точки зрения количества очков, которые он принесет.
Пример
На поле установлена начальная позиция, то есть на поле не размещено еще ни одного слова, на руках игрока имеются следующие буквы: ОБЛМЕОБ. В результате первой итерации алгоритма добавится слово «ОБЛОМ». В результате на руках у игрока останутся буквы Е и Б из которых уже не составить ни одного слова в новой позиции на рисунке ниже:
Рисунок 1. 1. Результат работы алгоритма.
Этот ход принесет игроку 11 очков.
Однако, лучший, с точки зрения количества очков, ход в данной позиции является ход, изображенный на рисунке ниже:
Рисунок 1.2. Лучший ход.
Данный ход принесет игроку 38 очков — 23 очка за составленные слова и 15 бонусных за использование всех букв, что в 3,5 раза больше, чем указанный выше ход.
Метод полного перебора
Второй метод генерации хода – это полный перебор. Полный перебор — метод поиска решения исчерпыванием всевозможных вариантов. Вначале ищутся все слова, которые можно составить на поле в данной позиции. Затем, для каждой новой позиции и новых букв в руке, получаемых размещением данного слова на поле, повторяются предыдущие действия. Так продолжается до тех пор, пока множество составляемых слов не будет пустым.
В итоге работы метода будут рассмотрены все возможные ходы, которые может сделать игрок в данной позиции. Среди этих ходов выбирается тот, который дает наибольшее количество очков.
Основная проблема метода – скорость. С целью увеличения скорости метода можно запоминать повторяющиеся в ходе размещения слов позиции и буквы на руке, то есть использовать динамическое программирование.
Метод альфа-бета отсечения
Алгоритм метода заключается в следующем: сначала ищутся все возможные ходы в данной позиции. Затем, для получившихся позиций ищутся все возможные ходы соперником в новой позиции. Эти действия повторяются ровно столько раз, какова глубина анализа начальной позиции. В получившемся дереве позиций ищется такой ход, что разница очков между игроком и соперника будет максимальной.
Результаты
Для реализации я использовал язык программирования Java. Словарь состоял из 12 тысяч слов, в программе был представлен в виде обычного Set’a.
Среднее время генерации представлено на диаграмме ниже:
Рисунок 5. Диаграмма времени генерации
Выборка исследования включала в себя 100 различных последовательностей появления букв, выдаваемых игрокам (по принципу стека). В итоге было рассмотрено примерно 1500 различных комбинаций букв на руке и позиций.
Однако выигрыш по времени генерации повлек за собой проигрыш по очкам: алгоритм выбора максимального значения в среднем приносит игроку порядка 30 очков, в то время как остальные методы — порядка 60 очков.
TODO
К сожалению, из рассмотрения были исключены следующие пункты:
- Анализ комбинаций с редкими буквами
- Анализ букв, остающихся после хода
- Анализ дальнейших действий противника
- Буквы, которые следует менять при пропуске хода
В основном первые два пункта опираются на то, чтобы использовать при первой возможности редкие буквы, такие как «Э» и «Ъ«, а также соблюдение баланса между гласными и согласными буквами на руках игрока. Анализ действий противника включает в себя попытки не допустить ходов, проходящие через бонусные клетки. Исследование вышеперечисленных моментов должны улучшить работу алгоритма.
Литература
- Лекция Peter Norvig по игре Scrabble. Из этого источника заимствовано наибольшее количество идей.
- Правила игры
- Полный перебор wiki
- Великий Томас Кормен: Алгоритмы.
Построение и анализ.
- Альфа-бета отсечение
Спасибо за внимание!
Что значит эрудит — Значения слов
эрудит в словаре кроссвордиста
эрудит
- Все знает
- Глубоко образованный человек
- Настольная игра
- Человек, обладающий большой эрудицией
- Умница
- Александр Друзь как всезнайка
- Человек, владеющий глубокими знаниями
- Всезнайка в рифму к аудиту
- Кладезь познаний
- Человек глубоких познаний
- Всезнайка и энциклопедист
- Начитанный сверх меры человек
- Умное название всезнайки
- Тот кто помнит больше, чем понимает
- Резервуар знаний, но не фонтан идей
- Всезнайка
- Человек, у которого знаний больше, чем ума
- Ходячая энциклопедия
- Интеллектуальная игра
- Человек, обладающий большими познаниями
- Разносторонне образованный человек
- (книжн.
) Человек, обладающий большой эрудицией
- Глубоко образованный человек, обладающий большой эрудицией
- Настольная игра (скрэбл)
- Человек,обладающий глубокими познаниями в какой-нибудь области знаний или во многих областях
- Человек с глубокими знаниями
Толковый словарь русского языка.
эрудит
эрудита, м. (книжн.). Человек, обладающий большой эрудицией в какой-н. области. Глубокий эрудит.
Толковый словарь русского языка. С.И.Ожегов, Н.Ю.Шведова.
эрудит
-а, м. (книжн.). Человек, обладающий большой эрудицией.
ж. эрудитка, -и (разг.).
Новый толково-словообразовательный словарь русского языка, Т. Ф. Ефремова.
эрудит
м. Тот, кто обладает эрудицией.
Википедия
Эрудит
Эруди́т:
- Эрудит — человек, обладающий обширными познаниями, см.
Эрудиция .
- Эрудит (Скрэббл) — настольная игра.
Примеры употребления слова эрудит в литературе.
Мне показалось, что слова Бабакулова — смутно знакомая мне и широко известная среди эрудитов цитата.
Едва пристроились и сняли спецодежду развесили портянки на просушку открыли банку ряпушки спиртяшки в стакашку нагадили колобашку сальца достали из тугой лютни послышалось вещание по трубам по фикусу по банкам по плафонам Прошу подняться говорил нам голос прошу не струсить в этот страшный час прошу желающих на верную погибель прошу любителей бессмысленных бравад на Невский вышел леопард огромный с кривым клыком отчайный эрудит он жаждет встреч готов сразиться в споре по всем проблемам бытия и духа по коркам по кусочкам и огрызкам он приближается и клык его горит НУ ЧТО Ж ТОВАРИЩИ МОМЕНТ ИСТИНЫ О КОТОРОМ НАС НЕ РАЗ ПРЕДУПРЕЖДАЛА НЕОРГАНИЧЕСКАЯ ХИМИЯ НАСТУПИЛ ПОЖАЛУЙ НАДО ВСТАТЬ ТОВАРИЩИ И НАСВИСТЫВАЯ ГЛАВЫ ИЗ ИСТОРИИ ЧЕЛОВЕЧЕСТВА ВЫЙТИ НА НЕВСКИЙ ПОЙДЕМТЕ ТОВАРИЩИ ЕДЫ И БЕЛЬЯ С СОБОЙ НЕ БРАТЬ Самолет все еще плыл над ватной пустыней, но в пустыне этой уже стали возникать просветы: нет-нет да блеснет внизу ночное озеро или изгиб реки, как зеркальце в спальне под скользнувшим лучом фары.
Эти разговоры мы изложили читателю, дабы он понял, какие серьезные и безмятежные отношения сложились в замке Севаль между ученым эрудитом и скромной лектрисой, хотя герцог не жалел сил, стараясь заманить Каролину и брата в силки молодости и любви.
Как интеллектуал, подвижник и эрудит, Томас Манн не мог избежать не только влияния современных теоретиков мифа, но и творцов психоанализа, в первую очередь К.
Как мы знаем, Лиллей некоторое время работал в Париже и там познакомился с Эмилем Оффе, знаменосцем модернизма, эрудитом, сведущим в истории, языках и символизме.
Но если первый — кабинетный эрудит, не спеша пробивался к глубинам умозрения, то второй был плодовитым литератором-полемистом, вольнодумцем на амвоне.
Она была так мила и хороша, так искренне и звонко смеялась, что эрудит Голдовский прозвал ее Козеттой, а Саня с грустью подумал, что теперь останется один, и тоскливо ему сделалось не оттого, что потеряет друга, а оттого, что никогда больше не увидит этих чудесных глаз.
Но все наши общие знакомые, искусствоведы и музейщики, говорили буквально в один голос — умница, эрудит, специалист в самых разных областях искусства, полиглот.
С лицевой стороны стола лицом друг к другу всегда располагались два главных семинарских говоруна, два блистательных полемиста и эрудита — аспиранты Марк Щеглов и Владимир Лакшин.
Смитсон Теннант состоял в Королевском обществе с 1785 года, слыл эрудитом и солидным исследователем: доказал в 1797 году, что равное количество алмаза, графита и древесного угля при окислении образуют равное количество углекислого газа и, следовательно, имеют одинаковую химическую природу.
Источник: библиотека Максима Мошкова
POLYMATH Синонимов: 85 синонимов и антонимов для POLYMATH
См. определение polymath на Dictionary.com чудо-мальчик
синонимы слова эрудит
- совершенный
- образованный
7 философский2 0037 глубокомысленный
См. также синонимы: эрудит
- вундеркинд
- одаренный человек
- интеллектуальный гений
- талантливый человек
- вундеркинд
- чудо-мальчик
- вундеркинд
- пришелец
- гений
- одаренный ребенок
- чудо-девочка
- 7 феном
На этой странице вы найдете 89 синонимов, антонимов и слов, относящихся к слову эрудит, например: совершенный, образованный, ученый, научный, изученный и хорошо образованный. 9Антонимы к слову эрудит phisticated
Тезаурус 21 века Роже, третье издание Авторские права © 2013, Группа Филипа Лифа.
ВИКТОРИНА
Проверьте свой природный интеллект с помощью этой викторины по терминам ИИ!
НАЧАТЬ ВИКТОРИНУКак использовать эрудит в предложении
Короче говоря, я мог бы стать эрудитом, основываясь на теории, которую может изучить каждый.
Э.О. УИЛСОН ВИДЕЛ МИР СОВЕРШЕННО НОВЫМ ОБРАЗОМ — ВЫПУСК 112: ВДОХНОВЕНИЕДЭВИД СЛОАН УИЛСОН 5 ЯНВАРЯ 2022 NAUTILUS
Каждый по-своему был эрудитом, бунтарем и мастером научной коммуникации.
«ВСПЫШКИ ТВОРЕНИЯ» РАССКАЗЫВАЕТ ИСТОРИИ ПРОИСХОЖДЕНИЯ ТЕОРИИ БОЛЬШОГО ВЗРЫВА КРИСТОФЕР КРОКЕТТА 24 августа 2021 г. НОВОСТИ НАУКИ
В некотором роде эрудит, Рудник, согласно его биографии, «по слухам, довольно близок» к кинокритику Либби Гельман-Вакснер, чьи обзоры появились в журнале Premiere и Entertainment Weekly.
«ИГРА ВО ДВОРЕЦ» ПОХИМНАЯ, РАЗВЛЕКАТЕЛЬНАЯ ROM-COM READKATHI WOLFELY 28 ИЮЛЯ 2021WASHINGTON BLADE
Эрудиту Аристоксену приписывают книгу о писателях-трагедиях.
ИСТОРИЯ БИБЛИОГРАФИЙ BIBLIOGRAPHIESARCHER TAYLOR
СЛОВА, СВЯЗАННЫЕ С POLYMATH
- одаренный человек
- интеллектуальный гений
- эрудит
- талантливый человек
- вундеркинд
- вундеркинд
- заумный
- академический
- образованный
- книжный
- умный
- общительный
- вундеркинд
- вундеркинд
Филип Лиф Групп.
Сколько слов можно составить из Polymath
Общее количество слов, составленных из Polymath = 144
Polymath является приемлемым словом в Scrabble с 18 очками. Polymath является допустимым словом в Word with Friends с 19 баллами. Polymath — это 8 буквенное среднее слово, начинающееся с P и заканчивающееся на H. Ниже приведены всего 144 слова, составленные из этого слова.
6 букв Слова, составленные из эрудита
1). фитол 2). тимол
5 букв Слова, составленные из полимата
1). ненависть 2). атопия 3). тип 4). мотылька 5). пати 6). пальма 7). возможно 8). суглинистый 9). солодовый 10). лимфа 11). Лота 12). лати 13). горячо 14). атом 15). ампли 16). точно 17). также 18). плита 19). типичный
4-буквенные слова, составленные из эрудита
1). уловка 2). мола 3). линька 4). ров 5). майонез 6). математика 7). поли 8). солод 9). Лот 10). Лота 11). тола 12). топ 13). молибден 14). мопы 15). табл 16). фото 17). опечатка 18). пати 19). игра 20). путь 21). палий 22). участок 23). ладонь 24). опал 25). опах 26). присяга 27). миф 28). фат 29). моль 30). суглинок 31). гипо 32). на вершине 33). гила 34). тампон 35). святой 36). атом 37). хойя 38). Холм 39). альт 40). холп 41). амил 42). дома 43). Холт 44). ахой 45). халм 46). планка 47). остановка 48). лампа 49). halo
3 буквы Слова, составленные из эрудита
1). Хао 2). пм 3). кв 4). пат 5). пункт 6). ветчина 7). горячий 8). оплата 9). Ом 10). там 11). усилитель 12). ям 13). да 14). игрушка 15). топ 16). том 17). Альп 18). альтернатива 19). твой 20). 21). нажмите 22). дао 23). пя 24). горшок 25). поле 26). пох 27). 28 слой). яп 29). пункт 30). Лам 31). мот 32). швабра 33). прыжок 34). лат. 35). хой 36). моа 37). карту 38). мат 39). мхо 40). 41 мая). овес 42). круг 43). гип 44). шляпа 45). приятель 46). па 47). моль 48). вариант 49). сено 50). лекция 51). строчка 52). лот
2 буквы Слова из полимата
1). ма 2). ал 3). к 4). лет 5). да 6). 7). ай 8). га 9). хм 10). оп 11). ом 12). о 13). в 14). мои 15). ах 16). я 17). 18). ой 19). та 20). пн 21). pa
См. также:-
- Слова, которые начинаются только с Polymath 0012
- только согласные слова
- слова из 7 букв
- слова с J
- Слова с Z
- Слова с X
- Слова с Q
- Слова, начинающиеся с Q
- Слова, начинающиеся на Z
- Слова, начинающиеся на F
- Слова, начинающиеся на X
Инструменты для поиска слов
- Искатель Scrabble
- Поиск слов 90gram 3 1 Ana Finder 900 7 Решатель кроссвордов
Слова образован добавлением одной буквы в конце слова polymath
polymathspolymathy
Примечание : .