Форум » » IPPOLIT & ROBBOLITO » Ответить

IPPOLIT & ROBBOLITO

Bison: Предлагаю обсудить особенности устройства Ипполита. Все-таки некаждый день появляются сильнейшие opensource программы.

Ответов - 251, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 All

Bison: Если Ипполит имеет какое-то отношение к Рыбке, то надо признать, что Васик очень трудолюбивый человек, потому как многие идеи Ипполита лежат вроде как на поверхности, только вот испробовать их у многих руки не доходят. Вот, например, такое продление поиска (extension) white_pv () [pre2] 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; } } [/pre2] там же ниже [pre2] while ((move = white_next (S))) { ... novel_deepness = deepness - 2 + (((stretches) >= (singular)) ? (stretches) : (singular)); // новая глубина // stretches - обычные extensions ... } [/pre2] Простая идея - если остальные ходы кажутся значительно более плохими, то единственный "хороший" ход посчитаем поглубже. Другое дело, что прибавка от extensions редко бывает значительной.

immortal223: Bison нам простым юзерам хочется что-нить попроще... Например для началу мультик прикрутить, для более удобного анализа это реально вообще?

Bison: immortal223 Все уже прикручено другими. В Shredder Classic жмешь F11 во время анализа и смотришь мультик


immortal223: Bison Это не мультик - это доска анализа текущего варианта Мультик - это F6

Bison: immortal223 Блин, а я думаю, что за мультик А это оказывается МультиПВ. Сделать реально, скоро кто-нибудь точно присобачит, я уверен.

Osipov: Ещё раз про скорость Ипполита. Оказалось, что я неправильно сравнивал с Рыбкой. Рыбка считает узлы только в make_move, а Ипполит ещё и в нулевом ходе: nodals_nobody. Поэтому и показывает более высокую скорость. Надо будет проверить, на сколько это отличается.

grifsergei: Есть ли у рыбки (Ипполита) кардинальное отличие от других движков? если да , то в чем оно?

bankuss: в версии hashPV добавлено: #define hash_variated_size (0x100000) #define hash_variated_mask ((hash_variated_size - 1) & 0xfffffffffffffffc) type_hash_variated table_hash_variated[hash_variated_size]; в процедуре wipe_hash изменено: memset (table_hash_variated, 0, hash_variated_size * sizeof (type_hash_variated)); в процедурах: white_pv;black_pv;white_cut_check;black_cut_check;white_cut;black_cut;white_all;black_all;white_all_check;black_all_check добавлено: type_hash_variated *hash_variated; + код: if (deepness >= 6) { k = apropos_hash & hash_variated_mask; for (i = 0; i < 4; i++) { hash_variated = table_hash_variated + (k + i); if (hash_variated->hash_64bit == apropos_hash) { if (hash_variated->deepness >= deepness) return hash_variated->score; } } } но я заметил, что в white_pv этот код вставлен не так, как в других. у себя поправил.

ThinkingALot: Во всех функциях кроме white_pv() и black_pv() условие deepness >= 6 нужно для того, чтобы гарантированно не было тормозов. Можно его убрать везде, скорей всего скорость не изменится, но для эффективности поиска это ничего не даст. А вот добавлять (deepness >= 6) в white_pv() и black_pv() бессмысленно - на них приходится меньше 1% времени выполнения программы.

bankuss: ThinkingALot а ну да, в этих функциях условия на глубину нет.

bankuss: ThinkingALot вот, проверь все ли так :) http://ifolder.ru/14601817 я там кое-какие переменные переименовал

ThinkingALot: Залил в основную ветку версию 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. P.S. Моя компиляция скорее всего будет вылетать.

bankuss: ThinkingALot спасибо! сейчас 32-шку проверил, все нормально. это я где то не так вставил твой код видимо: смотрел прогой-сверялкой 2-х txt файлов и там смотрел разницу. а под мультик, я так понимаю, нужен массив структур (ходы, оценка, узлы) и в корне перебора все это в нужные места рассовывать?

Osipov: Проверил ещё раз скорость Ипполита - убрал подсчет узлов в нулевом ходе. Число узлов уменьшилось примерно на 15%. Итого, получается, что Ипполит примерно на 85% быстрее Рыбки 3. Еще просьба - для устранения багов. Может кто-нибудь дать позиции, в которых Ипполит падает или жертвует ферзя, или показывает мат в 500 ходов? А то я прогнал на своём стандартном EPD-тесте из 800 позиций и вроде бы нормально прошло.

ThinkingALot: Жертва ферзя - это баг русской версии. Падают только мои компиляции (сейчас собрал с Multi-threaded DLL вместо Multi-threaded, вроде пока без проблем). Причем только когда ставлю играть матч - бесконечный анализ работает на ура. Поэтому воспроизвести баг не получается.

