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

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

  1. TopicStarter Overlay

    Edwards Старожил

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

    • Команда форума
    Рег.:
    04.05.2007
    Сообщения:
    2.344
    Симпатии:
    7
    Репутация:
    0
    Оффлайн
    Ну согласно логики программирования, обычно используются алгоритмы с отсечением. Имхо если бы был реализован полный перебор то сила одного движка не отличалась бы сильно от силы другого.

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

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    30.09.2006
    Сообщения:
    3.546
    Симпатии:
    1.265
    Репутация:
    36
    Адрес:
    Киев
    Оффлайн
    Используется альфа-бета отсечения. Общий смысл примерно такое:

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

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

    Edwards Старожил

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

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

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

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    30.09.2006
    Сообщения:
    3.546
    Симпатии:
    1.265
    Репутация:
    36
    Адрес:
    Киев
    Оффлайн
    На самом деле там еще много нюансов. Например, выборочное продление вариантов, форсированные варианты, порядок перебора ходов и т. п. Так что глубина перебора это весьма условное понятие
  8. WildCat Коршунов Игорь

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

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

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    слабо сказано :)
    у меня как-то при глубине в 12, рыбина выдала ПВ-линию с глубиной под 40!
  11. TopicStarter Overlay

    Edwards Старожил

    • Ветеран
    • Старожил
    Рег.:
    11.02.2006
    Сообщения:
    6.327
    Симпатии:
    323
    Репутация:
    21
    Адрес:
    CПб
    Оффлайн
    Mustitz, спасибо!

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

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

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Так быть не может. Процедура расчёта, в общих чертах, такова:

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

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

    Edwards Старожил

    • Ветеран
    • Старожил
    Рег.:
    11.02.2006
    Сообщения:
    6.327
    Симпатии:
    323
    Репутация:
    21
    Адрес:
    CПб
    Оффлайн
    Ага, спасибо.
  14. WinPooh В.М.

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

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    57.245
    Симпатии:
    21.136
    Репутация:
    628
    Адрес:
    Москва, Россия
    Оффлайн
    "Чайнический вопрос по работе шахматных программ"

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

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

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

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

    Edwards Старожил

    • Ветеран
    • Старожил
    Рег.:
    11.02.2006
    Сообщения:
    6.327
    Симпатии:
    323
    Репутация:
    21
    Адрес:
    CПб
    Оффлайн
    Что не так?
    Правильно "чайниковский"?
    Может быть.
    Но не факт.
    Наш критик пока не озаботился никакими обоснованиями своей корявой претензии :D
  18. stirlitz Заслуженный

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

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

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

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

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    13.02.2006
    Сообщения:
    7.869
    Симпатии:
    274
    Репутация:
    13
    Оффлайн
    Тогда вопрос - а что такое одна итерация?

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

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

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

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    13.02.2006
    Сообщения:
    7.869
    Симпатии:
    274
    Репутация:
    13
    Оффлайн
    Сорри, но нельзя ли с чайниками не пойти в тему по русскому языку? Здесь эта дискуссия - оффтоп. :)
  25. Crest Админ, МГ

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    57.245
    Симпатии:
    21.136
    Репутация:
    628
    Адрес:
    Москва, Россия
    Оффлайн
    Согласен. Уходим... Вместе с чайникми! :)
  26. TopicStarter Overlay

    Edwards Старожил

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

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

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

    • Участник
    Рег.:
    29.12.2009
    Сообщения:
    217
    Симпатии:
    1
    Репутация:
    0
    Адрес:
    Санкт-Петербург
    Оффлайн
    Хм.. в каком смысле и на каком основании? То ли чего-то я не догоняю, то ли формулировка не та :/ Вы имеете в виду, что прога проверяет единовременно только одну линию, чтобы память не забивалась?
  28. WildCat Коршунов Игорь

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

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

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

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

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

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

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    2.201
    Симпатии:
    64
    Репутация:
    3
    Оффлайн
    Вот как Таль реализует "нулевой ход" в Широве. :)

  32. TopicStarter Overlay

    Edwards Старожил

    • Ветеран
    • Старожил
    Рег.:
    11.02.2006
    Сообщения:
    6.327
    Симпатии:
    323
    Репутация:
    21
    Адрес:
    CПб
    Оффлайн
    У меня был реализован другой алгоритм называния темы, WildCat :D

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

    Edwards Старожил

    • Ветеран
    • Старожил
    Рег.:
    11.02.2006
    Сообщения:
    6.327
    Симпатии:
    323
    Репутация:
    21
    Адрес:
    CПб
    Оффлайн
    Насколько я понял, в случае альфа-бета отсечений забракованный ход бракуется всё же лишь тогда, когда хотя бы одна вариантная цепочка в этой, бракуемой ветке досчитана на глубину 12 (не на 9).
    Если я не прав - поправьте.

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

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

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Значит нужно переименовать ветку в "Вопросы чайников". Я правильно понял?

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

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

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