Перебирают ли движки все возможные позиции на заданную глубину?

Тема в разделе "Машинное отделение", создана пользователем Edwards, 23 янв 2010.

  1. Edwards
    Оффлайн

    Edwards Старожил

    Репутация:
    21
    Извините за чайнический :) вопрос.
    Подскажите, плиз, следующее.
    Правильно ли я себе представляю, что если "Рыбка" пишет, что проанализировала позицию на глубину в 12 полуходов - это значит, что она действительно перебрала (и оценила) все возможные различные финальные позиции, возникающие из данной на глубине в эти самые 12 полуходов?
    Или же некоторые варианты она отбрасывает, "бракует", не досчитывая до конца, до мата (или теор. ничьей)?
     
  2. phisey
    Оффлайн

    phisey Модератор

    Репутация:
    0
    Ну согласно логики программирования, обычно используются алгоритмы с отсечением. Имхо если бы был реализован полный перебор то сила одного движка не отличалась бы сильно от силы другого.

    Свое мнение основываю на прочтении книги Корнилов Е.Н. Программирование шахмат и других логических игр
    http://www.sprinter.ru/books/1850816.html
     
  3. Mustitz
    Оффлайн

    Mustitz баннер

    Репутация:
    36
    Используется альфа-бета отсечения. Общий смысл примерно такое:

    белые ходят 1. Bxh7+ им выигрывают ладью (оценка +5)
    белые ходят 1. h3 черные отвечают 1... g6 и получается оценка (+0.5).

    В этом случае происходит отсечение ненужных веток, и остальные ответы черных на ход 1. h3 не рассматриваются. Да, допустим что черные в варианте 1. h3 Qxg2# матуют (т. е. оценка может быть насколько угодно меньше +0.5). Но все равно это лишняя работа, потому что оценку исходной позиции (минимум +5) это не изменит.
     
  4. Edwards
    Оффлайн

    Edwards Старожил

    Репутация:
    21
    Ну, теоретически как минимум разница в оценочных функциях может влечь за собой разницу в силе игры.
    Если программа А на каждом ходу оценивает позицию на 0,01 пешки точнее, правильнее, чем программа Б, то в итоге у А, вероятно, неплохие шансы выиграть партию.
     
  5. phisey
    Оффлайн

    phisey Модератор

    Репутация:
    0
    Ага, различие было бы в оценке позиции. Замечание верно.
    Хотя, имхо, предел 0,01 ничего бы не решил :) 0,1 еще куда ни шло
     
  6. Кузьмич
    Оффлайн

    Кузьмич Никита

    Репутация:
    0
    Как раз Рыба, как я понимаю, выдаёт неправильные значения глубины и собственной скорости - она в этом плане уникум. Считает она гораздо быстрее и больше, чем пишет.
     
  7. Mustitz
    Оффлайн

    Mustitz баннер

    Репутация:
    36
    На самом деле там еще много нюансов. Например, выборочное продление вариантов, форсированные варианты, порядок перебора ходов и т. п. Так что глубина перебора это весьма условное понятие
     
  8. WildCat
    Оффлайн

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

    Репутация:
    0
    Нет, на эту глубину (12 - по-рыбкиному означает 15, вроде бы) просчитано сравнительно мало вариантов. Очень много отброшено за неперспективностью. Но длина главного варианта не менее 15 (а часто даже и более).
     
  9. Мобуту
    Оффлайн

    Мобуту спаситель нации баннер

    Репутация:
    141
    Просчитать всё на 12 полуходов - это значит, без учёта перестановок, перебрать ~30^12 позиций - если считать, что в каждый момент есть выбор из 30 ходов. Многовато будет. Но отдельные варианты при глубине 12 Рыбка наверняка при этом смотрит не то что на 12 или 15 полуходов - гораздо глубже. Особенно если там взятия, шахи и т.п.
     
  10. bankuss
    Оффлайн

    bankuss Александр баннер

    Репутация:
    6
    слабо сказано :)
    у меня как-то при глубине в 12, рыбина выдала ПВ-линию с глубиной под 40!
     
  11. Edwards
    Оффлайн

    Edwards Старожил

    Репутация:
    21
    Mustitz, спасибо!

    А неперспективность варианта всегда определяется именно по Mustitz'y - т.е. через совершенно рациональную процедуру, при которой считать данную ветку очевидно бессмысленно?

    Я не уверен, что мой вопрос понятен :(
    Попробую переформулировать так.
    Может ли "Рыбка" "бросить" расчёт какого-то разветвления на "пол-дороге"?
    Допустим, изначально у неё есть равная позиция, она уже посчитала какой-то солидный ход-кандидат на глубину 12, получила оценку +0,20; и вот считает следующий, получает на глубине, условно, 9 в нём оценку -5.00 и обрывает расчёт. Может такое быть?
     
  12. WinPooh
    Оффлайн

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

    Репутация:
    95
    Так быть не может. Процедура расчёта, в общих чертах, такова:

    1. Считаем ВСЕ ходы на глубину 1.
    2. Считаем ВСЕ ходы на глубину 2 (какие-то при этом очень быстро отбрасываем)
    ...
    9. Считаем ВСЕ ходы на глубину 9 (какие-то при этом очень быстро отбрасываем)
    ...
    12. Считаем ВСЕ ходы на глубину 12 (какие-то при этом очень быстро отбрасываем)

    То есть к моменту, когда первый ход считаем на глубину 12 - все прочие посчитаны уже не меньше, чем на 11.
     
  13. Edwards
    Оффлайн

    Edwards Старожил

    Репутация:
    21
    Ага, спасибо.
     
  14. WinPooh
    Оффлайн

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

    Репутация:
    95
    Другое дело, что при каждой очередной итерации на заданную глубину - скажем, 12 - отсечение в некоторых ветвях может произойти, вообще говоря, и на глубине 9. По нулевому ходу, например. Так что ответ в известном смысле - и да, и нет.
     
  15. Crest
    Оффлайн

    Crest Админ, МГ Команда форума Команда форума

    Репутация:
    628
    "Чайнический вопрос по работе шахматных программ"

    Для человека, который активен в теме "пишем правильно", несолидно писать столь коряво.

    Наверняка можно сформулировать аккуратнее. Например,
    "Вопрос чайника по работе шахматных программ". Кстати, короче получается.
    В этом случае удалось бы предположить, что автор силен в русском. :)
     
  16. WildCat
    Оффлайн

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

    Репутация:
    0
    Бессмысленные ветки отсекаются само-собой. Т.е. те, которые даже теоретически не могут изменить оценку.

    Но и весьма сильно отсекаются варианты, без строгих оснований, т.к. прога считает вероятность чего-то интересного в данном варианте мизерной.
     
  17. Edwards
    Оффлайн

    Edwards Старожил

    Репутация:
    21
    Что не так?
    Правильно "чайниковский"?
    Может быть.
    Но не факт.
    Наш критик пока не озаботился никакими обоснованиями своей корявой претензии :D
     
  18. stirlitz
    Оффлайн

    stirlitz баннер

    Репутация:
    13
    А когда, в какой момент прога делает ход в игровом режиме? Что служит формальным признаком того, что анализ пора закончить и надо ходить? И всегда ли она выбирает "первую линию"?
     
  19. Crest
    Оффлайн

    Crest Админ, МГ Команда форума Команда форума

    Репутация:
    628
    А какие еще нужны обоснования?
    Достаточно того, что слова "чайнический" в русском языке пока нет. Как и "чайниковский".
    И правильный вариант тоже был указан...
    Кичимся своим косноязычием и необразованностью? Тогда не надо читать лекции по русскому языку в теме "пишем правильно". Тот, кто смеет учить, должен прежде всего требовательно относиться к себе.
    И никакие смайлики не исправят ошибки. :p
     
  20. WinPooh
    Оффлайн

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

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

    Если играем в полную силу - да, по первой линии. В режимах с гандикапом - может быть сделано как угодно.
    Вообще, поиск в игровом режиме - это одна только первая линия, остальных не существует и не подразумевается - т.е. они сразу же отбрасываются.
     
  21. stirlitz
    Оффлайн

    stirlitz баннер

    Репутация:
    13
    Тогда вопрос - а что такое одна итерация?

    Т.е. если две проги запустить несколько раз играть одну и ту же позицию - они по идее должны будут повторять одну и ту же партию? Но реально по-моему этого не происходит...
     
  22. Мобуту
    Оффлайн

    Мобуту спаситель нации баннер

    Репутация:
    141
    Не знаю тонкостей, но на вид - слово "чайниковский" возникает по всем правилам языка, как только "чайник" становится одушевлённым. И это одушевление давно уж произошло, сколько бы консерваторы не возражали. Ну турнире: вижу кого? Вижу чайников. А не "вижу чайники".
     
  23. Crest
    Оффлайн

    Crest Админ, МГ Команда форума Команда форума

    Репутация:
    628
    Более того, можно даже видеть много чайников. Как неодушевленных, с носиками, так и одушевленных - чайников в русском языке. :)
    А тупое образование формально по правилам русского языка во многих случаях легко и просто выводит за рамки оного. Что и случилось в данном случае.
     
  24. stirlitz
    Оффлайн

    stirlitz баннер

    Репутация:
    13
    Сорри, но нельзя ли с чайниками не пойти в тему по русскому языку? Здесь эта дискуссия - оффтоп. :)
     
  25. Crest
    Оффлайн

    Crest Админ, МГ Команда форума Команда форума

    Репутация:
    628
    Согласен. Уходим... Вместе с чайникми! :)
     
  26. Edwards
    Оффлайн

    Edwards Старожил

    Репутация:
    21
    Вот это уже интересно.
    Чтоб не докучать вам, сэнсэям просьбами рассказать мне о том, что такое "нулевой ход" - стал гуглить самостоятельно. Нарыл, кажется, неплохую с точки зрения ликбеза статью - Алгоритмы шахматных программ

    Всё-таки полной ясности у меня пока не возникло :(

    Эх, хорошо б по-Мустицевски, "на пальцах" пояснили, что значит "отсечение может произойти и на глубине 9"...
     
  27. Кузьмич
    Оффлайн

    Кузьмич Никита

    Репутация:
    0
    Хм.. в каком смысле и на каком основании? То ли чего-то я не догоняю, то ли формулировка не та :/ Вы имеете в виду, что прога проверяет единовременно только одну линию, чтобы память не забивалась?
     
  28. WildCat
    Оффлайн

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

    Репутация:
    0
    Сказывается влияние работы ОС (особенно при использовании нескольких ядер) и других посторонних факторов. Кроме того, некоторая случайность может быть изначально заложена алгоритмически.

    Имеется в виду, что проги в игровом режиме никогда не выясняют какая именно линия является второй. Для игры нужна только первая линия - она и считается.

    Из каких-то своих соображений прога считает, что рассматриваемая линия имеет слишком мало шансов стать первой, поэтому досчитывать ее до конца будет лишь потерей времени. В случае альфа-бета отсечений линия теоретически не может стать первой. Но очень много линий отсекается без теоретически строгих оснований, когда есть просто достаточно серьезные основания считать вероятность линии стать первой незначительной.
    Подобрать критерии для таких вероятностных отсечений это весьма нетривиальная задача.
     
  29. WildCat
    Оффлайн

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

    Репутация:
    0
    Вообще-то название топика должно информативно отражать его тему. "Чайнический вопрос" совершенно не раскрывает суть вопроса.

    "Перебирают ли движки все возможные позиции на заданную глубину?" - сразу понятно о чем в топике речь.
     
  30. Yurpol
    Оффлайн

    Yurpol Polovnikov Yury

    Репутация:
    0
    А чайнику (да и не чайнику тоже) то зачем всё это надо знать? Хотит докопаться до истины: Что появилось раньше курица или яйцо? :|
     
  31. Fruit
    Оффлайн

    Fruit Александр баннер

    Репутация:
    3
    Вот как Таль реализует "нулевой ход" в Широве. :)

     
  32. Edwards
    Оффлайн

    Edwards Старожил

    Репутация:
    21
    У меня был реализован другой алгоритм называния темы, WildCat :D

    Я исходил из того, что получив ответ на первый вопрос, я (и не только я) смогу тут продолжать задавать чайнические вопросы :)
     
  33. Edwards
    Оффлайн

    Edwards Старожил

    Репутация:
    21
    Насколько я понял, в случае альфа-бета отсечений забракованный ход бракуется всё же лишь тогда, когда хотя бы одна вариантная цепочка в этой, бракуемой ветке досчитана на глубину 12 (не на 9).
    Если я не прав - поправьте.

    А вот про
    "есть просто достаточно серьезные основания считать вероятность линии стать первой незначительной"
    - вот это очень интересно. Собственно, по сути об этом и был мой первоначальный вопрос.
    И о том, готова ли программа доверять этому шаманству уже на глубине 9, неужели она не станет проверять его на глубине 12?
     
  34. WinPooh
    Оффлайн

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

    Репутация:
    95
    Да, готова. Но на следующей итерации, когда основной вариант будет считаться на 13, шаманство в побочном варианте наступит уже на глубине 10, а не 9. То есть постепенное уточнение с итерациями идёт даже для отсекаемых вариантов (вдруг они внезапно окажутся не столь плохими), но для PV (главной линии) оно идёт быстрее.
     
  35. WildCat
    Оффлайн

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

    Репутация:
    0
    Значит нужно переименовать ветку в "Вопросы чайников". Я правильно понял?

    Глубина проверки зависит от многих факторов.
    Если будет интересно, могу сделать статистику на какой глубине обрываются варианты для своей программы.

    Да, ход бракуется только если уже рассмотрен хотя бы один опровергающий вариант на должную глубину, т.к. нет смысла искать более сильное опровержение.