Использование времени соперника (ponder)

Тема в разделе "Машинное отделение", создана пользователем WildCat, 25 ноя 2006.

  1. TopicStarter Overlay

    WildCat Коршунов Игорь

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

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

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

    В процессе обдумывания за время соперника запоминаем время потребовавшееся для завершения текущего Depth.
    Если, когда соперник выполнил ход - это время превышает рассчитанную величину минимального времени на обдумывание (Время на котором завершаем перебор при завершении текущего Depth) - то выполняем ход сразу.

    На контрольном ходе надо наверно в любом случае использовать всё время (МинимальноеВремя=Аварийка)

    При 50% угадывании Физический предел роста силы от Пондера - где-то 35 пунктов (у нас просто в полтора раза увеличивается общее время)
    Если Кошка прибавляет на 19 пунктов меньше остальных - То значит пондер ей вообще практически ничего не дает...
  3. NS Нефёдов Сергей

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

    Допустим до контроля осталось три хода.
    Времени осталось 1000 мс.

    Допустим у нас ресчет - на три хода Аварийка=ОставшеесяВремя/2, МинимальноеВремя=ОставшеесяВремя/4.

    Depth=0;
    Пока Считаем Цикл
    Depth+=1;
    Перебор(Depth);
    СохраненноеВремя=ТекущееВремяОбдумыванияЗаСчетСОперника;
    КонецЦикла;

    После Того, как соперник сдалал Ход.
    ВремяНаОбдумывание=ПотраченноеСоперникомВремя+1000;
    МинимальноеВремя=ВремяНаОбдумывание/4;
    Аварийка=ВремяНаОбдумывание/2;
    Если СохраненноеВремя>МинимальноеВремя Тогда
    ДелаемХодСразу...


    При сравнении с Аварийкой, и с Минимальным временем - учитываем естественно общее время размышлений над ходом, включая время на обдумывание за счет соперника.
  4. TopicStarter Overlay

    WildCat Коршунов Игорь

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

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    Видимо, когда не угадывает, забивает кеш всякой ерундой. А без пондеринга, кеш еще полезен...
  6. TopicStarter Overlay

    WildCat Коршунов Игорь

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

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

    Эту гипотезу я бы попробовал проверить увеличением кеша. Если увеличение кеша приведет к улучшению игры с пондерингом - значит похоже так оно и есть.
  8. TopicStarter Overlay

    WildCat Коршунов Игорь

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

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    Я не волнуюсь, я лишь предположил. Я не очень внимательно прочитал пост (про то что сравнивалось с другими программами, а не с самой Кошкой). Однако, чем не версия, что другие программы либо угадывают больше, либо кеш организуют по-другому?
  10. TopicStarter Overlay

    WildCat Коршунов Игорь

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

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    А чего хорошего?
    Сколько угадываем мы, столько-же угадывает и соперник :)
    Я всё-таки никак не могу понять расчета.
    Максимальная прибавка от пондера - это прибавка на времени которое предоставляет нам соперник.
    Если процент угадывания - 50%, то максимально возможная прибавка - это та прибавка которую дает увеличение времени (быстродействия) в полтора раза. То есть около 35 пунктов.
    (На самом деле это недостижимый предел, так как Ponder дает неравномерность времени на обдумывание, и поэтому прибавка всегда меньше потолка)
    Если WildCat-у Ponder дает 32 пункта, то терять 19 пунктов по сравнении с другими движками он может только в случае практически 100%-го угадывания, что наверно всё-таки маловероятно :)
  12. TopicStarter Overlay

    WildCat Коршунов Игорь

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

    • Новичок
    Рег.:
    09.01.2007
    Сообщения:
    25
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Всегда хотел спросить.. Нельзя ли сделать pondering таким, чтобы он расчитывал несколько возможных ходов противника, а не только один? Самый "ожидаемый/лучший с точки зрения программы" например 60% времени, второй 30%, третий 10%. Читал, что это сложновато, так как главный вариант ходов в программе один, но есть же например в GUI Фрица возможность включить вычисление нескольких ходов в позиции.
  14. TopicStarter Overlay

    WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Ну допустим мы посчитали их. А что если противник, действительно сделает такой ход? Как нам поможет перебор на 10 - 30% времени? Все равно придется все заново пересчитывать.
  15. spaceman Новичок

    • Новичок
    Рег.:
    09.01.2007
    Сообщения:
    25
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    То есть делается ставка на риск? Но чем "стабильнее" прогамма предугадывает ход, тем же лучше. Часто вижу в партиях между движками, что ожидается как раз не тот ход и всё на смарку. Да и человек думает о нескольких ходах. ;)
  16. NS Нефёдов Сергей

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

    Насчет всё насмарку - попробуйте написать формулу выигрыша времени.
    попробуйте разные варианты вероятности угадать, разные врианты обдумывания (один ход, два хода)
    Тогда поймете что максимальный выигрыш по времени (максимальное использование времени соперника) получается как раз при обдумывании только одного хода - наиболее вероятного ответа соперника.
    То есть - ответа соперника в PV.
  17. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Вот докзательство:
    Пусть вероятность того что соперник сделает первый ход - X1, вероятность что он сделает второй - X2.
    В нашем обдумывании (в Режиме Ponder) доля времени уделяемая первому ходу А, тогда доля времени уделяемая второму ходу (1-А)
    Эффективность использования времени А*Х1+(1-А)*X2 - линейная функция от А, максимальное значение достигается на одном из краев интервала. А=1 в случае если Х1>Х2 (обдумываем только первый ход)
    и А=0 в случае если Х1<Х2 (обдумываем только второй ход)
  18. spaceman Новичок

    • Новичок
    Рег.:
    09.01.2007
    Сообщения:
    25
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Эта формула же для расчёта максимальной выгоды, если программа точно знает, какой ход противника действительно лучший. В зависимости от того, какая вероятность больше, X1 или X2, об этом единственном ходе и стоит программе думать, это понятно. Но ведь есть (довольно большая) вероятность, что вероятности X1 и X2 неверно расчитанны.
    а как это поможет, если был расчитан ход №1 и 10 раз подряд он не попал? я думаю ? меньше.
  19. NS Нефёдов Сергей

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

    WildCat Коршунов Игорь

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

    • Новичок
    Рег.:
    09.01.2007
    Сообщения:
    25
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    О чём я говорю, я понимаю. О чём вы, я может быть не понимаю.

    Вы имеете ввиду, что если хоть что ни будь известно о вероятностях хода, то математически имеет смысл тратить все ресурсы только на размышление самого вероятного, чтобы в данной ситуации сделать наибольшую выгоду.

    Но я, например, замечаю в партиях, что как минимум до ситуации, когда на доске уже большой перевес в одну сторону (и выигрышные ходы более менее ясны), ponder move предугадывется очень редко. Нет ли смысла, хотя бы в дебюте, размышлять о нескольких ходах, когда они оцениваются программой как почти одинаковые? Ведь то, что в раннем дебюте очень многие ходы ни в чём не уступают друг другу, это истина. Математически программе следует рызмышлять над одним определённом, так как он оценивается ею как лучший, но эта оценка в указанном случае неверна.
  22. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Еще раз - неважно какая вероятность на самом деле. Мы должны обдумывать один ход, наиболее вероятный с нашей точки зрения. Даже если 10 ходов имеют вероятность с нашей точки зрения по 10% - взяв любой из них, и обдумывая только его - мы ничего не потерям...
  23. spaceman Новичок

    • Новичок
    Рег.:
    09.01.2007
    Сообщения:
    25
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Не хотелось бы продолжать эту дискуссию вечно. :p

    Но я считаю, что математика (логика) в таком стиле не всегда применима к шахматам. Пример: Делаются 2 хода подряд: один плохой, другой хороший. Второй вариант: 2 хода, оба средние по силе. Среднее арифметическое обоих вариантов одинаково. А что, если после плохого хода в первом варианте сразу мат? Не сходится.

    Так и здесь: Пондер не угадывает первые 4 из 10 ходов и угадал бы все остальные 6, но уже сильно ухудшил позицию и остаётся только проиграть. С обдумыванием по двум ходам этого могло не произойти, игра стабильнее. Может такой вариант только выгоден, когда цель, свести партию вничью. Может, имеет смысл только в дебюте, где в среднем постоянно не угадывается больше 50% ходов.
  24. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Бред какой-то... Из-за того что мы не угадали ответ соперника - мы не испортим позицию!!!
  25. spaceman Новичок

    • Новичок
    Рег.:
    09.01.2007
    Сообщения:
    25
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Я теперь не оспариваю, что размышление только над лучшим ходом противника ? стратегия лучшая из всех остальных (только 2 хода / только 3, ...). Это вы доказали. Но может есть ситуации, когда стоит переключить пондеринг (на некоторое время) на два хода или больше.
  26. NS Нефёдов Сергей

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

    Никогда не имеет смысла обдумывать больше одного ответа соперника.
    У программ не быват цейтнотов, и при нормальном распределении времени она не может уронить флаг. :)

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