Существует ли такой алгоритм, при котором, если бы компьютер обладал бесконечной вычислительной мощностью, он мог идеально играть в шахматы, чтобы он никогда не проигрывал?
Если так, где я могу найти псевдокод для него?
Существует ли такой алгоритм, при котором, если бы компьютер обладал бесконечной вычислительной мощностью, он мог идеально играть в шахматы, чтобы он никогда не проигрывал?
Если так, где я могу найти псевдокод для него?
Ответы:
Существует ли алгоритм? Да. Согласно теореме Цермело , есть три возможности для конечной детерминированной игры с идеальной информацией для двух игроков, такой как шахматы: либо у первого игрока есть выигрышная стратегия, либо у второго игрока есть выигрышная стратегия, либо любой игрок может форсировать ничью. Мы (пока) не знаем, что это за шахматы. (Шашки, с другой стороны, были решены : любой игрок может форсировать ничью.)
Концептуально алгоритм довольно прост: построить полное игровое дерево , проанализировать конечные узлы (позиции окончания игры) и либо сделать выигрышный начальный ход, уйти в отставку или предложить ничью.
Проблема заключается в деталях: существует приблизительно 10 43 возможных позиций и еще большее количество ходов (большинство позиций может быть достигнуто несколькими способами). Вам действительно нужен ваш бесконечно мощный компьютер, чтобы воспользоваться этим преимуществом, поскольку компьютер, который может использовать преимущества этого алгоритма, либо не может вписаться в известную вселенную, либо не завершит вычисления до некоторого времени после его окончания.
источник
Смотрите https://en.wikipedia.org/wiki/Endgame_tablebase .
Имея бесконечную вычислительную мощность, можно было построить такую таблицу для исходной позиции и решить шахматы .
На практике, только позиции с семью "мужчинами" (пешки и фигуры, считая королей) были решены с использованием современных суперкомпьютеров, поэтому мы очень далеки от решения шахмат. Сложность задачи экспоненциально возрастает с увеличением количества штук.
источник
Если бы у вас действительно была бесконечная вычислительная мощность, такой алгоритм на самом деле было бы тривиально написать. Поскольку у шахмат есть конечное число возможных состояний, теоретически вы можете просто перебирать их все, пока не найдете путь идеальной игры. Это было бы ужасно неэффективно, но если бы у вас была бесконечная вычислительная мощность, это не имело бы значения.
источник
Для прямого решения вопроса: да, есть такой алгоритм. Это называется минимакс. (Таблицы конечных игр генерируются с использованием этого алгоритма (в обратном направлении!), Но вам нужен простой старый простой минимаксный алгоритм). Этот алгоритм может отлично играть в любую игру с двумя игроками. Найти псевдокод здесь:
https://en.wikipedia.org/wiki/Minimax
Отметим, что варианты этого алгоритма используются современными компьютерными шахматными программами.
источник
Мало того, что есть алгоритм для игры в идеальные шахматы, можно написать короткую программу, которая (при наличии бесконечных ресурсов) будет идеально играть в любую детерминированную игру с конечной продолжительностью совершенного знания для двух игроков .
Игровому движку даже не нужно знать правила игры, в которую он играет. Все, что ему нужно, - это непрозрачное представление «игрового состояния» и функций, которые (а) с учетом любого игрового состояния предоставляют список законных следующих игровых состояний и (б) с учетом игрового состояния определяют, является ли это победой для игрока 1 , выигрыш для игрока 2, ничья, или это не конечное состояние.
С учетом этих функций простой рекурсивный алгоритм «решает» игру.
Этот факт упоминался в предыдущих ответах шахматным программистом (минимакс) и Acccumulation (который предоставляет версию программы на python).
Я написал такую программу более 20 лет назад. Я проверил это, играя в крестики-нолики (крестики-нолики, если вы американец). Конечно же, он играл в идеальную игру.
Конечно, это быстро обрушится на любой мыслимый компьютер для любой серьезной игры. Поскольку он рекурсивный, он эффективно строит все дерево игры в стеке, поэтому вы получите «переполнение стека» (очень каламбур), прежде чем приступите к анализу 10 ^ 123 состояний шахмат, упомянутых в других ответах. Но интересно знать, что в принципе эта маленькая программа справится со своей задачей.
Для меня это также говорит кое-что интересное об ИИ: как бы вы ни думали о «интеллекте» Deep Blue, или Go Zero, или даже человека, играющего в Chess или Go, в некотором смысле эти игры имеют тривиальный, точно вычислимый оптимальный результат. решения. Задача состоит в том, чтобы получить хорошее, но не оптимальное решение за разумное время.
источник
Я буду игнорировать возможности ничьих или бесконечных последовательностей ходов для простоты. Когда алгоритм понятен, его не особенно сложно распространить на эти случаи.
Сначала несколько определений:
Любой ход, который выигрывает игру для игрока, который делает этот ход, является выигрышным ходом.
Любой ход, который проигрывает игру для игрока, который делает этот ход, является проигрышным ходом.
Любой ход, который оставляет другому игроку хотя бы один выигрышный ход, также является проигрышным. (Так как противник может сделать этот ход и принести убыток.)
Любой ход, который оставляет другого игрока только с проигрышными ходами, также является выигрышным ходом. (Независимо от того, что делает ваш противник, вы выиграете.)
Идеальная стратегия означает всегда делать выигрышные ходы, если таковые имеются, и уходить в отставку, когда у игрока остаются только проигрышные ходы.
Теперь просто написать идеальную стратегию. Просто взорвать все возможные последовательности ходов и определить выигрышные / проигрышные ходы. Игнорирование патовой ситуации, в конечном итоге каждый ход будет идентифицироваться как выигрышный или проигрышный.
Теперь стратегия тривиальна. Посмотрите на все ваши возможные ходы. Если какие-либо выигрышные ходы остались, возьмите один и выиграйте. Если остаются только проигрышные ходы, подайте в отставку, так как ваш противник может заставить вас проиграть.
Нетрудно скорректировать стратегию, включив в нее возможность тупиковой ситуации.
Обновление : на тот случай, если неясно, как это определяет каждый ход как более выигрышный или проигрышный ход, подумайте:
n
количество ходов в самой длинной шахматной игре. (На данный момент мы игнорируем неограниченные последовательности, хотя включить их нетрудно.)n
должны рассматривать ходы с предыдущими ходами.n-1
предыдущими ходами является либо выигрышным, либо проигрышным, посколькуn
ходы заканчивают самую длинную игру.n-2
сопровождается только выигрышными или проигрышными ходами и, таким образом, само по себе является выигрышным или проигрышным ходом.источник
1. d4
с...resigns
?Предположим , у вас есть три функции:
win_state
,get_player
, иnext_states
. Входные данные дляwin_state
состояния игры, и выходные данные равны -1, если белые находятся в мате, 0, если это ничья, 1, если черные находятся в мате, иNone
иначе. Входные данные дляget_player
состояния игры, а выходные - -1, если ход черных, и 1, если ход черных. Вход дляnext_states
- это список возможных следующих состояний игры, которые могут возникнуть в результате легального хода. Затем следующая функция, когда задано игровое состояние и игрок, должна сообщить вам, в какое игровое состояние нужно перейти, чтобы этот игрок выиграл.источник
Используйте справочную таблицу
Да. Это просто. Вам даже не нужна бесконечная вычислительная мощность. Все, что вам нужно, это справочная таблица, которая содержит для каждой возможной позиции на доске лучший ход для игры в этой позиции. Вот псевдокод:
Подвох
Единственный улов в том, что эта справочная таблица должна быть очень, очень большой - возможно, больше, чем галактика Млечный Путь - и для ее создания потребуется много времени - возможно, больше, чем нынешний век вселенной, если только нет некоторая необнаруженная закономерность в шахматах, которая делает это намного проще, чем мы можем видеть прямо сейчас. Но если бы у вас была эта справочная таблица, подпрограмма для выбора идеального хода каждый раз могла бы быть реализована всего за одну инструкцию CPU.
Кроме того, учитывая наше текущее знание шахмат, невозможно быть уверенным, что идеальная игра гарантирует, что вы не проиграете. Например, если идеальная игра гарантирует победу белым, черные проигрывают, даже если черные играют идеально.
источник