Как создать хорошую функцию оценки для игры?

в Java можно наследоваться одному (абстрактному) классу для "обеспечивания" функциональности, и можно реализовать много интерфейсов для "гарантирования" функциональности

19
задан Salvador Dali 26 October 2015 в 18:22
поделиться

7 ответов

Найдите несколько кандидатов для вашей оценочной функции, например, мобильность (количество возможных ходов) за вычетом мобильности оппонента, затем попытайтесь найти оптимальный вес для каждой метрики. Генетические алгоритмы, кажется, довольно хорошо работают для оптимизации весов в функции оценки.

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

Позднее редактирование: Более принятый, изученный, понятный подход, которого я не делал. Я знаю, что в то время это называется «Дифференциальная эволюция». Потомство создается от 3 родителей вместо 2 таким образом, чтобы избежать проблемы преждевременного сближения к среднему значению.

11
ответ дан 30 November 2019 в 03:48
поделиться

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

Также ознакомьтесь с Стратегией приобретения для игры «Отелло на основе обучения с подкреплением» (ссылка в формате PDF), где, учитывая правила игры, можно найти хороший "выигрышную функцию" можно узнать. Это тесно связано с TD-Gammon ...

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

3
ответ дан 30 November 2019 в 03:48
поделиться

Если никто еще не разбирается в игре, вы не сможете получить достойную функцию оценки. Не говорите мне, что стандартная альфа-бета с подсчетом материалов хороша или даже достойна для шахмат или их вариантов (возможно, шахматы проигравших являются исключением).

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

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

Конечно, если вы '

2
ответ дан 30 November 2019 в 03:48
поделиться

Насколько я понимаю, вам нужна хорошая статическая функция оценки для использования в листьях вашего дерева min-max. Если это так, лучше всего помнить, что цель этой статической функции оценки - дать оценку того, насколько хороша эта доска для компьютерного игрока. Так что

f (board1)> f (board2)

, тогда должно быть верно, что board1 лучше для компьютера (с большей вероятностью в конечном итоге выиграет), чем board2. Конечно, никакая статическая функция не может быть полностью правильной для всех досок.

Итак, вы говорите, что «цель игры состоит в том, чтобы иметь достаточное количество ваших фигур на определенных специальных клетках на доске», поэтому первый удар в f (доска) будет просто подсчитывать количество фигур, которые компьютер имеет на этих специальных квадратах. Тогда вы сможете еще больше его усовершенствовать.

Не зная специфики игры, невозможно лучше догадаться. Если вы дадите нам правила игры, я уверен, что пользователи stackoverflow смогут предложить массу оригинальных идей для таких функций.

2
ответ дан 30 November 2019 в 03:48
поделиться

Вы также должны быть внимательны при выборе. Если ваш алгоритм не имеет известного отношения к фактическому значению, стандартные функции AI не будут работать должным образом. Чтобы быть действительным, ваша оценочная функция или эвристика должна быть такой же или ниже фактического значения, иначе она будет направлять ваши решения странным образом (что можно было бы спорить в пользу шахмат, хотя я думаю, что стандартные точки в порядке ).

Обычно я выясняю, на что можно и что нужно. Для некоторых игр, таких как сокобан, Я использовал минимальное количество перемещений ящика, необходимое для перемещения одного ящика (изолированно) из его текущего местоположения в любое из целевых местоположений. Это не точный ответ для количества требуемых ходов, но я думаю, что это довольно хорошая эвристика, поскольку ее невозможно переоценить и ее можно предварительно рассчитать для всей доски. При суммировании очков для доски это просто сумма значений для каждого текущего местоположения ящика.

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

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

Не зная больше о вашей игре, мне было бы трудно рассказать вам, как построить функцию. Есть ли четкие значения того, что указывает на победу или поражение? У вас есть способ оценить минимальную стоимость, чтобы восполнить пробел?

Если вы предоставите дополнительную информацию, я буду рад попытаться предоставить больше информации.

1
ответ дан 30 November 2019 в 03:48
поделиться

Хотя вы можете использовать различные методы машинного обучения, чтобы придумать функцию оценки (TD-Learning, используется в таких проектах, как gnubackgammon, один из таких примеров), результаты определенно зависят от самой игры. В нардах это работает очень хорошо, потому что стохастический характер игры (бросание кубиков) вынуждает ученика исследовать территорию, которую он, возможно, не хочет делать. Без такого важного компонента вы, вероятно, получите функцию оценки, которая хороша сама по себе, но не по отношению к другим.

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

Хотя желательно иметь как можно более хорошую функцию оценки, вам также необходимо настроить свой алгоритм поиска, чтобы вы могли искать по глубоко , насколько это возможно. Иногда это на самом деле вызывает больше беспокойства, поскольку глубокий поисковик с функцией оценки медика может превзойти неглубокий поиск с хорошей функцией оценки. Все зависит от домена. (gnubackgammon играет в экспертную игру с однослойным поиском, например)

Есть и другие методы, которые вы можете использовать для улучшения качества вашего поиска, самое главное, чтобы иметь таблицу транспонирования для кэширования результатов поиска, чтобы звук был впереди обрезка.

2
ответ дан 30 November 2019 в 03:48
поделиться

Имейте в виду, что не обязательно, чтобы приличная функция оценки даже существует. Для этого утверждения я предполагаю, что функция оценки должна иметь низкую сложность (P).

1
ответ дан 30 November 2019 в 03:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: