Как стать автором
Обновить

Комментарии 25

Без нейронных сетей? Внезапно, поздравляю.
Спасибо. Нейронные сети обычно используются для аппроксимации решения. Например, AlphaGo использует метод Монте-Карло чтобы избежать полного перебора. В этой задаче требовалось найти полное решение.
Для нейронок потребовалось много вычислительных ресурсов.
Я как-то писал нейронку, которая играет в крестики-нолики. В 3х3 учится за несколько минут против алгоритма. Но как только добавляешь размерность 5х5, то время становится очень большим из-за степенных и факториальных зависимостей. Даже ждать не стал, когда она найдет очевидную и выигрышную стратегию.
Думал, возможно вернусь к теме, если будет свободное время.

В 2001 году такую работу без учета регламентных правил проделали венгры Янус Вагнер и Истван Вираг. Прочитать можно здесь. Как ни странно оценка позиции и поиск комбинаций в Рендзю на компьютере выполняется быстрее, чем в Гомоку из-за меньшего числа допустимых вилок со стороны черных.
Победил игру, но она мне почему то не засчитала победу, внезапно.
С отключенным Auto move и если делать ходы за черных такое возможно. Или были нарушены правила, например, шесть в ряд. Не исключаю также ошибок в демонстрационной javascript версии. Поэтому, если получиться в автоматическом режиме, пришлите, скриншот, пожалуйста.
Да. Там и правда было 6 в ряд. Но насколько я знаю правила у белых может быть 6 и более в ряд, а у черных только 5, при чем они не могут делать вилки 3х3, 4х4. Иначе баланс игры ломается, т.к. у черных преимущество первого хода.
Даже и эти правила (это уже рэндзю, не гомоку) не обеспечивают равенства, начинающий все равно выигрывает, но несколько сложнее.

В современном рэндзю, да и гомоку, для уравнивания шансов используются дебютные регламенты — специальные процедуры совершения первых пяти ходов, в числе прочего содержащие момент (-ы), когда один из игроков выбирает цвет, которым будет играть. То есть пирог: один режет пополам, другой выбирает себе половину.
По стандартным правилам Гомоку построение длинного ряда не запрещено, в отличии от Рендзю, но победой не считается ни за белых, ни за черных. См., например, здесь wikipedia. Длинный ряд разрешен в так называемом «свободном» Гомоку на бесконечном поле. В некоторых разновидностях Гомоку для черных были запрещены вилки 3x3. Запрет вилок 4x4 есть только в Рендзю. Впрочем, эти ограничения не дают преимущества, а только создают сложности для играющего человека, но не для компьютера. Выше есть ссылка на подобную работу по Рендзю.
Во-первых, игра все же называется рэндзю, а не «Рендзю». Можно, опять же, проверить в Вики.
Во-вторых, запреты (или, как их принято называть, фолы) изрядное преимущество белым дают, но этой прибавки недостаточно, чтобы скомпенсировать преимущество первого хода, поэтому для уравнивания шансов, как я уже написал, используют другой инструмент, дебютный регламент. Причем как в рэндзю, так и в гомоку. И, кстати, это преимущество должно выражаться и в том, что оптимальная игра должна приводить черных к победе в рэндзю без дебютного регламента за большее число ходов, чем в гомоку. Я где-то видел оценку не то в 45, не то в 49 ходов. Кажется, не у Иштвана Вирага.

Далее, про разновидности. Сейчас и по гомоку, и по рэндзю регулярно проходят серьезные соревнования (от фестивальных турниров до чемпионатов мира), рэндзю вообще есть во Всероссийском реестре видов спорта, так что говоря о разновидностях, надо понимать, что и в рэндзю, и в гомоку есть общепринятый набор правил и малораспространенные разновидности. Говоря про спортивное гомоку, мы подразумеваем, что длинный ряд — это просто ход, не выигрывает и не проигрывает; а когда мы говорим про рэндзю, мы имеем в виду, что длинный ряд, поставленный любой из сторон, приводит к победе белых.