Otodranik: Баги, мною замеченные: Время беспардонно просрочил Вообще на загрузился

Behovodec: У меня есть вопросы к анализу в Арене. В данном случае анализ стартовой позиции Ипполитом 0.080a w32.

immortal223: Behovodec У тебя старая версия очевидно.

Osipov: Otodranik, из картинок не понятно, что там происходило и в какой момент. Если это происходило в партии, то лучше дать PGN. Но лучше - просто позиция (fen-строка), в которой происходит глюк, причём очень желательно - воспроизводимый.

ms 13: Вот например [Event "1"] [Site "."] [Date "2009.10.18"] [Round "18.1"] [White "Rybka 3"] [Black "IPPOLIT 0.080a"] [Result "1-0"] [ECO "D43"] [Annotator "0.00;-0.08"] [PlyCount "197"] [EventDate "2009.10.18"] [EventType "tourn"] [TimeControl "60+1"] {AMD Athlon(tm) 64 X2 Dual Core Processor 5000+ 2612 MHz W=13.1 plies; 82kN/s; 2 398 TBAs; My book 17.ctg B=16.3 plies; 1 047kN/s; pferdchen3.ctg} 1. d4 { B/0 0} Nf6 {B/0 0} 2. c4 {B/0 0} e6 {B/0 0} 3. Nc3 {B/0 0} d5 {B/0 0} 4. Nf3 { B/0 0} c6 {B/0 0} 5. Bg5 {B/0 0} h6 {B/0 0} 6. Bxf6 {B/0 0} Qxf6 {B/0 0} 7. e3 {B/0 0} Nd7 {B/0 0} 8. Bd3 {B/0 0} dxc4 {B/0 0} 9. Bxc4 {B/0 0} g6 {B/0 0} 10. O-O {B/0 0} Bg7 {B/0 0} 11. Rc1 {B/0 0} O-O {B/0 0} 12. b4 {B/0 0} Qe7 {B/0 0} 13. Qb3 {B/0 0} b6 {B/0 0} 14. e4 {B/0 0} Bb7 {B/0 0} 15. Rfe1 {B/0 0} Rac8 { B/0 0} 16. a4 {B/0 0} Rfd8 {-0.08/12 2} 17. h3 {0.00/11 4} a6 {(Сf8) -0.14/13 5 } 18. Rcd1 {(g3) 0.01/10 2} b5 {-0.32/14 2} 19. Bf1 {-0.19/11 2} Bf8 { -0.27/16 3} 20. Rb1 {-0.20/12 3} e5 {-0.27/16 4} 21. axb5 {-0.23/12 3} cxb5 { -0.27/16 3} 22. Nd5 {-0.21/13 3} Qd6 {-0.30/15 1} 23. dxe5 {-0.22/12 4} Nxe5 { -0.30/13 0} 24. Nxe5 {(Лed1) -0.22/13 2} Qxe5 {-0.42/15 2} 25. Qa2 {-0.20/13 3} h5 {(Лd6) -0.77/15 13} 26. Rbd1 {-0.23/10 2} h4 {-0.56/14 2} 27. Nb6 { -0.28/11 4} Bd6 {-0.56/14 1} 28. Rxd6 {-0.28/12 2} Qxd6 {-0.56/17 3} 29. Nxc8 { -0.28/11 0} Qxb4 {-0.56/17 2} 30. Rb1 {-0.31/13 4} Qxe4 {-0.56/17 1} 31. Na7 { -0.31/11 0} Ra8 {-0.54/17 1} 32. Rd1 {-0.31/13 2} Qe7 {-0.54/15 0} 33. Nxb5 { -0.27/13 4} axb5 {-0.46/17 3} 34. Qd2 {(Фb3) -0.19/13 3} Bc6 {-0.44/16 2} 35. Rc1 {(Фc3) -0.19/13 3} Ra6 {(Сe8) -0.45/15 3} 36. Qd4 {-0.17/12 1} Kh7 { -0.35/15 2} 37. Rc2 {-0.18/13 3} Bd7 {(Лa4) -0.32/16 2} 38. Rd2 {0.00/14 3} Be8 {(Сc6) -0.32/16 1} 39. Re2 {-0.06/13 2} Re6 {-0.32/14 0} 40. Rxe6 {-0.05/15 2} fxe6 {-0.32/19 1} 41. Qe5 {-0.06/15 1} b4 {-0.32/19 1} 42. Bc4 {-0.06/15 1} Bf7 {-0.25/19 3} 43. Ba2 {-0.07/15 3} Kg8 {-0.25/19 2} 44. Bb3 {-0.09/14 1} Qd8 { -0.26/18 4} 45. Bc4 {(Фf4) -0.09/14 2} Kh7 {(Фd2) -0.44/16 1} 46. Bf1 { -0.13/13 1} Qd7 {-0.58/17 3} 47. Qf6 {(Сc4) -0.41/12 2} Kg8 {-0.71/17 1} 48. Qxh4 {-0.48/12 1} Qd2 {(b3) -0.70/18 3} 49. Bc4 {(Фg3) -0.64/11 2} Qc1+ { -0.80/18 2} 50. Bf1 {-0.62/14 1} Qe1 {(Фc3) -1.11/18 7} 51. Qd8+ {-0.68/12 2} Kg7 {-1.11/16 0} 52. h4 {-0.81/13 2} Qe5 {-1.11/17 1} 53. Qd3 {-0.81/12 2} Qc3 {-1.13/17 1} 54. Qe4 {(Фe3) -0.78/13 2} e5 {(b3) -1.35/16 2} 55. h5 { (g4) -1.12/12 3} Qd4 {-1.86/16 2} 56. Qb7 {(Фf3) -1.11/13 4} gxh5 {-1.88/14 0} 57. Qe7 {(Сe2) -1.11/13 6} b3 {-1.75/18 5} 58. Qg5+ {-1.11/12 5} Kf8 { -1.89/18 3} 59. Qh6+ {-1.14/12 2} Ke8 {(Крg8) -1.89/18 1} 60. Bb5+ {-0.91/11 1} Ke7 {-1.89/16 0} 61. Qg5+ {-0.95/13 2} Kd6 {-1.85/18 5} 62. Qf6+ {-0.92/13 3} Be6 {-1.85/16 0} 63. Qf8+ {-0.92/13 1} Kd5 {-1.85/17 9} 64. Qe8 {-0.92/13 1} Qb6 {-1.89/18 3} 65. Bd3 {-0.92/13 3} b2 {-1.89/17 1} 66. Bb1 { (Ф:h5) -0.92/13 2} Kc4 {-1.81/16 2} 67. Qxh5 {(g3) -1.03/12 2} Qd4 {-1.91/16 0} 68. Qe2+ {(Фe8) -1.03/12 1} Kb4 {-1.93/15 0} 69. Qf3 {(Фe1+) -1.03/13 1} Bc4 { (Сd5) -1.99/15 1} 70. Qf8+ {(Фf5) -1.03/13 2} Kc3 {(Фc5) -2.76/13 0} 71. Qf5 { -2.14/11 2} Bd3 {(Крb4) -2.76/11 0} 72. Bxd3 {-2.07/12 1} Qxd3 {-3.06/15 0} 73. Qxe5+ {-2.07/11 0} Kb3 {-3.06/14 0} 74. Qe6+ {-2.07/13 1} Kc2 {-2.89/18 1} 75. Qc6+ {-2.07/14 1} Kd2 {-2.89/17 0} 76. Qh6+ {-2.07/14 2} Ke1 {-2.89/19 1} 77. Qe6+ {-2.07/15 1} Qe2 {-2.89/18 0} 78. Qb6 {-2.07/16 1} Qf1+ {-2.89/18 7} 79. Kh2 {-2.07/17 0} Qxf2 {-2.89/19 4} 80. Qb4+ {-2.07/17 1} Kd1 {-2.85/19 1} 81. Qa4+ {(Фg4+) -2.07/17 1} Qc2 {-2.87/17 2} 82. Qd4+ {-2.07/17 0} Ke2 { (Фd2) -2.86/18 0} 83. Qe5+ {(Фg4+) -2.07/16 1} Kd2 {(Крd3) -2.86/18 2} 84. Qd4+ {-2.07/16 1} Kc1 {(Крe1) -2.86/17 2} 85. Qg1+ {(Фf4+) -2.06/15 2} Qd1 { -2.89/15 0} 86. Qc5+ {-2.07/16 1} Kb1 {-2.86/18 1} 87. Qc4 {(Фf5+) -2.07/16 1} Qg1+ {(Фc2) -71.72/14 2} 88. Kxg1 {#11/3 0} Ka1 {#11/0 0} 89. Qa6+ {#11/0 0} Kb1 {#10/0 0} 90. Kf2 {#10/0 0} Kc1 {#9/0 0} 91. Qc4+ {#9/0 0} Kd2 {#8/0 0} 92. Qb3 {#8/0 0} b1=Q {#7/0 0} 93. Qxb1 {#7/0 0} Kc3 {#6/0 0} 94. Qe4 {#6/0 0} Kb2 {#5/0 0} 95. Ke3 {#5/0 0} Kc3 {#4/0 0} 96. Qa4 {#4/0 0} Kb2 {#3/0 0} 97. Kd2 { #3/0 0} Kb1 {#2/0 0} 98. Kc3 {#2/0 0} Kc1 {#1/0 0} 99. Qc2# {#1/0 0} 1-0



полная версия страницы