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

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

  1. WildCat
    Оффлайн

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

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

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

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

    Репутация:
    3
    Время "подаренное" соперником включаем в общее время (расчетное для нас, время до конца партии!!!)
    Есходя из этого нового времени расчитывается Аварийка и Время на котором завершаем перебор при завершении текущего Depth.

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

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

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

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

    Репутация:
    3
    Пример расчета.

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

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

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

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


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

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

    Репутация:
    0
    Тестирование версии с выключенным пондером показало (против соперников с включенным), что она теряет около 32 пунктов.
     
  5. atoku
    Оффлайн

    atoku Модератор

    Репутация:
    0
    Видимо, когда не угадывает, забивает кеш всякой ерундой. А без пондеринга, кеш еще полезен...
     
  6. WildCat
    Оффлайн

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

    Репутация:
    0
    Что-то я свосем не понял этого высказывания.
     
  7. atoku
    Оффлайн

    atoku Модератор

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

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

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

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

    atoku Модератор

    Репутация:
    0
    Я не волнуюсь, я лишь предположил. Я не очень внимательно прочитал пост (про то что сравнивалось с другими программами, а не с самой Кошкой). Однако, чем не версия, что другие программы либо угадывают больше, либо кеш организуют по-другому?
     
  10. WildCat
    Оффлайн

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

    Репутация:
    0
    Угадывать больше это конечно хорошо.
     
  11. NS
    Оффлайн

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

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

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

    Репутация:
    0
    Еще надо учитывать погрешность измерений. Для определения рейтинга проводилось всего по тысяче партий для каждой версии.
     
  13. spaceman
    Оффлайн

    spaceman Новичок

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

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

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

    spaceman Новичок

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

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

    Репутация:
    3
    Вроде я в этой ветке уже писал - процент угаданных нами ходов равен проценту ходов угаданных соперником.

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

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

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

    spaceman Новичок

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

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

    Репутация:
    3
    Вы не понимаете о чем говорите...
    Очень тяжело в таком режиме что-то обяснять :)
     
  20. WildCat
    Оффлайн

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

    Репутация:
    0
    Он угадывается около 6 раз из десяти.
     
  21. spaceman
    Оффлайн

    spaceman Новичок

    Репутация:
    0
    О чём я говорю, я понимаю. О чём вы, я может быть не понимаю.

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

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

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

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

    spaceman Новичок

    Репутация:
    0
    Не хотелось бы продолжать эту дискуссию вечно. :p

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

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

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

    Репутация:
    3
    Бред какой-то... Из-за того что мы не угадали ответ соперника - мы не испортим позицию!!!
     
  25. spaceman
    Оффлайн

    spaceman Новичок

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

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

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

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