Но самое интересное — это про отсутствие сложностей для компьютера. Тут такое дело, что в гомоку машина (в частности, программа Yixin, она бесплатная) играет уже на голову лучше человека, а в рэндзю тот же Исинь пока не может громить топ-игроков, как показывают матчи. Это странно, если тезис про отсутствие сложностей верен. Мне кажется, он имеет место только для вашей узкой задачи — доказательство выигрыша черных при игре без дебютного регламента.
Не встречал оценок длительности оптимальных игр для Рэндзю. Если найдете, пришлите, пожалуйста. Диагональные дебюты в Гомоку рассчитал все, некоторые даже с альтернативными ходами. Решаются быстрее 45 ходов.

В отношении уверенности — поиск комбинаций, как правило, дает сразу несколько альтернатив для окончаний в зависимости от порядка применения угроз. При глубине поиска более 15 ходов практически всегда встречаются альтернативы с вилкой 4x3. По моему опыту такие вилки находятся быстрее, если при альтернативном выборе идем по пути открытых троек, а не четверок.

В отношении Yixin, думаю, объясняется тем, что ее автор Кай Сун по национальности китаец. Смотрел интервью, в котором он рассказывает о своем вкладе в развитие именно Гомоку. Попробуйте китайцу сказать, что ушу это каратэ, или ханьфу это кимоно, или гомоку это рэндзю. :)
Не очень понятно, что такое «все диагональные дебюты в гомоку». В гомоку (гомоку swap2, в которое все соревнования) нет ограничений на расположение камней, первый не обязательно в центр, второй не обязательно рядом и т.д. Если вы имеете в виду все дебюты рэндзю, то есть вопросы. Вы доказали выигрыш (в стандартное гомоку) в первом диагональном дебюте, это H8 I9 J10? В 13д, это H8 I9 F6? И там, и там, насколько мне известно, чистый выигрыш черных не доказан (и во втором, честно говоря, сомнителен — я бы скорее выигрыш белых доказывал).
Если вы имеете в виду более широкий спектр дебютов (так называемое «свободное рэндзю» или «ЦЗК»), то что вы скажете про дебют H8 I9 K5?

Вообще, было бы интересно увидеть полный список закрытых трехходовок, мало ли, вдруг вы уже внесли вклад в формирующуюся дебютную теорию гомоку =)

Про то, что объясняется национальностью автора, мысль не понял, вы не могли бы ее развернуть? Китайцы не так уж и давно на топ-уровне играют в рэндзю и в гомоку, тут хранителями традиций являются японцы. Которые, впрочем, гомоку в общем и целом пренебрегают — и я хорошо их понимаю.
Нет-нет :) Под словом «все» имел ввиду те дебюты, которые дают черным преимущество. Кроме 7-Д считал 3-Д, 6-Д, 9-Д и 11-Д. Короче все, без отрыва 3-го хода от черного камня. Здесь оговорюсь, считал ходы и наиболее длинные продолжения, рекомендованные в сборниках. Для меня было важно было определить, что нет решения более короткого, чем в 7-Д.

В отношении спорного национального происхождения игры. Оба слова Гомоку и Рэндзю японские. Исконно это была одна и та же игра и в Японии, и в Китае. Современные дебютные правила и фолы в Рэндзю придуманы только в XX веке японцами. Распространение в мире они получили где-то в конце 80-х. Поэтому, например, в детские годы, называя игру Рэндзю, играл по правилам близким к Гомоку без фолов. Все что касается традиций Рэндзю — сильное преувеличение. На самом деле игра по современным правилам Рэндзю очень молода.

Можно говорить об излишней сложности правил и неоправданных ограничениях в игре. Кай Сун, в частности, считает что для выравнивания шансов игроков в Гомоку достаточно использовать правило swap после первого хода черных.
Помню, некоторое время назад я заинтересовался вопросом, каков минимальный размер доски, где черные все еще гарантированно выигрывают, и нашел, что на доске 13х13 выигрыш еще есть, а на 11х11 уже, видимо, нет. К чему я это? К тому, что на доске 13х13 выигрывает именно 9д, а не 7д, так что ваш поиск целесообразен. Но за черных очень сильны еще и некоторые коневые дебюты, в первую очередь 4д. Для вашей задачи, вероятно, 4д даст ту же оценку, там, полагаю, будут просто общие варианты с 7д, в 2д выигрыши будут длиннее (но зато и путей к победе больше, а сами пути проше и естественнее), но вот 8д какой-нибудь или 12д могут оказаться и быстрее, проверьте.

