Posted: 20.10.09 19:25. Post subject: Если Ипполит имеет к..
Если Ипполит имеет какое-то отношение к Рыбке, то надо признать, что Васик очень трудолюбивый человек, потому как многие идеи Ипполита лежат вроде как на поверхности, только вот испробовать их у многих руки не доходят. Вот, например, такое продление поиска (extension) white_pv ()
quote:
if (deepness >= 16 && S->transpositional_movement && singular < 2 && white_ok (S->transpositional_movement)) { // реальная глубина в 2 раза меньше // white_exclustion () - функция ищет все ходы, кроме trans move move = S->transpositional_movement; kk = ((move) & 077); ot = (((move) >> 6) & 077); white_spell (move); // делаем ход evaluation_scoring (-0x7fff0000, 0x7fff0000, move); if (((tower_structure + 1)->white_king_check)) { white_unspell (move); goto zab; } score = -black_pv (-above, -below, deepness - 10, (((tower_structure + 1)->black_king_check)) != 0); white_unspell (move); // отмена хода назад if (shah) // нам шах itog = white_exclustion_check (score - deepness / 2, deepness - (((12) <= (deepness / 2)) ? (12) : (deepness / 2)), move & 0x7fff); else itog = white_exclustion (score - deepness / 2, deepness - (((12) <= (deepness / 2)) ? (12) : (deepness / 2)), move & 0x7fff); if (itog < score - deepness / 2) // все остальные ходы проигрывают нашему ходу из trans { singular = 1; // т.н. "единственность" (чем больше, тем хуже остальные ходы, как-то так) if (shah) itog = white_exclustion_check (score - deepness, deepness - (((12) <= (deepness / 2)) ? (12) : (deepness / 2)), move & 0x7fff); else itog = white_exclustion (score - deepness, deepness - (((12) <= (deepness / 2)) ? (12) : (deepness / 2)), move & 0x7fff); if (itog < score - deepness) singular = 2; } }
Простая идея - если остальные ходы кажутся значительно более плохими, то единственный "хороший" ход посчитаем поглубже. Другое дело, что прибавка от extensions редко бывает значительной.
Posted: 20.10.09 23:24. Post subject: Ещё раз про скорость..
Ещё раз про скорость Ипполита. Оказалось, что я неправильно сравнивал с Рыбкой. Рыбка считает узлы только в make_move, а Ипполит ещё и в нулевом ходе: nodals_nobody. Поэтому и показывает более высокую скорость. Надо будет проверить, на сколько это отличается.
Posted: 21.10.09 07:12. Post subject: Во всех функциях кро..
Во всех функциях кроме white_pv() и black_pv() условие deepness >= 6 нужно для того, чтобы гарантированно не было тормозов. Можно его убрать везде, скорей всего скорость не изменится, но для эффективности поиска это ничего не даст. А вот добавлять (deepness >= 6) в white_pv() и black_pv() бессмысленно - на них приходится меньше 1% времени выполнения программы.
Posted: 21.10.09 11:44. Post subject: Залил в основную вет..
Залил в основную ветку версию 0080d hpv. Это исходники из поста выше+ 1) & hash_variated_mask в pv_hashize(). 2) Вызов pv_hashize из hash_exactly только если depth >= 2. 3) В cut/all функциях поиска hash_variated смотрится после основного хэша. 4) Хэширование результата перебора в корне. 5) Все настройки вынесены в .h файл в виде $define XXX. Соответсвенно комментируем/не комментируем строчки с #undef XXX. 6) Дальнейшая замена deepness, below, above на привычные аналоги. 7) Оболочке отсылается название программы, записанное в файле Ippolit.txt.
Posted: 21.10.09 12:10. Post subject: ThinkingALot спасибо..
ThinkingALot спасибо! сейчас 32-шку проверил, все нормально. это я где то не так вставил твой код видимо: смотрел прогой-сверялкой 2-х txt файлов и там смотрел разницу.
а под мультик, я так понимаю, нужен массив структур (ходы, оценка, узлы) и в корне перебора все это в нужные места рассовывать?
Posted: 21.10.09 12:39. Post subject: Проверил ещё раз ско..
Проверил ещё раз скорость Ипполита - убрал подсчет узлов в нулевом ходе. Число узлов уменьшилось примерно на 15%. Итого, получается, что Ипполит примерно на 85% быстрее Рыбки 3.
Еще просьба - для устранения багов. Может кто-нибудь дать позиции, в которых Ипполит падает или жертвует ферзя, или показывает мат в 500 ходов? А то я прогнал на своём стандартном EPD-тесте из 800 позиций и вроде бы нормально прошло.
Posted: 21.10.09 13:12. Post subject: Жертва ферзя - это б..
Жертва ферзя - это баг русской версии. Падают только мои компиляции (сейчас собрал с Multi-threaded DLL вместо Multi-threaded, вроде пока без проблем). Причем только когда ставлю играть матч - бесконечный анализ работает на ура. Поэтому воспроизвести баг не получается.
Posted: 21.10.09 18:47. Post subject: Otodranik, из картин..
Otodranik, из картинок не понятно, что там происходило и в какой момент. Если это происходило в партии, то лучше дать PGN. Но лучше - просто позиция (fen-строка), в которой происходит глюк, причём очень желательно - воспроизводимый.