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

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

  1. Kirr
    Оффлайн

    Kirr Команда форума Команда форума

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

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

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

    NS Нефёдов Сергей баннер

    Репутация:
    3
    А можно составить табличку по количеству ходов до первого хода пешки/взятия?
     
  3. Kirr
    Оффлайн

    Kirr Команда форума Команда форума

    Репутация:
    8
    Можно, но сложно, так как для этого нужны таблицы в метрике DTZ. Это если коротко и если я правильно понял что вы имеете ввиду.

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

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

    NS Нефёдов Сергей баннер

    Репутация:
    3
    Меня интересует Взятие именно с той точки зрения что Вы и подумали :)
    С точки зрения правила N (частный случай 50) ходов. Это есно линия не кратчайшая к мату. А кратчайшая к выигранной позиции более высокого ранга. Где под позицией Более высокого ранга понимаем позицию с
    1. Меньшим количеством пешек.
    2. Меньшим количеством фигур на доске.
    3. С более продвинутыми пешками.
     
  5. Kirr
    Оффлайн

    Kirr Команда форума Команда форума

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

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

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

    NS Нефёдов Сергей баннер

    Репутация:
    3
    А где можно прочитать про формат таблиц Налимова?
     
  7. Kirr
    Оффлайн

    Kirr Команда форума Команда форума

    Репутация:
    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. Муркенштейн
    Оффлайн

    Муркенштейн Гастролёр

    Репутация:
    2
    Как я понимаю, при этом N будет жёстко фиксированным и для каждого N нужны будут отдельные таблицы?
     
  9. Kirr
    Оффлайн

    Kirr Команда форума Команда форума

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

    NS Нефёдов Сергей баннер

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

    Booot Учаcтник

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

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

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

    NS Нефёдов Сергей баннер

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

    Kirr Команда форума Команда форума

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

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

    Спасибо! :)
     
  14. atoku
    Оффлайн

    atoku Модератор

    Репутация:
    0
    Да, действительно, ведь когда расчет подходит к табличным, то происходит взятие, а значит счетчик обнуляется! В итоге такой простой метод, как объявление ничейными позиций, где выигрыш вне правила 50 ходов будет работать. Тут есть трудность у составителя таблиц, так как видимо есть много позиций, где выигрыш достигается дольше чем 50 ходов, но при этом путь идет через взятия или продвижения пешек. То есть таблицы по хорошему надо все пересматривать.

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

    NS Нефёдов Сергей баннер

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

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

    atoku Модератор

    Репутация:
    0
    Я не об этом, а о трехкратном повторении позиции - о правиле ничьи в этом случае.
     
  17. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    Хранишь Хеши позиций встретившихся в партии, и начиная с последнего взятия/хода пешки начинаешь сравнивать Хеш встретившейся в партии позиции с хешем текущей. (есно имеет сравнивать позиции только с той-же очередью хода)
     
  18. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

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

    atoku Модератор

    Репутация:
    0
    Нет, вопрос был оффтопиком. С таблицами все более или менее ясно. Я спрашивал про движки. Как вопрос повторения позиции решается в движках!
     
  20. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

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

    atoku Модератор

    Репутация:
    0
    Даже пусть плохо... но как? Как я описал? Или есть что-то более перспективное?
     
  22. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    NS написал как это все делают (пост №17).
     
  23. atoku
    Оффлайн

    atoku Модератор

    Репутация:
    0
    А что хэш не чистится что-ли по ходу счета? А если не хватит памяти?
     
  24. NS
    Оффлайн

    NS Нефёдов Сергей баннер

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

    Ну со вторым указателем понятно...
     
  25. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    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
    Оффлайн

    WinPooh В.М. Команда форума

    Репутация:
    95
    Я бы даже сказал, только с хеш3 и хеш4 - до движения пешки.
     
  27. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    А я бы сказал что только с Хеш3!
    Попробуй двумz ходами (одним белых и одним черных) повторить предыдущую позицию :)
     
  28. WinPooh
    Оффлайн

    WinPooh В.М. Команда форума

    Репутация:
    95
    И то верно, одного хеш3 достаточно.
    Кто меньше? :D
     
  29. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

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

    WinPooh В.М. Команда форума

    Репутация:
    95
    Можно и меньше, только если права на рокировку сначала проверять.
     
  31. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    Я сделал с указателем, но конечно удобней вместо указателя сделать признак.
    Взятие/Ход пешки/Пропуск взятия на проходе/рокировка/потеря рокировки/пустой ход.
    Вроде всё перечислил :)
     
  32. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    Можно смотреть все позиции до первого "ключевого" (или как его лучше назвать?) хода.
    Так как больше 50 всё-равно посмотреть не сможем - сработает ничья по правилу 50-ти ходов.
    Просто проверку на ничью по правилу 50 ходов сделать перед проверкой на повторение.
     
  33. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    А я как раз проверку на 50 совместил с контролем повторений. Если не нашли никаких повторений и необратимых ходов в течении 50 ходов, то ничья.
     
  34. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    Так дольше :) У меня указатели, так что вычтя один из другого я сразу могу получить количество ходов. (остается только включить в счет пустой ход, так как насколько я понимаю - для отлеживания повторения на нем нужно останавливаться, а для правила 50 наоборот включать его в счет)
    Только я это не использую, не отслеживаю правило 50 (точнее отслеживаю, но не присваиваю нулевую оценку)- полностью по шахматным правилам будет играть версия 0.09
     
  35. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    Не понял почему дольше? Ведь повторы все равно отлавливать нужно. Плюс к ним я бесплатно получаю правило 50 ходов. Хотя вообще проверка этого правила в любом случае на скорость не может повлиять.