С происхождением игры споров нет, возникла в Китае несколько тысяч лет назад, попала в Японию, которой обязана своим развитием. Фолы появились на рубеже 19-20 веков, уже в конце 19 века в матчах сильнейших считался неприличным выигрыш вилкой 3-3, дебютные регламенты в рэндзю появились в 20 веке, а дебютный регламент гомоку, swap2, уже в 21 веке (хотя его аналог для рэндзю предлагался эстонцами и в конце 20-го).

То, что вы играли в гомоку, называя это рэндзю, это заслуга вполне конкретного человека, В. Сапронова, написавшего цикл статей в «Науке и жизни» и предложившего фактически свой набор правил — рэндзю с центральным запрещенным квадратом.

Что касается возраста игры, то тут вы радикально неправы. Последние изменения правил пинг-понга датируются 2018 годом, в 21 веке пару раз меняли параметры мячика — и что, все, новая игра? Конечно же, нет.

Наконец, о выравнивании шансов. Да, так можно, но есть одна простая проблема: остается буквально два-три разумных дебюта (с точностью до поворотов и отражений). Это то, через что проходил дебютный регламент ЦЗК, когда по нему стали всерьез играть заочно: пришлось расширять список запрещенных дебютов, так как стали закрываться заквадратные дебюты, то там, то сям находили выигрыш черных. Тут будет та же фигня: из-за крайней скудности выбора первого хода довольно быстро дебютная теория разовьется так, что будет гарантировать знающему человеку непоражение (и значительный перевес в случае схода оппонента с диаграмм). Поэтому этот регламент не приживется, а соревнования проводятся по регламенту swap2.
Спасибо! Действительно ошибка была в конвертации бинарного графа решений в JSON формат. Перепутал местами аргументы при сложении симметрий позиций. Двойная трансформация симметрий в решениях возникает редко, не удалось сразу обнаружить. Теперь все в порядке. Перед игрой потребуется очистить кэш браузера (Ctrl+Shift+Del).
Ну вот, теперь не подоминируешь.
Не, я положительно не могу остановиться с комментариями, этот пост выглядит лучшим хабрапостом про крестики-нолики so far =)

Сначала еще немножко придирок.
Про книжки.
Книжка Кожина и Носовского (да, там два автора, и вклад второго, Александра Носовского, часто недооценивают — а он, похоже, является основным автором) называется не «Зов камней», а «Звон камней», вот.
А «Тигр в клетке» хоть и недоступен в электронном виде, но вполне приобретаем в бумажном, особенно легко это провернуть, если вы находитесь в Москве или в Санкт-Петербурге.

Но «Тигр» решает уже другие задачи. У Сагары в целом подход «найти результативную атаку черных в каждом дебюте» — это то, что близко вам; а «Звон» и «Тигр» дают представление о возможностях обоих цветов по конкретным дебютным регламентам («Звон камней» для регламента RIF, «Тигр в клетке» — для Ямагути), а именно указание спектра играбельных позиций (т.е. позиций, где нет доказываемого выигрыша одного из цветов и подразумевается отсутствие доказуемого выигрыша), а также основные диаграммы про то, как реализовывать перевес там, где эта реализация существует и доказана.

И теперь про интересное.
Во-первых, gomocup.
Смотрите, сейчас есть довольно большое число разного рода движков для игры в игры семейства пять-в-ряд. Среди движков проводится ежегодное состязание, так называемый gomocup. Понятно, что то, что вы написали, к самостоятельной игре из равных позиций пока что неспособно (и уже давным-давно есть движок, расставляющий выигрыш черных в гомоку без дебютного регламента, называется Terminator); но, может быть, вам будет интересно написать что-то, что будет способно?
Во-вторых, решалка.
Программ, которые призваны решать задачи в играх пять-в-ряд, т.е. находить и доказывать выигрыш там, где он есть, тоже некоторое количество имеется (упомянутый уже Yixin, есть еще RenjuSolver из сильных решалок). Может быть, у вас получится наваять программу, которая делает это лучше существующих? Пока киборг из человека и компьютера значительно сильнее чистого компьютера (и железо не решает исход этого противостояния), существует заочная игра, в первую очередь рэндзю. И заочникам такого рода инструменты очень нужны.

