Самые долгие выигрыши в шестифигурных эндшпилях

Тема в разделе "Машинное отделение", создана пользователем Kirr, 1 авг 2006.

  1. TopicStarter Overlay

    Kirr Администратор

    • Команда форума
    Рег.:
    11.02.2006
    Сообщения:
    1.208
    Симпатии:
    22
    Репутация:
    8
    Оффлайн
    Всем привет! Я решил найти самые длинные выигрыши в шестифигурных (и менее) окончаниях. Результаты - здесь. Трёх-четырёх-пяти-фигурные окончания добавлены полностью, над шестифигурными окончаниями работа продолжается. :) В этом нет ничего сложного, программа Wilhelm легко ищет эти позиции по базам Налимова, просто захотелось собрать примеры позиций на одной стнаничке.

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

    Надеюсь эта страничка приблизит осознание человечеством необходимости таблиц окончаний для сколько-либо серьёзных занятий шахматами. :) Приветствуются любые вопросы и комментарии.
  2. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    А можно составить табличку по количеству ходов до первого хода пешки/взятия?
  3. TopicStarter Overlay

    Kirr Администратор

    • Команда форума
    Рег.:
    11.02.2006
    Сообщения:
    1.208
    Симпатии:
    22
    Репутация:
    8
    Оффлайн
    Можно, но сложно, так как для этого нужны таблицы в метрике DTZ. Это если коротко и если я правильно понял что вы имеете ввиду.

    Для начала надо уточнить что именно мы ищем. Количество ходов до первого хода пешки/взятия - 1. В какой линии? 2. Начиная с какой позиции? В поиске самого длинного мата - там всё просто. Перебираются все позиции в таблице (таблица имеет метрику DTM - distance to mate - расстояние до мата), и находится позиция дающая самый длинный варант с матом. (При наилучшей игре сторон). Можно начиная с этой позиции и двигаясь по этому варианту (кратчайшему к мату) посчитать ходы до первого хода пешки/взятия, но не думаю что вам интересно именно это. (Хотя здесь тоже будут сложности из-за того что вариант оптимальной игры может быть не единственным).

    Скорее всего вас интересует позиция с наибольшим расстоянием до ближайшего хода пешкой/взятия, и линия ведущая к этому ходу пешкой/взятию. Но здесь надо учесть что 1. Эта позиция скорее возможно не является самым длинным матом. 2. Эта линия возможно не является кратчайшей к мату. 3. Если учесть правило 50 ходов то мата может не быть вовсе (даже если расстояние до ближайшего хода пешкой/взятия меньше 50 ходов). Вобщем всё не совсем просто.
  4. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Меня интересует Взятие именно с той точки зрения что Вы и подумали :)
    С точки зрения правила N (частный случай 50) ходов. Это есно линия не кратчайшая к мату. А кратчайшая к выигранной позиции более высокого ранга. Где под позицией Более высокого ранга понимаем позицию с
    1. Меньшим количеством пешек.
    2. Меньшим количеством фигур на доске.
    3. С более продвинутыми пешками.
  5. TopicStarter Overlay

    Kirr Администратор

    • Команда форума
    Рег.:
    11.02.2006
    Сообщения:
    1.208
    Симпатии:
    22
    Репутация:
    8
    Оффлайн
    Такие таблицы есть в природе, Marc Bourzutschky и Яков Коновал даже считают семифигурные таблицы по метрике DTZ. Это очень удобная метрика, и размер таблиц получается меньше. К сожалению они их пока что не распостраняют, и нет движков использующих эти таблицы.

    Для меня есть ряд загадок с метрикой DTZ. (Возможно я что-то не так понимаю). Предположительно эта метрика помогает учитывать правило N ходов. Но проблема в том что позиция ранга +1 может запросто может потребовать больше чем N ходов для перехода к позиции ранга +2. И т.д. То есть даже если мы находимся в позиции которую мы можем перевести в следующий ранг за не более чем N ходов, нет гарантии что ту позицию следующего ранга мы переведём в ещё следующий тоже за N ходов. То есть нельзя за один запрос к таблице узнать выиграна позиция или нет.

    Выход по-моему только один: Строить таблицы в которых уже учтено правило N ходов. В метрике DTM можно получить как бы "практические" таблицы Налимова (к тому же они будут меньше объёмом). Для этого кто-то должен изменить генератор и код проверки позиции, и сгенерировать таблицы. Также встроить код в какой-нибудь движок. Таблицы Налимова сейчас стандарт так как их умеет использовать большинство топ-движков. Чтобы этот стандарт сменился на что-то другое нужно больше чем просто добавление правила 50 ходов. По-моему следующим стандартом будет какой-нибудь вариант битовых таблиц, просто потому что они занимают в десятки раз меньше места. Хочется ведь и семифигурные таблицы поюзать на своём веку. :)
  6. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    А где можно прочитать про формат таблиц Налимова?
  7. TopicStarter Overlay

    Kirr Администратор

    • Команда форума
    Рег.:
    11.02.2006
    Сообщения:
    1.208
    Симпатии:
    22
    Репутация:
    8
    Оффлайн
    Основы: http://www.aarontay.per.sg/Winboard/egtb.html
    Статьи: http://www.is.reading.ac.uk/people/G.Haworth.htm?publications
    Особенно вот эта: http://www.is.reading.ac.uk/common/publications/02126.pdf
    Можно также почитать код генератора: http://kd.lab.nig.ac.jp/chess/discussion-board/viewtopic.php?p=6073#6073
    Ещё можно общаться и задавать вопросы например здесь: http://kd.lab.nig.ac.jp/chess/discussion-board/viewforum.php?f=6

    Лично я вообще плохо понимаю как они работают. Только главные идеи. :)
  8. Муркенштейн Гастролёр

    • Участник
    Рег.:
    20.02.2006
    Сообщения:
    1.794
    Симпатии:
    15
    Репутация:
    2
    Адрес:
    Nowhere
    Оффлайн
    Как я понимаю, при этом N будет жёстко фиксированным и для каждого N нужны будут отдельные таблицы?
  9. TopicStarter Overlay

    Kirr Администратор

    • Команда форума
    Рег.:
    11.02.2006
    Сообщения:
    1.208
    Симпатии:
    22
    Репутация:
    8
    Оффлайн
    Да, по крайней мере я себе именно так это представляю. :) Guy Howarth мне когда-то рассказывал о метрике которая позволяет учитывать правило N ходов для любого N, но я ничего не понял не помню как она работает. :) Можно спросить его.
  10. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Я сначала почитаю про формат Налимова. Потом уже подумаю о скорейшем переходе в младший эндшпиль. Раньше приводили именно эти цифры (перехода в младший, выигранный эндшпиль) И получить их проще, чем Расстояние до мата. (точнее не сложнее) - разница в том, что при переходе в другой эндшпиль мы присваиваем расстояние до мата в позиции низшего ранга, либо 0(1) в случае требования просто перехода в выигранный эндшпиль.
  11. Booot Учаcтник

    • Участник
    Рег.:
    05.06.2006
    Сообщения:
    140
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Я написал для своего движка 4-х и 5-ти фигурные эндшпильные генераторы в формате DTM . Результаты естествено совпали с Налимовскими. Вполне могу переписать генератор для правила N ходов. Вот только целесообразность этого действа малоясна.

    DTZ генерить чисто технически проще - меньше памяти нужно для генератора.

    Kirr. Страничку вы создали супер! Я сам был фанатом шахматных эндшпильных таблиц и у самого была идея собрать подробную информацию по каждому эндшпилю.
  12. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Вполне могу переписать генератор для правила N ходов. Вот только целесообразность этого действа малоясна.
    Кратчайший путь к мату может приводить к ничьей по правилу 50 ходов, когда выигрыш есть даже если придерживаться этого правила. Зная количество ходов для перехода в эндшпиль другого ранга и количество ходов прошедших с последнего взятия/превращения/хода пешки - можно играть более эффективно, избегая ничьих по правилу 50 ходов там где её можно избежать, и соответственно делая ничью, там где это возможно :)
  13. TopicStarter Overlay

    Kirr Администратор

    • Команда форума
    Рег.:
    11.02.2006
    Сообщения:
    1.208
    Симпатии:
    22
    Репутация:
    8
    Оффлайн
    Нет, всё ещё проще. Код проверки позиции (и следовательно движок) менять не нужно. Индексная схема и метрика остаются теми же, просто в таблице будет больше ничьих. :)

    Зачем это нужно - NS всё объяснил. С текущими таблицами всю работу по уклонению (или по поиску) ничьей из-за 50 ходов приходится проделывать движку. Если правило 50 ходов встроено в таблицы, то движку достаточно проверить одну позицию чтобы узнать результат партии. И достаточно будет поиска на глубину 1 полуход чтобы найти наилучший ход.

    Спасибо! :)
  14. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    Да, действительно, ведь когда расчет подходит к табличным, то происходит взятие, а значит счетчик обнуляется! В итоге такой простой метод, как объявление ничейными позиций, где выигрыш вне правила 50 ходов будет работать. Тут есть трудность у составителя таблиц, так как видимо есть много позиций, где выигрыш достигается дольше чем 50 ходов, но при этом путь идет через взятия или продвижения пешек. То есть таблицы по хорошему надо все пересматривать.

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

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Техника Ретроспективного анализа (и вообще методы динамического программирования) Были четко отлажены уже несколько десятилетий назад.
    В этих методах нет понятия "повторение позиции"
    Из каждой позиции последнего просчитанного ранга генерируются позиции из которых одним ходом могла эта позиция получится. А для каждой сгенерированной позиции Выполняется проверка. что её еще нет в списке выигранных позиций (что она еще не помечена как выигранная)
    Очень похоже на алгоритмы поиска пути (Дейкстра)

    Строить позиции лучше не перестраивая из другой метрики, а просто написать свой генератор таблиц - сразу в нужном формате.
  16. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    Я не об этом, а о трехкратном повторении позиции - о правиле ничьи в этом случае.
  17. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Хранишь Хеши позиций встретившихся в партии, и начиная с последнего взятия/хода пешки начинаешь сравнивать Хеш встретившейся в партии позиции с хешем текущей. (есно имеет сравнивать позиции только с той-же очередью хода)
  18. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Я так понимаю, вопрос был о повторении позиций в процессе генерации эндшпильных таблиц. В этом случае повторы просто не рассматриваются, т.к. непонятно зачем это надо. Во время генерации ищутся все выигрышные позиции. После этого все остальные позиции считаются ничейными. И причины по каким они оказались ничейными (из-за повторов или еще почему-то) нас не интересуют.
  19. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    Нет, вопрос был оффтопиком. С таблицами все более или менее ясно. Я спрашивал про движки. Как вопрос повторения позиции решается в движках!
  20. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Мы это уже обсуждали где-то. И пришли к выводу, что этот вопрос решается плохо :)
    т.к. искажаются оценки некоторых позиций, записываемых в хеш.
  21. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    Даже пусть плохо... но как? Как я описал? Или есть что-то более перспективное?
  22. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    NS написал как это все делают (пост №17).
  23. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    А что хэш не чистится что-ли по ходу счета? А если не хватит памяти?
  24. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Зачем чистить Хеш?
    Хеш это 64 битное число.
    Встретившиеся в партии позиции это массив, например с двумя указателями.
    Первый указывает на позицию после последнего взятия/хода пешки/рокировки/потери рокировки.
    Второй показывает на последнюю (текущую) позицию.
    В партии, после каждого взятия и т.д. сдвигаем первый указатель.
    В переборе делаем то-же самое, только запоминаем положение указателя до взятия, чтоб при отмене хода вернуть его на место.

    Ну со вторым указателем понятно...
  25. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Трудно понять, что имеется в виду.

    Например рассматриваем пятый ход черных.
    До этого были сделаны эти ходы:
    1. e4 e5 (хеш1) 2. Nf3 Nc6 (хеш2) 3. Bb5 a6 (хеш3) 4. Ba4 Nf6 (хеш4) 5. O-O Bc5

    теперь просто сравниваем текущий хеш с хеш1, хеш2, хеш3 и хеш4.

    Что тут чистить? И на что тратить память? Запомнить текущий вариант сложно?
  26. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.491
    Симпатии:
    3.119
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Я бы даже сказал, только с хеш3 и хеш4 - до движения пешки.
  27. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    А я бы сказал что только с Хеш3!
    Попробуй двумz ходами (одним белых и одним черных) повторить предыдущую позицию :)
  28. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.491
    Симпатии:
    3.119
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    И то верно, одного хеш3 достаточно.
    Кто меньше? :D
  29. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Пример не очень удачный. Представьте что нет ни взятий ни пешечных ходов.
    Стоит пропустить предыдущую позицию (хеш4), т.к. ее никак не повторим. Затем просматриваем до 50 позиций, пока не встретим совпадение хеш-ключей, либо наткнемся на необратимый ход (пешки, взятие, рокировка).
  30. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.491
    Симпатии:
    3.119
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Можно и меньше, только если права на рокировку сначала проверять.
  31. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Я сделал с указателем, но конечно удобней вместо указателя сделать признак.
    Взятие/Ход пешки/Пропуск взятия на проходе/рокировка/потеря рокировки/пустой ход.
    Вроде всё перечислил :)
  32. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Можно смотреть все позиции до первого "ключевого" (или как его лучше назвать?) хода.
    Так как больше 50 всё-равно посмотреть не сможем - сработает ничья по правилу 50-ти ходов.
    Просто проверку на ничью по правилу 50 ходов сделать перед проверкой на повторение.
  33. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    А я как раз проверку на 50 совместил с контролем повторений. Если не нашли никаких повторений и необратимых ходов в течении 50 ходов, то ничья.
  34. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Так дольше :) У меня указатели, так что вычтя один из другого я сразу могу получить количество ходов. (остается только включить в счет пустой ход, так как насколько я понимаю - для отлеживания повторения на нем нужно останавливаться, а для правила 50 наоборот включать его в счет)
    Только я это не использую, не отслеживаю правило 50 (точнее отслеживаю, но не присваиваю нулевую оценку)- полностью по шахматным правилам будет играть версия 0.09
  35. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Не понял почему дольше? Ведь повторы все равно отлавливать нужно. Плюс к ним я бесплатно получаю правило 50 ходов. Хотя вообще проверка этого правила в любом случае на скорость не может повлиять.

Поделиться этой страницей