Что такое Null move?

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

  1. TopicStarter Overlay

    Edwards Старожил

    • Ветеран
    • Старожил
    Рег.:
    11.02.2006
    Сообщения:
    6.327
    Симпатии:
    323
    Репутация:
    21
    Адрес:
    CПб
    Оффлайн
    Ещё вопрос к знатокам.
    Корректно ли следующее примерное описание механизма null move?
    Оно таково:

    Играем белыми.
    Имеем такую позицию с очередью хода за белыми:

    Имеем её оценку по ОФ - предположим, "+0.15".
    Имеем 21 возможный ход белых здесь.

    Далее.
    Перед тем, как начинать основной перебор, производим перебор по null-move.
    То есть, рассматриваем все возможные "двух-ходовки" белых - их примерно 21^2 (на самом деле несколько больше). Получаем позиции (в количестве 21^2) и оцениваем их по ОФ.
    Среди прочих первых ходов белых, мы рассмотрим ход 1.Ng1. Т.е. рассмотрим ход 1.Ng1 плюс ещё один ход белых. В "ветке" 1.Ng1 лучшую оценку мы получим, предположим, для сочетания 1.Ng1 2.Nf3. Это будет та же позиция, что и наша исходная, но уже при ходе чёрных. Её оценка, соответственно, будет, скажем, "-0.10".

    Таким образом, мы выяснили, что при ходе 1.Ng1 любой второй подряд ход белых даст нам оценку меньшую, чем оценка исходной позиции (-0.10 < +0.15).
    Именно на этом основании, приступая к основному перебору, мы исключаем ход 1.Ng1 из рассмотрения, перебираем лишь 20 возможных ходов белых здесь (а не 21).
  2. Skipper_NORTON Старожил

    • Участник
    • Старожил
    Рег.:
    14.12.2007
    Сообщения:
    515
    Симпатии:
    4
    Репутация:
    0
    Оффлайн
    В этой позиции ход белых... Перед тем, как начинать основной перебор, производим перебор по null-move. Значит белые не ходят - т.е. пропускают ход ("делают" нулевой). Значит в этом переборе вашем ходить должны ЧЕРНЫЕ 2-й раз. Поэтому, ваше —

    Неверно, т.к. второй подряд ход будет У ЧЕРНЫХ а не у белых.
  3. Skipper_NORTON Старожил

    • Участник
    • Старожил
    Рег.:
    14.12.2007
    Сообщения:
    515
    Симпатии:
    4
    Репутация:
    0
    Оффлайн
    Edwards

    Т.е. вы неправильную позицию выбрали для рассмотрения. Дело в том, что мы запускаем вспомогательный перебор по нулевому ходу, НЕ ДО двухходовки одной из сторон как вы сказали, а уже после сделанного одной из сторон 1-го хода из этих двух. И именно в этот момент если вторая сторона пропустит ход и дальше получим определенную оценку, именно из той позиции отработает альфа-бета отсечение. Это нужно рисовать дерево с узлами чтобы было нагляднее, так без картинки трудновато многим понять...
  4. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    нулевой ход вызывается при глубине depth >= 2
    на 1 ходе нулевой не вызывается
  5. дуп Учаcтник

    • Участник
    Рег.:
    11.09.2007
    Сообщения:
    113
    Симпатии:
    0
    Репутация:
    0
    Адрес:
    Великий Новгород
    Оффлайн
    А во-вторых вы действительно выбрали неудачную позицию. WC же писал, что для применения нулевого хода "позиция должна быть достаточно хороша для нас". А у вас она практически равная. Здесь его применять нет никакого смысла.
    IMHO А вообще то я не уверен. Сейчас глянул в Стрелку, а там этот null_move фигачит почти в каждом узле.
  6. TopicStarter Overlay

    Edwards Старожил

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

    Ну, предположим, что в моей позиции
    (я пока всё же её использую, если не возражаете. По-моему, дальнейшие рассуждения будут справедливы для всякой позиции, в которой ход за белыми)
    имеется за чёрных какой-то жутко неудачный ход. Ну, например, ход 1...h7-h5. Вот такая у нас ОФ, предположим, для которой это ослабление - 1...h5 - хуже смерти.

    Ну, что? ну посчитали мы все "вторые подряд" ходы чёрных. Ну, допустим, выяснили, что при любых ходах оценка за чёрных растёт, а при ходе 1...h5 падает. Ну, и что?
    Дальше-то ведь нам надо свой ход (белых) искать.
    Мы, что, в ответ на любой наш ход не будем рассматривать ответ 1...h5 ?
    Таким образом, что ли, отсекаем?
    Выглядит сомнительно.
    Понятно же, что теоретически при некоторых наших ходах как раз 1...h5 может вдруг оказаться уместным за чёрных.

    Так что, что-то Вы меня совсем обескуражили, Skipper_NORTON... :(
  7. WinPooh В.М.

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

    Edwards, попробуйте ещё раз для себя удостовериться, что Вы полностью поняли идеологию бета-отсечений. Можете ли Вы объяснить их незнающему человеку в двух-трёх предложениях?
  8. TopicStarter Overlay

    Edwards Старожил

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


    Эх, жаль, что Вы не делаете картинок, Skipper_NORTON!
    Чувствуется, что у Вас имеется вкус к объяснению всего этого - наверняка Вы смогли бы пояснить всё внятно...

    А я вот умею картинки делать... Но я - ни черта не понимаю! :D Такая вот ирония судьбы... :(
  9. WinPooh В.М.

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

    1. Смотрим из корня ход 1. e4. Рассматриваем все ответы чёрных (20 штук), и находим, что при лучшем ответе чёрных мы имеем +0.15 (ну вот такая у нас оценка, слегка несимметричная, или с бонусом за право хода...)

    2. Смотрим из того же корня ход 1. Na3. Даём чёрным "потоптаться на месте" - черные делают нулевой ход, мы оцениваем позицию за белых... Ага, получили +0.05. А это меньше, чем +0.15. Всё, остальные 20 ходов за чёрных в ответ на 1. Na3 можно не смотреть - очевидно, что если им дать пойти, ход 1. Na3 принесёт нам ещё меньше очков. То есть он хуже, чем 1. e4.

    3. Мы только что опровергли ход 1. Na3 нулевым ходом чёрных.
  10. TopicStarter Overlay

    Edwards Старожил

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

    А это какой-то принципиальный момент - или просто такова практика?
    Т.е. возможно ли использование алгоритма null move на глубине один или оно там принципиально невозможно?
  11. TopicStarter Overlay

    Edwards Старожил

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

    Очень интересно, спасибо.

    Т.е. получается в null move речь идёт вовсе не о "двухходовках" никаких, а о пропуске хода, о передаче очереди хода?

    Дальше.
    Из Вашего примера, WinPooh, не совсем ясно, почему в отношении 1.e4 мы честно произвели полный перебор, а в отношении 1.Na3 - null move.
    Видимо, нужно уточнить так, что в отношении всех ходов мы сначала делаем null move (в том числе и в отношении 1.e4).
    Т.е. мы фактически осуществляем полный перебор, но в каждой ветке (например, в ветке 1.е4) начинаем его с оценки нулевого ответа чёрных.
    Воот.
    И если нам так повезло, что ветка 1.е4 стояла у нас в очереди на перебор раньше, чем ветка 1.Na3... То мы имеем наш навар. Оценив один пустой ответ чёрных на 1.Na3 - мы уже можем диагносцировать, что 1.Na3 хуже, чем 1.е4.
    Я правильно интерпретирую Ваш пример, WinPooh?
  12. WinPooh В.М.

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

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

    Нам нужна конечная бета. И в этой роли выступит величина -0.15 (с точки зрения чёрных - поэтому с минусом). А получили мы её, только рассмотрев и оценив 1.e4.
  14. TopicStarter Overlay

    Edwards Старожил

    • Ветеран
    • Старожил
    Рег.:
    11.02.2006
    Сообщения:
    6.327
    Симпатии:
    323
    Репутация:
    21
    Адрес:
    CПб
    Оффлайн
    Думаете, мне стоит открыть ещё одну тему - "Что такое бета-отсечения?" :)
    А что, я могу! :D
  15. Осипов Юрий Учаcтник

    • Участник
    Рег.:
    18.06.2007
    Сообщения:
    399
    Симпатии:
    475
    Репутация:
    11
    Адрес:
    Правда
    Оффлайн
    Edwards, похоже Вы не понимаете самых азов минимакса. Дело в том, что в корневых узлах дерева вариантов (т.е. тех узлах, где мы еще не достигли заданной глубины, и будем делать ходы) нас совершенно не интересует оценка узла как такового. Оценка узла определяется как МАКСИМУМ из оценок всех дочерних узлов, т.е. ПОСЛЕ выполненных ходов. А оценка дочерних узлов определяется как МИНИМУМ из оценок всех следующих дочерних узлов. И так до тех пор, пока мы не дойдем до терминальных узлов, из которых мы уже не делаем никаких ходов (просто потому, что достигли заданной глубины). В этих терминальных узлах мы и вычисляем оценку как таковую. А потом поднимаем эту оценку от терминальных узлов к своим предкам. И только после этого у нас возникают те самые альфа и бета условия, которые позволяют не рассматривать ненужные варианты. И только тогда начинает работать эвристика нулевого хода и все остальные эвристики.
  16. TopicStarter Overlay

    Edwards Старожил

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

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

    Сорри за оффтоп.
  17. TopicStarter Overlay

    Edwards Старожил

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

    ...то чисто теоретически, я не вполне понимаю, да, почему эвристика обязана начинать работать лишь после минимакса.
    Я вот в первом посте привёл пример, мне кажется, осмысленной эвристики, работающей до минимакса.
    Возможно, это пример неудачен, слаб и хил. Но я пока не вижу почему...

    Впрочем, это мы уже отвлекаемся.

    В общем-то я готов удовлетвориться ознакомлением с существующим порядком вещей. Без углубления в дебри возможного.
  18. TopicStarter Overlay

    Edwards Старожил

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

    Можете навскидку дать определение понятия "бета"?
  19. WinPooh В.М.

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

    Как ищут максимум из нескольких чисел? Ставят некоторую временную переменную tmp в гарантированно меньшее значение, и начинают по одному перебирать числа. Как только очередное число больше tmp - выполняют присваивание: tmp = новое число. После прохода по всем числам в tmp будет максимум.

    В нашем случае tmp - это и есть альфа. И до рассмотрения (до конца варианта!) хотя бы одного из возможных ходов мы ничего не можем сказать об оценке узла.

    Теперь определение бета. Бета - это текущее значение альфа для родительского узла, взятое с обратным знаком.

    Проще говоря: в каждом узле мы пытаемся найти такой ход, который повысит альфу. Но если мы видим, что у нас это получается как-то слишком хорошо, и мы можем даже превысить бету, мы говорим: стоп, так не бывает! Раз у нас тут всё идёт так замечательно, значит, противник просто не даст нам попасть в эту позицию, и выберет в родительском узле другой ход. Давайте-ка сворачиваться, незачем больше тратить время на рассмотрение остальных ходов. Это и есть бета-отсечение.
  20. WildCat Коршунов Игорь

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

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
  22. Mustitz Заслуженный

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

    Получаем примерно следующее:

    1. В начальном продолжении перебираем все хода и оцениваем позицию. Получили грубо говоря
    1. Nf3 (+0.10) 1. d4 (+0.09) ... 1. Na3 (+0.01)

    2. Рассматриваем все ответы на 1. Ng1-f3. Null move не используется. Получили оценку +0.05

    3. Рассматриваем 1. d2-d4. Null move даст оценку +0.12. Надо перебирать дальше. Допустим, оценка будет +0.06

    ...

    N. Рассматриваем 1. Nb1-a3. Null move дает оценку +0.04. Бросаем это гиблое дело.
  23. DenKa Старожил

    • Участник
    • Старожил
    Рег.:
    17.02.2007
    Сообщения:
    830
    Симпатии:
    10
    Репутация:
    0
    Оффлайн
    А если после 1.Na3 черные в цуцванге?
  24. Mustitz Заслуженный

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

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