(4) Различные эвристики покер румы на деньги в израиле, которые помогают отсортировать ходы в процессе перебора. Как уже отмечалось ранее, альфа-бета очень чувствительна к порядку, в котором анализируются ходы. При хорошем порядке она быстрее, причём быстрее принципиально. При этом алгоритм всё равно остаётся экспоненциальным - перебор на N+1 полуходов работает в разы медленнее, чем на N полуходов, но по крайней мере возводимое в степень число ощутимо уменьшается. В типичной шахматной позиции возможно примерно 40 ходов, и для перебора на N полуходов минимаксу (он же альфа-бета с наихудшим упорядочением ходов) надо рассмотреть 40**N позиций. Альфа-бете с наилучшим упорядочением ходов надо рассмотреть примерно 6**N позиций - разница принципиальна. Эвристики применяются различные, например: первым делом попытаться съесть только что ходившую фигуру противника (она работает, т.к. большинство рассматриваемых ходов - полнейший идиотизм). Другая полезная эвристика (с меньшим приоритетом) - попытаться сделать ход, который был лучшим у соседа слева (она основана на том, что в похожих позициях наилучший ход часто один и тот же). Имеются ещё несколько эвристик, но надеюсь, что идея в целом понятна.
Разумеется, многое зависит и от любимого человеком стиля игры. Так, Каспарову особенно тяжело играть с компьютерами - он любит острую тактическую игру, а здесь компьютеры особенно сильны. Переиграть компьютер в тактике очень тяжело. А вот стиль игры Карпова, наоборот, тяжёл для компьютера - он не знает, как надо играть в закрытой позиции, а Карпов тем временем потихоньку усиливает позицию. Есть и так называемый стиль - идея состоит в том, что современные программы недооценивают опасность атаки на короля, пока эта атака находится за их. Хороший антикомпьютерный игрок потихоньку готовит атаку, подтаскивает фигуры, и даёт тем временем возможность программе резвиться (заниматься пешкоедством) на другом фланге. Когда программа видит опасность - уже поздно, подтянуть застрявшего там ферзя (или кого-нибудь ещё) она уже не успевает. Очень часто хорошие антикомпьютерные игроки с людьми играют плохо, так как человек видит опасность раньше.
Внимательные читатели должны были догадаться что минимакс будет работать не только на деревьях с оценками плюс/минус один, но и на деревьях, листьям которых приписаны просто действительные числа. В дальнейшем мы будем рассматривать именно такие деревья (для объяснения основных алгоритмов я буду говорить о деревьях, забыв на время о собственно играх). Кроме того, я сосредоточусь именно на определении теоретического результата игры, т.е. на подъёме оценки вверх по дереву.
Минимакс - очень трудоёмкий алгоритм. Для определения теоретического результата игры размечается абсолютно всё дерево. Вопрос: нельзя ли, сохранив математическую корректность минимакса, обходить поменьше?
Тем не менее, все эти годы качество игры шахматных программ улучшалось. Частично прогресс обьясняется быстрым развитием аппаратуры - персональные компьютеры по ряду параметров достигли уровня суперкомпьютеров конца 70-х (хотя по ряду параметров всё ещё серьёзно отстают). Частично же развитие алгоритмов - прорыва не было, но было множество эволюционных улучшений. Каковы главные из них?
Пусть есть корень, у него - 2 потомка, у каждого из них - по 3 потомка-листа. В корне - очередь хода мина, соответственно, в вершинах второго уровня - ход макса. Листам, которые потомки левого поддерева, приписаны оценки 0, 5, 10. Так как в вершинах второго подуровня мы максимизируем, левому поддереву припишем оценку 10.
Сразу оговорюсь, что про наиболее известную программу (а точнее, машину+программу) - Deep Blue - я напишу в другой раз. Здесь же речь пойдёт о типичных современных программах, работающих в основном на обычных компьютерах.
(2) Использование баз данных с целиком просчитанными эндшпилями. Сейчас реальный предел для персонального компьютера - 5-фигурные эндшпили (считая королей). Используя такие базы данных, программы играют простые эндшпили безупречно. Более того, современные программы могут во время перебора вариантов до базы данных из позднего миттельшпиля, когда на доске находится ещё 10-15 фигур. Скромно замечу, что к созданию наиболее широко распространённых баз эндшпилей приложил руку я.
Разумеется, для реальных игр (шахмат, шашек, го) всё дерево машина обойти не сможет. Поэтому идут на жульничество.
Отсутствие подробностей связано с маркетинговой политикой фирмы IBM. Отделу рекламы там нужно, чтобы средний американец знал, что ╚IBM сделала непобедимый шахматный компьютер╩. Он это и знает. Поэтому Deep Blue уже (похоже) никогда не будет играть в шахматы — выиграть от этого IBM ничего не выиграет, а проиграть (в случае выигрыша человека) есть чего.
Deep Blue начинала как студенческая разработка — интересно было группе способных студентов попробовать свои силы, да и тема для диплома отличная. Прогресс технологии позволил сделать первую же версию процессоров (названную ChipTest) очень быстрыми. Последовала следующая, усовершенствованная версия, названная Deep Thought. В этот момент группу заметил маркетинговый департамент фирмы IBM и обратился к ней с предложением, от которого невозможно было отказаться. Результатом стали Deep Blue и Deep Blue II. Таким образом игровые автоматы в москве 2013 азия микс, Deep Blue II — это результат более чем 10 лет работы очень способной группы, в которой были как программисты/железячники, так и сильные гроссмейстеры (кроме уже упомянутого Бенджамина привлекались и другие гроссмейстеры, с хорошей оплатой). Финансировалась вся работа фирмой IBM, таким образом у группы были ресурсы, которые и не снились академическим организациям ("Бог на стороне больших батальонов").
Во-вторых и в главных, точная оценка заменяется на приближённую. А именно, после перебора на некоторую глубину, если не случилось мата или форсированной ничьи, вместо того, чтобы перебирать дальше, мы зовём оценочную функцию, которая приписывает текущей позиции (а точнее, всему поддереву stan james casino bonus, начинающемуся с текущей позиции), некоторую оценку. Как эта функция устроена - чуть позже, а пока главное: тут мы бесповоротно порвали с теорией, ибо оценочная функция есть нечто приближённое. Вот это и есть основное жульничество - альфа-бета была научно обоснована совсем в других условиях, и почему она после введения в неё оценочной функции работает в реальных играх, не совсем понятно (точнее говоря, есть сколько угодно работ на эту тему, но мне они представляются неубедительными). Более того, искусственно создан целый класс игр, где альфа-бета в таких условиях не работает.
Первые несколько полуходов (4) перебираются на ╚главном╩ процессоре RS/6000. После 4-х полуходов он передаёт работу остальным 30-ти процессорам фонбет скачать телефона, и они рассматривают следующие 4 полухода. Программа здесь написана на обычном C, и не очень отличается от традиционных параллельных шахматных программ. Наиболее существенное отличие — при написании программы было известно, что система обладает огромной скоростью (т.к. в ней основную работу выполняют специализированные шахматные процессоры), соответственно, можно особо не экономить. Напомню — при написании шахматной программы всегда велико желание какие-то варианты рассмотреть поглубже ("углубиться"), но всегда приходится помнить, что если мы углубимся здесь, то останется меньше времени на рас смотр других вариантов. Соответственно, обычно приходится искать компромисс между более глубоким рассмотрением "тактических" вариантов (в которых только и работают классические углубления) и "тихих" вариантов (которые с точки зрения человека тоже могут быть тактическими, но только ходы не попадают под слишком узкое машинное определение тактических). Здесь же можно рассматривать более длинные варианты, не заботясь что другим времени не достанется — ресурсов хватит на всех. Так что формальные 4 полухода здесь легко могут превратиться в 30 полуходов.
Разумеется, имея нарисованное дерево игры, играть очень легко - крестики должны выбирать ход, ведущий из текущей позиции в позицию с минимальной оценкой; нолики - в позицию с максимальной. Как легко понять, описанный алгоритм и есть обещанный минимакс.
Итак, как они устроены внутри, мы уже разобрались. Тем не менее, продукты, построенные на одинаковых принципах, могут очень сильно друг от друга отличаться, и шахматные программы здесь не исключение.
70% ходов противника.
Альфа-бета является алгоритмом с - ветвь отсекаются только после того, как хотя бы одного потомка оценили, и убедились, что значение этой ветви не повлияет на итоговый результат.
Попытки использовать селективные методы провалились с ещё большим треском. Не удаётся понять, как человек играет в шахматы, и попытки сделать программы с "forward pruning" - отсечениями ветвей дерева без их предварительного рассмотрения, исходя из чисто шахматных принципов, проваливаются. Всегда находятся позиции скачать игровые автоматы на компьютер kies, где программа отсекает нужный ход ( ).
Система в полном объёме в первый раз была собрана примерно за неделю до повторного матча с Каспаровым, когда были изготовлены все шахматные процессоры. Как протекал этот матч — в следующей главе.
Возьмём листок бумаги и сверху нарисуем начальную позицию. Так как из неё возможно 9 ходов, проведём из неё 9 чёрточек (ветвей). В конце каждой ветви нарисуем позицию, которая получается после этого хода, и в свою очередь проведём из неё ветви - ходы, возможные из данной позиции. И так далее. Полученная структура называется деревом, ибо (1) у неё есть корень - начальная позиция, (2) у неё есть листья - позиции, из которых не идёт ветвей, ибо один из игроков победил или случилась ничья, и (3) она отдалённо похоже на дерево, если лист бумаги перевернуть. Крестики-нолики - простая игра, её дерево должно уместиться на (большом) листе бумаги, но можно себе представить так же нарисованное дерево для шахмат (вроде бы есть всего 10**50 или около того различных позиций, и правило 50 ходов ограничивает максимальную длину партии
Вот какова была ситуация в начале и середине 70-х.
В конце концов стало понятно, что оценочную функцию можно звать только в спокойных позициях. Поэтому в конце основного перебора вставили ещё один, упрощённый, где рассматриваются только взятия, превращения, и, возможно, шахи и ответы на шах. Так как таких ходов немного, (так это называется) замедляет программу всего лишь на 20-50%, а сила игры резко увеличивается, т.к. программа не пытается оценить острые позиции.
С ростом уровня игроков становится ясно, что в такой игре у начинающей стороны существенное преимущество. Для компенсации введены правила для начала игры: первым ходом черные ставят камень в центр, далее белые и черные ставят по камню произвольно, следующим ходом белые могут сменить цвет. Гомоку – спортивная игра, проводятся международные турниры.
Эта игра на доске 15*15 известна под названием гомоку .
Интеллектуальные игры способствуют развитию мышления, в этом нет сомнений. Чем раньше начать заниматься – тем заметнее эффект. Сложные игры, такие как шахматы или Го, не всем близки и доступны. Но есть игры, известные с детства. Они не требуют сложного инвентаря, отнимают мало времени, и интересны в разном возрасте. Одна из таких игр – крестики-нолики .
Крестики-нолики 3*3 – кто не играл в них хоть раз? Поле 9 клеток, игроки поочередно ставят крестики и нолики, стремясь выстроить в ряд три фигуры.
У бесконечного поля есть низ – горизонтальная линия. Камни ставятся либо на линию, либо на уже выставленные фигуры – на произвольное поле ставить нельзя. Игра ведется до 5 в ряд. Другой вариант: доска 8*8, для победы нужно выставить 4 камня в ряд. В поддавках «крестики» выигрывают, если получается ряд из 4-х ноликов. В этой версии вводится запрет ставить фишку над предыдущей фишкой соперника.
В "4 в ряд" играют и на доске для солитера, изображенной на рис. 63 а. Она состоит из 33 полей с отверстием в каждом из них. Фишками служат колышки, которые вставляются в отверстия. Основной вариант солитера, популярный в прошлом веке, заключается в следующем. На всех полях доски расставляются фишки одного цвета, и одна из них вынимается (свободное поле). Ход представляет собой прыжок произвольной фишки по вертикали или горизонтали через соседнюю фишку, которая при этом - в отличие от уголков - снимается с доски. Как и в уголках, за один ход фишка может сделать несколько прыжков, и все фишки, через которые она перепрыгнула, удаляются.
Хотя у нас встречались игры, в которых побеждает вторая сторона, обычно право первого хода дает определенное преимущество. При этом в шахматах и шашках оно не слишком велико, а в крестика-ноликах в вариантах "3 в ряд" и "4 в ряд" является решающим (в первом случае при добавлении одного поля к доске 3*3, во втором - на доске размером 6*6 и больше). А какова ситуация в игре "5 в ряд", существует ли форсированный выигрыш у начинающего игрока? Практика показывает, что заметная инициатива принадлежит крестикам, но нередко и нолики берут верх. Но как утверждают знатоки рэндзю (об этой модификации крестиков-ноликов речь пойдет в следующем разделе), в японских книгах приводятся исчерпывающие варианты, как выиграть, начиная игру. К своему десятому ходу крестики получают решающий перевес, а к пятнадцатому завершают построение пятерки.
Игра квадрат (другое название "тико") представляет собой сочетание "4 в ряд" и болотуду. Ведется она на доске 5*5, у каждого игрока по 4 шашки. Цель игры - выстроить шашки своего цвета вдоль одной линии или в виде квадрата 2*2. Прежде всего партнеры по очереди расставляют шашки (счетверять их запрещается), после чего перемещают их на любые соседние поля (по вертикали, горизонтали или диагонали).
На рис. 63 б крестики соорудили вилку и выигрывают следующим ходом, ставя свой знак на одно из помеченных полей. Однако при правильной игре в крестики-нолики на доске для солитера результат ничейный.
Приведенное доказательство почти такое же, как и в шахматной игре "два хода подряд". Как видите, мы здесь снова воспользовались идеями симметрии. Кстати, теорема справедлива как для бесконечного поля, так и для досок заданного размера.
Хотя эти теоретические рассуждения вряд ли напугают любителей крестиков-ноликов, все же говорить о серьезных состязаниях, если доказан выигрыш одной из сторон, не приходится. Поэтому и были придуманы некоторые дополнения, при которых результат игры становится не столь определенным. Но прежде чем рассказать о шашках рэндзю, рассмотрим еще две модификации "шашечных" крестиков-ноликов. Вот игра, в которой засчитывается любое число шашек, стоящих подряд. На шахматной доске (можно взять и доску меньших размеров) двое по очереди ставят по две шашки своего цвета, стремясь выстроить из них горизонтальные или вертикальные ряды как можно большей длины. Ряд из двух одноцветных шашек дает их владельцу 4 очка, из трех - 9 очков, из четырех - 16 очков и т. д. (конечно, можно ввести и другие оценки). Шашка букмекерская контора sportingbet отзывы, стоящая одновременно в двух рядах, учитывается только 1 раз. После того как будет заполнена вся доска, ведется подсчет очков. У кого окажется больше, тот и выиграл.
Во-вторых, надо добавить позиционную оценку, и это есть самое сложное. Факторов много, в шахматных книжках приведены далеко не все, и главное – там сказано "это есть хорошо, а то плохо", а нам надо "это есть плюс половина, а то – минус три четверти". Соответственно, приходится сначала факторам приписывать веса с потолка, а потом отлаживать, вручную или пытаясь оптимизировать функцию в пространстве размерности несколько тысяч.
О текущем состоянии дел в компьютерных шахматах – в следующий раз.
В какую силу играют сейчас лучшие программы на коммерческих машинах (например, на PIII/500)? Точного ответа вам никто не даст, ибо имеется очень мало статистики (гроссмейстеры не любят играть с программами в "серьезные" шахматы, в основном из-за того, что им за это не платят). Так что ниже есть моя личная точка зрения (хотя я могу подтвердить ее некоторой статистикой).
Во-первых, все дерево не строят – никакой памяти ни у какой машины не хватит. Хранят только текущую позицию и последовательность ходов, в нее приведшую. Идешь вглубь – сделай на доске (точнее, на ее аналоге в памяти) ход. Возвращаешься – возьми ход назад (это еще не жульничество, с теоретической точки зрения то, что мы явно дерево не строим, ничего не меняет).
Большую часть современных программ можно разбить на 3 категории:
Альфа-бета является строгим алгоритмом – ветвь отсекаются только после того, как хотя бы одного потомка оценили, и убедились, что значение этой ветви не повлияет на итоговый результат.
Как устроена оценочная функция? Во-первых, надо просто сосчитать материал. Простейший вариант: пешка – 1, конь и слон – 3, ладья – 5, ферзь – 9.
Разумеется, многое зависит и от любимого человеком стиля игры. Так, Каспарову особенно тяжело играть с компьютерами – он любит острую тактическую игру, а здесь компьютеры особенно сильны. Переиграть компьютер в тактике очень тяжело. А вот стиль игры Карпова, наоборот, тяжел для компьютера – он не знает, как надо играть в закрытой позиции, а Карпов тем временем потихоньку усиливает позицию. Есть и так называемый "антикомпьютерный" стиль – идея состоит в том, что современные программы недооценивают опасность атаки на короля, пока эта атака находится за их "горизонтом видимости". Хороший антикомпьютерный игрок потихоньку готовит атаку, подтаскивает фигуры, и дает тем временем возможность программе резвиться (заниматься пешкоедством) на другом фланге. Когда программа видит опасность – уже поздно, подтянуть застрявшего там ферзя (или кого-нибудь еще) она уже не успевает. Очень часто хорошие антикомпьютерные игроки с людьми играют плохо, так как человек видит опасность раньше.
Все зависит от контроля времени:
Deep Blue II сделана на основе мощного сервера RS/6000 фирмы IBM. В сервере имеется 31 обычных процессора; один объявлен главным, ему подчиняются 30 остальных. К каждому "рабочему" процессору подключено 16 специализированных шахматных процессора, таким образом всего имеется 480 шахматных процессоров. Они и являются "сердцем" системы, таким образом, утверждение IBM "Мы продаем сервер RS/6000, который обыграл в шахматы Каспарова" игровые автоматы бесплатно без регистрации вулкан бесплатно, как бы это сказать… не совсем верно.
Пусть есть корень, у него – 2 потомка, у каждого из них – по 3 потомка-листа. В корне – очередь хода мина, соответственно, в вершинах второго уровня – ход макса. Листам, которые потомки левого поддерева, приписаны оценки 0, 5, 10. Так как в вершинах второго подуровня мы максимизируем, левому поддереву припишем оценку 10.
Система в полном объеме в первый раз была собрана примерно за неделю до повторного матча с Каспаровым, когда были изготовлены все шахматные процессоры. Как протекал этот матч – в следующей главе…
(1) В блиц программы играют лучше любого игрока. Позиционная слабость программ более чем компенсируется тактическими ошибками человека, ибо в блице регулярно ошибаются самые лучшие гроссмейстеры.
К сожалению, не все так просто. Первые программы использовали только что описанный алгоритм – перебор на фиксированную глубину с вызовом там оценочной функции (если раньше мат не случился). И немедленно выяснилось, что мы можем прекратить перебор, например, в середине размена, или при "висящем" ферзе, или когда на доске стоит мат в один ход, и тот факт, что у атакующей стороны не хватает ладьи, не имеет никакого значения. Были попытки учитывать все это в оценочной функции, но она тогда становилась безумно сложной, и медленной. На каждый починенный таким образом случай начинало приходиться десять других, где замедление программы вследствие более медленной оценочной функции приводило к недостаточной глубине перебора и еще худшей игре. Кроме того, программа с маниакальным упорством пытается отсрочить свои неприятности, получая взамен худшие. "Ага, я перебираю на 7 полуходов, и вижу, что теряю слона. А вот отдам-ка я вот эту пешку, и тогда слона противник возьмет на 4 полухода позже, получится 11, я и не увижу. Итого минус 1, а не минус 3". Разумеется, при более глубоком переборе программа бы обнаружила, что в итоге у нее будет минус 4, но времени перебирать глубже нет. Это явление называется "эффектом горизонта", ибо программа стремится выпихнуть неприятности за горизонт видимости (или горизонт событий).
Deep Blue – это не первая попытка создать специализированное "железо" для игры в шахматы. Можно вспомнить, например, что в конце 60-х – начале 70-х годов одна из отечественных машин М-20 была немного модернизирована, в нее были вставлены специальные шахматные команды (Россия – родина слонов; каких слонов я вчера видел в зоопарке… но мы отвлеклись от темы). Реальные же специализированные шахматные процессоры появились на Западе, в конце 70-х – начале 80-х годов. Самые известные разработки были сделаны Berliner HiTech и Ken Thompson (одним из авторов Unix) – Belle. В этих машинах реализован аппаратный генератор ходов, оценочная функция и альфа-бета перебор. Разработки были академические, и невзирая на то, что специализированное железо обычно на порядок быстрее, чем сопоставимое general purpose, о сопоставимости речи не было. Программа Cray Blitz на сверхсовременной тогда машине Cray (стоимостью $60млн) играла все равно лучше.
Оказывается, можно. Алгоритм называется альфа-бета. Легко доказать, что он дает те же результаты (не бойтесь, я этого делать не буду). Идея его, если объяснить на пальцах, такова:
(1) Использование библиотеки дебютов. Дебютная теория в шахматах хорошо разработана, и только естественно, что программы стали ее использовать. Более того, используют они ее лучше, чем гроссмейстеры, т.к. запомнить несколько миллионов позиций для машины проще простого.
Просьба обратить внимание, что нам повезло, что в правом поддереве оценку 100 имеет самый левый лист. Будь он правым прогнозы на хоккей от профессионалов на сегодня, и если при этом оба левых имеют оценку 7, нам пришлось бы обойти все 6 листьев. В наихудшем случае (мы всегда рассматриваем поддерево/лист с наилучшей оценкой в последнюю очередь) альфа-бета вырождается в минимакс. В наилучшем случае (наилучшее поддерево всегда рассматривается первым) рассматривается (очень грубо) 2*(sqrt(количества вершин, рассматриваемых минимаксом)).
90% наилучший ход оказывается в числе первых трех рассмотренных.
Соответственно, вторая категория – это так называемые knowledge-based программы. Тут все силы брошены на написание сложной оценочной функции. Учитывается и взаимодействие фигур друг с другом, и прикрытость короля, и контроль позиций, и чуть ли не фаза луны. В терминах nps программа работает в 10-100 раз медленнее, чем fast searches, но играет в хорошие позиционные шахматы. Точнее, хорошими эти шахматы являются только тогда, когда на доске нет глубокой тактики, или же контроль времени таков, что у программы есть достаточно времени, чтобы эту тактику просчитать. А еще одна стандартная беда – что-то не учтено в оценочной функции. Простейший (хотя и искусственный) пример – предположим, что программа не знает, что отставшая пешка – это плохо. Быстрая программа будет избегать позиций с отставшей пешкой, так как глубоко в дереве увидит "тактические" возможности противника – он подтянет свои фигуры и слопает несчастную пешку, т.е. сумеет перевести позиционное преимущество (о котором программа не знает) в материальное. Медленная же программа без такого знания обречена – что это позиционно плохо она не знает, а глубины перебора для нахождения выигрыша пешки противником не хватит.
Программисты любят быстрые программы – хотя бы потому, что можно написать быструю программу, не будучи сильным шахматистом. Эта программа будет играть очень неплохо, во всяком случае, она сумеет обыграть своего автора, равно как и 99% игроков на Земле.
Здесь NextStep(pos:position;i,fig,wlo:byte):byte - рекурсивная функция, позволяющая для данной позиции pos оценить рейтинг хода на клетку i фигурой fig при глубине данного хода wlo (в полуходах). Она имеет вид:
Анализ ситуации на поле производится после каждого полухода ( т.е. хода человека или компьютера) следующим образом:
Из этого массива легко определить номера рядов, в которые входит данная клетка, т.е. массив выполняет роль, обратную по сравнению с массивом lin .
В последнее время преподаватели многих вузов начали давать своим студентам задание разработать программу, играющую в крестики-нолики. Несмотря на видимую простоту, это не совсем тривиальная задача. Поэтому я начал получать большое количество писем с просьбой о помощи. Постепенно я пришел к выводу бк зенит зеркало сайта при блокировке, что необходимо сделать алгоритм этой игрушки общедоступным.
Здесь реализовано два алгоритма выбора клетки для хода в зависимости от глобальной переменной lvl. определяющей уровень игры компьютера. При lvl=0 вероятность хода на данную клетку пропорциональна ее рейтингу, т.е. компьютер с малой вероятностью, но все же может сходить на клетку с низким рейтингом. При ином значении переменной lvl компьютер ходит только на клетку с максимальным рейтингом, а если таких клеток несколько, то среди них нужная клетка выбирается случайно. Естественно, вторая стратегия при правильном определении массива Ray задает более высокий уровень игры компьютера.
Вот эта функция:
Процедура Rayting при этом присваивает рейтинги полям по следующей шкале: 25..32 - ходы, приводящие к выигрышу ноликов, причем 32 соответствует немедленному выигрышу, 31 - выигрышу через полуход, 30 - через 2 полухода и т.д.; 24 - ходы, приводящие к гарантированной ничьей; 16 - ходы с непредсказанным результатом (т.е. глубина расчета, заданная переменной glub. оказалась недостаточной, чтобы судить о последствиях данного хода); 8..15 - поля, ход на которые при правильных ходах противника ведет к проигрышу, причем 8 - немедленный проигрыш, 9 - проигрыш через полуход, 10 - через два полухода и т.д.
У меня есть только одна просьба к тем, кто будет пользоваться плодами моего труда: если вы отнеслись к процессу творчески и внесли в алгоритм существенные изменения или разработали свой алгоритм, пожалуйста, сообщите мне об этом - мне это интересно.
4 - победа ноликов;
В следующих версиях планируется введение on-line игры, различные сложности компьютерного соперника, мелкие исправления и всякие плюшки.
Если не сложно - отписывайтесь в этой теме о найденных багах и ваших пожеланиях.
3*3? Крестики-нолики? Отзывы? Боюсь те, кому интересно в такое играть, не смогут отписаться - они еще писать не научились. Игра для младшего дошкольного возраста. Моя дочь потеряла интерес к ней в 6, когда поняла алгоритм игры.
Совет - начинайте делать новую игру, а эту просто забудьте.
Описание:
Игра в крестики-нолики с компьютером или друзьями.
На данный момент реализована игра по локальной сети с помощью wi-fi.
Также вы можете испытать счастье в игре с insane ботом.:)
Кстати, об умниках и википедии: в неё я заглядывал до ваших советов в первую очередь, и прекрасно знаю о том что выиграть не возможно(если противник не дерово, как сказали выше), тем более учитывая то, что именно такого бота я и сделал, еще более глупо об этом постоянно писать. Мда.
П.п.п.с не поймите меня не правильно, я ведь не маркетолог, не агент поддержки, я всего лишь программист. Да и не кому не навязываю этот продукт, и тем более не продаю - вам в том числе.
Не, 30х30 не буду делать.
Эти то я сделал что-бы развеяться, за пару вечеров.:)
Если не сложно - отписывайтесь в этой теме о найденных багах и ваших пожеланиях.
Ну и тон, однако.
А то что заглядывали. Человек знающий что игра ничейна букмекерская контора зенит как зайти на сайт, не будет писать о планирующихся уровнях сложности (какая может быть сложность в ничейной игре) и о прочих "нововведениях". За сим прощайте, общаться с разработчиком пишущим в подобном тоне, неприятно.
Русский интерфейс: Да
Системные требования: Android 2.3+
Вот поле допустим 30x30 ещё можно было бы сыграть,а 3x3,всегда ничья,если противник не дерево. D
omega в 27.2.2013, 9:20 написал(а): link
Поскольку с сообщения Alexu007 не могу начать тему, начинаю со своего, следующего сразу за его сообщением:
Вначале доска, образованная 15 вертикальными и 15 горизонтальными линиями совершенно пуста. Первый ход делают чёрные, их шашка ставится в центр доски, обозначенный жирной точкой. Теперь очередь за белыми. Соперники ставят по очереди свои шашки на свободные пересечения линий, пока кто-нибудь из них не выстроит 5 из них в непрерывный ряд, безразлично в каком направлении: по вертикали, горизонтали или диагонали.
Рэндзю (ударение на "э") - спортивная настольная логическая игра камнями-фишками на разлинованной доске. Имеет китайское происхождение, но современный спортивный вариант игры оформился в Японии. Игра рэндзю наиболее распространена в юго-восточной азии - Японии, Китае, Южной Корее. В России игру иногда называют "шашки рэндзю".
Далее интересное сообщение General 'а по теме:
Я, конечно, не смотрела, т.к. ни фига не знаю языки.
Как играть в рэндзю - правила
Такие вот дела. Я очень люблю играть. Жалко, что на странице General 'а всё не по-русски и я ни черта там не понимаю
Нашла правила для классического рэндзю:
Мой итальянский коллега по квадратам Стефано Тогнон не так давно писал мне, что принимает участие в конкурсе программирования игр. Он ссылку мне присылал. Если найду, выложу.
Я тогда General'у эту ссылку послала, он посмотрел, ответил, что крутые игры там.
Теперь моё - не столь интересное - про "время оно", но, тем не менее, по теме:
С сайта http://рэндзю.рф/
Вот нашла ссылку Стефана:
Ну, что там за правила такие страшные?
Вот и рукопись у меня нашлась.
Сейчас напишу правила игры в свободное рэндзю на доске 15х15. Я их копировала из журналов "Наука и жизнь". Надеюсь, что там правильно всё писали.
Более старые варианты игры имеют названия "гомоку" и "гомокунарабэ", что в переводе означает "пять камней" и "пять камней в ряд".
Ещё игра у меня была запрограммирована "Крестики-нолики в трёхмерном пространстве" (в кубе 3х3х3).
То есть, всю логику можно впихнуть в граф ходов. Первым делом занумеруем правильно поле
Сами раскладки предлагаю хранить в виде 9 символьных строк + номер клетки для хода.
Этот алгоритм очень легко кодируется.
В том случае, когда «крестики» начинают игру ходом в угол, «ноликам» нельзя совершить роковую ошибку, то есть поставить свою фигуру в бок или в смежный угол. В этом случае проигрыша практически не избежать. Наиболее подходящей стратегией будет ход в противоположный угол или ход в центральную клетку. Однако, в последнем варианте важно вторым ходом занять не угловую, а боковую ячейку, перейдя в атаку.
Вариант 3. «Нолик» ходит в смежный угол. В этом случае ситуация похожа на первый вариант, но «крестики» уже с первого хода имеют выигрышную стратегию: второй ход «крестиков» в противоположный от своего первого хода угол, затем «нолики» защищаются ходом в центр, «крестики» занимают оставшийся угол. И вуаля: «вилка» крестиков на двух прямых. Подобная схема действий описана ниже:
В предыдущей статье, посвященной немногочисленным выигрышным стратегиям крестиков-ноликов, было рассказано, как выиграть в классической схеме игры, когда первый игрок (за крестики) начинает с хода в центр игрового поля. Однако существует еще одна менее популярная стратегия, при которой выигрыш менее вероятен, но все-таки возможен.
Введем функцию оценки каждого хода следующего вида:
Здесь должен быть java-applet с пример моей реализации всего изложенного в статье. Если вы видите этот текст pinnaclesports api key, вероятно у вас отключен Java-plugin. Что делать?
Мерой, для хода, может послужить длина собираемой комбинации k и длина нарушаемой комбинации противника k' в каждом из возможных четырех направлений (по вертикали, по горизонтали и в двух диагоналях):
или в одну функцию:
Уверен, многие успели насладиться великолепным квестом Machinarium. Вы наверняка помните того робота, которого надо было обыграть в баре, чтобы получить необходимые болтики. Так вот, игра, в которую его надо было обыграть, очень похожа на крестики-нолики, но имеет поле 10 на 10 и продолжается, пока один из игроков не выстроит ряд из пяти фигурок.
Пример дерева игры в крестики-нолики
Вот как это работает: раскрытие корневой вершины начинается с эмпирически подобранными параметрами альфа и бета. В простейшем случае им присваиваются максимально и минимально допустимые оценки. Далее, дерево раскрывается на максимальную глубину, которая может определяться фиксированным значением глубины, временем или памятью. Производится эвристическая оценка полученных листов. Оценки сравниваются на предмет попадания в диапазон альфа-бета. Если раскрытие происходит за игрока MAX и оценка оказывается больше беты, или раскрытие происходит за игрока MIN и оценка оказывается меньше альфа, то дальнейшее рассмотрение вершин становится не целесообразным.
Если функция G растет быстрее, чем Q, алгоритм ведет себя более агрессивно, стремясь как можно скорее закончить игру. Если быстрее растет функции Q, то алгоритм наоборот, проявляет осторожность и стремится чаще мешать противнику.
Пример потенциальных областей для сбора выигрышной комбинации длинной 4
Такой подход дает большой выигрыш на больших полях, практически нивелируя влияние размера поля на время действия алгоритма.
Дерево гипотетической игры кружки-ромбики
— Charles Babbage
Игра за крестики до 5.
Ход "б" приводит крестиков к победе
Пример дерева игры, раскрытого на глубину в три хода
Осознать это наблюдение с первого раза довольно трудно, но тем не менее оно может помочь сократить количество раскрываемых вершин в дереве игры. На подобных рассуждениях строится следующий алгоритм, называемый альфа-бета отсечения.
Такая оценка строится не для каждого узла дерева игры, а только для его листьев. Оценка же каждого узла получается из следующих соображений: на каждом этапе раскрытия дерева решений, начиная с последнего (на котором получаются листы с оценками), выбирается ход, наиболее предпочтительный для игрока, чей ход приводит к порождению узлов. При этом, для игрока, за которого ведется игра, оценка должна стремиться к максимуму, а для противника к минимуму.
На приведенном выше рисунке представлен случай с бета отсечением. После раскрытия всех листьев в левой ветке и получив оценку 7 для первой вершины на глубине два, мы переходим к раскрытию второй вершины. Получая оценку для каждой дочерней ее вершины, сравниваем ее с полученной ранее оценкой 7. Если оценка вновь раскрытой вершины окажется больше, то нет смысла раскрывать остальные вершины, тк очевидно что выбор будет сделан в ползу вершины с оценкой 7. Аналогичные рассуждения применимы для параметра альфа.
Подобное решение может показаться не очевидным. Для более подробного рассмотрения того, как к нему придти, читайте перевод статьи Д.Е.Кнута и Р.У.Мура например здесь .
При выборе функций G и Q трудно найти универсальную формулу, но можно опереться на ключевые ситуации в игре, и сделать выбор исходя из собственных предпочтений в них.
Классические «крестики-нолики» на поле 3x3 не представляют никакого практического интереса (разве что для маленьких детей, как начальный этап обучения логическим играм, или в качестве несложного задания по программированию для студенческой лабораторной работы) — общеизвестен алгоритм, который при правильной игре гарантирует ничью любой стороне, а при ошибке противника позволяет выиграть. Таким образом, игра находится в состоянии «ничейной смерти».
* За крестики
o Сделать первый ход в центральное поле.
o Противник может ответить ходом либо в угол, либо на сторону поля.
+ Если противник ответил ходом в угловое поле — сходить в ответ в соседний угол.
+ Противник будет вынужден пойти в противоположный угол, чтобы на следующем ходу не проиграть.
+ Дальнейшие ходы делаются так, чтобы блокировать построение тройки противником. — Ничья.
o Если противник ответил ходом на сторону — он проиграл. Следует ответить ходом в один из двух несоседних углов.
+ Противник будет вынужден пойти в противоположный угол, чтобы на следующем ходу не проиграть.
+ Сходить в угол, соседний с предыдущим, так, чтобы крестики образовали треугольник — получится «вилка». позволяющая следующим ходом построить тройку двумя способами.
+ Как бы ни ответил противник, следующим ходом строится одна из троек. — Выигрыш.
* Или:
o Сделать первый ход в угол.
o Противник может ответить либо ходом на сторону, либо ходом в угол, либо ходом в центр.
o Если противник ответил ходом в угол, он вновь проигрывает. Следует ответить ходом в любой из оставшихся углов.
+ Противник будет вынужден блокировать угрозу, следующим ходом нужно занять последний угол, что дает вилку. — Выигрыш.
o Если противник ответил ходом в центр, то нужно занять угол противоположный первому углу. Противник может ответить либо ходом на сторону, либо ходом в угол.
+ Если противник ответил ходом в угол, он проиграл — следует немедленно занять другой угол, блокируя тройку противника и образуя свою вилку. — Выигрыш.
+ Если противник ответил ходом на сторону, то следующие ходы строятся так, чтобы блокировать тройки соперника — Ничья.