В общем, можно от прикольного проекта, позволившего вам вспомнить молодость, перейти к чему-то, что будет полезно людям. Что скажете?
Спасибо за уточнения.

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

Моя программа, имею ввиду Java-версию, предназначена для нахождения полного решения позиции за заданное количество ходов. Ограничение по времени здесь не так важно. Здесь используется послойное решение — см. метод Vertex.compute (на Java). В программе есть альтернативный метод решения, основанный на алгоритме pn2-поиска, — см. метод Apex.compute (в интерфейсе можно заменить вызываемый метод). Этот алгоритм позволяет сократить число оцениваемых позиций, соответственно время поиска, для нахождения решения без ограничения числа ходов. Однако, для нахождения оптимальных решений он менее пригоден, так как склонен рассчитывать в первую очередь маловариантные позиции, которые редко приводят к быстрой победе. По моему опыту ход со скрытой угрозой позволяет победить быстрее, чем прямая атака.

Опубликованных полных решений (дерева ходов) не нашел. В своей задаче занимался не столько проверкой доказательства, сколько поиском оптимального решения. Важный результат — 35 ходов.

Про Terminator — хорошая программа, но довольно старая. По моей информации там не было ни полного решения, ни оптимального. Обсуждение этой темы см. здесь и пример выигрыша за белых здесь.
Ну, основная мысль в том, что задача, которую решили вы, занятная, но тупиковая. А можно было бы дать программе будущее — либо в формате находилки выигрышей, либо в формате игрового движка. Собственно, вопрос к вам: интересно ли вам развивать детище?

Терминатор — да, видимо, просто дебютная библиотека слабовата, потому решение неполное. Мне казалось, он был лучше.
В разделе описания позиций не увидел ограничений на шестерки (т.е. вида х0хххх0х для открытой четверки). Не берусь судить, насколько это реально что-то меняет в реальной игре, но с точки зрения строгости вопрос вызывает
Это очень важно. Однако в описании фигур, в частности для открытой четверки, написано, что свои камни должны отсутствовать на соседних клетках. Возможно Вы были не совсем внимательны.

В реальной игре это меняет правила. Если не проверять наличие своих камней на соседних клетках, то построение длинного ряда считаем выигрышем.

В коде при поиске фигур по шаблонам это обязательно проверяется:
// Поиск выбранных фигур в строке
Line.prototype.findFigures = function (figures, type) {
    ...
        // По черным камням
        if ((probe & 2) > 0) {
            ...
                // Нет черного каменя слева
                && (offset > 0 ? (stroke >> ((offset - 1) << 1)) & 2 : 0) === 0
                // Нет черного камня справа
                && ((stroke >> ((offset + pattern.length) << 1)) & 2) === 0
            ...
        }

        // По белым камням
        if ((probe & 1) > 0) {
            ...
                // Нет белого каменя слева
                && (offset > 0 ? (stroke >> ((offset - 1) << 1)) & 1 : 0) === 0
                // Нет белого камня справа
                && ((stroke >> ((offset + pattern.length) << 1)) & 1) === 0
            ...
        }
> Но для диагонального после 6-го хода на j9 на поиск решения в 33 хода было потрачено много времени

Если это единственная шестиходовка, в которую упирается ваше решение, то давайте попробуем улучшить. Насколько мне известно, 9-i6 выигрывает заметно проще, чем 9-i8, как минимум в рэндзю. Проще не значит быстрее, а рэндзю и гомоку — разные игры, но, имхо, должен помочь и вам. Вы смотрели этот 9 ход? Нужны ли вам 11 ходы на какие-то наиболее упорные защиты?
Да. Там проблема только с одним 10-м ходом на k8 — он дает самые длинны продолжения.

Нет, у меня не получается выиграть там быстрее, чем к 35 ходу — только в 37 ходов придумал. Там несколько форсажей есть, можно по-разному выигрывать, но все атаки длиннее, чем хочется. Даже не ожидал, насколько это на самом деле жесткое условие — пятерка 35 ходом…
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации