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

IPPOLIT & ROBBOLITO

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

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

VP: Bison мы давно тебя ждем здесь http://immortal223.borda.ru/?1-2-0-00000151-000-260-1

Bison: Первое впечатление от кода - очень трудно его разобрать. Не совсем корректные названия типичных переменных только усиливают это впечатление: below вместо alpha, above вместо beta - мелочи по-сравнению с murderer вместо killer. Штук 10 поисковых функций тоже никак не помогают читабельности. Первое новшество, что я заметил - это IID [pre2] // IID if (!transpositional_movement && deepness >= 6) { itog = below; if (deepness >= 10) { itog = white_pv (below - deepness, above + deepness, deepness - 8, shah); if (itog > below - deepness) transpositional_movement = (tower_structure + 1)->move; } if (itog > below - deepness) itog = white_pv (below - deepness, above + deepness, deepness - 4, shah); if (itog > below - deepness) transpositional_movement = (tower_structure + 1)->move; } else if (deepness >= 10 && deepness > hash_deepness + 8) { itog = white_pv (below - deepness, above + deepness, deepness - 8, shah); if (itog > below - deepness) transpositional_movement = (tower_structure + 1)->move; if (itog > below - deepness) { itog = white_pv (below - deepness, above + deepness, deepness - 4, shah); if (itog > below - deepness) transpositional_movement = (tower_structure + 1)->move; } } [/pre2] из функции white_pv(). Окно зависит от глубины + функция охватывает очень большие глубины (deepness >= 10). Все это, очевидно, весьма кстати при нахождении тактики.

Bison: VP Я думаю, лучше там особо не флудить, больно уж тема объемная.


VP: Bison согласен

Bison: Немного погонял третью рыбу против Ипполита, пондерхит получается пока очень высокий (особенно если сравнивать со Stockfish. [pre2] Rybka 3 32-bit - IPPOLIT 0.080a 20.5 - 24.5 45.56% Rybka 3 32-bit - Stockfish 1.5 JA 32.5 - 12.5 72.22% 53.0 - 37.0 58.89% [/pre2] Пондерхит Rybka 3 32-bit - IPPOLIT 0.080a 74.57% (827/1109) Для сравнения со Stockfish 1.5 Rybka 3 32-bit - Stockfish 1.5 JA 52.56% (626/1191)

Bison: Программа для расчета пондерхита. Партии

Bison: Для глубокого поиска Ипполит имеет на мой (весьма беглый) взгляд самый лучший из opensource движков Futility Pruning. Реализуется он, как я понял, через таблицу increment_maximal[16][4095], своим устройством напоминающую History. Стоит все это дело поизучать поподробнее.

Renegat23: WildCat пишет: Для разбора исходников Ипполита лучше создать отдельную ветку. Так она уже создана :) В это ветке их уже разбирают.

Bison: Ponder-а в Ипполите точно нет, иначе была бы команда "ponderhit", без нее никуда.

Osipov: Некоторые сходства с Рыбкой 3: 1. Большинство основных функций – парные: для позиций с ходом белых и – зеркальные – для позиций с ходом черных. Как и в Рыбке. 2. Очень похож расчет таблицы материального дисбаланса. Правда, в Рыбке это одна функция, но это не принципиально. 3. Белопольный и чернопольный слоны имеют разный индекс в таблице материала – тоже Рыбка. 4. В оценочной функции за одну операцию складываются два числа opening и endgame, типа так: za -= (((3) << 16) + (10)). Это Рыбка. 5. Отдельный расчет оценки для пешечника. 6. Похожий принцип пересчета истории. Ипполит: int ist = ISTOR[POZ.pl[(((dv) >> 6) & 077)]][((dv) & 077)]; ISTOR[POZ.pl[(((dv) >> 6) & 077)]][((dv) & 077)] = ist + (((0xff00 - ist) * gl) >> 8); Рыбка 3: history = History[quiet_flag][piece][to]; History[quiet_flag][piece][to] = history - ((history * depth) >> 9); В целом, можно считать Ипполит производным от Рыбки 3. Но отличий очень много, и они настолько существенны, что сделать это мог только тот, кто хорошо разбирается в алгоритмах Рыбки. Я уже год изучаю исходники Рыбки, но так радикально поменять её не смог. Скорее всего, это что-то близкое к Рыбке 4 от автора, но потом кто-то поиздевался над кодом. И ещё кое-что интересное. В конце ОФ есть что-то жуткое: if ((ookDIN->FLAG & 128)) { if (za > 0) { if (POZ.dd[enBELsvet]) za -= .. а дальше – длинное многоэтажное матерное выражение из 4000 символов. Не похоже, чтобы это писала человеческая рука. Рука была явно механическая. Похоже, здесь прошёлся какой-то мощный декомпилятор. Кстати, в Рыбке 3 этой ерунды нет.

immortal223: Osipov Юрий большая просьба - отладьте движок, а! только Вы можете это сделать Я от него в полнейшем восторге. Он ненормально силён! Особенно в эндшпиле. Мульти-ПВ привязать бы к нему для анализа это очень надо!!

Bison: Osipov Юрий, поиск сильно похож на тот, что в Рыбе? Там тоже гора переборных функций? Я, например, до сих пор не докопался, что такого особенного делают функции white_all (), white_exclustion() и white_slide(), что их понадобилось выносить из общего поиска.

Osipov: Immortal223. Отладка Ипполита и прикручивание Multi PV не заставят себя ждать. Есть много хороших программистов. Ещё интересное наблюдение про Ипполита. Сравнил его скорость с оригинальной Рыбкой и "своей". Мне удалось выжать только 40% прироста скорости по сравнению с оригинальной Рыбкой. Но Ипполит на 100% быстрее Рыбки 3, т.е. вдвое.

Osipov: Юрий, поиск сильно похож на тот, что в Рыбе? Там тоже гора переборных функций? Я, например, до сих пор не докопался, что такого особенного делают функции white_all (), white_exclustion() и white_slide(), что их понадобилось выносить из общего поиска. Я пока ещё не копался в поиске Ипполита. Только посмотрел PV-поиск. Тоже сложное впечатление, как и от всего остального - много похожего на Рыбку 3, но много и отличий. Кстати, сколько функций поиска в Ипполите всего? В Рыбке их 20 - по 10 на white и black. Это не считая корня.

Bison: Я насчитал 30 (суммарно за оба цвета), это если считать с black_top () и дальше вниз. Как раз на месяц разбора, если в день по функции

Bison: Но Ипполит на 100% быстрее Рыбки 3, т.е. вдвое. Удвоение скорости, насколько я помню, дает ~70 пунктов Эло, так что в знаниях он не особо прибавил, правильно?

immortal223: Osipov пишет: Отладка Ипполита и прикручивание Multi PV не заставят себя ждать. Есть много хороших программистов. Я просто в нереальном экстазе от этого движка. Это просто сказка какая-то! не поверил бы что такое возможно. Такое потрясение испытывал только в декабре 2005 когда рыбка 1.0 Бета появилась. И немного похожее - когда Рыбка 3 вышла!

Знатный Читер: Юрий Осипов, скажите, пожалуйста, а что вы заканчивали? Очень хочется чувствовать себя так же свободно в программировании. В 2010 собираюсь поступить на заочку в Санкт-Петербургский Политехнический на информационные системы и технологии. На очку уже нет времени.

Bison: Как я и думал, Ипполит уже все изучают (кому надо). mcostalba wrote: Today, in the main forum, there has been a marathon thread about an (almost sure) Rybka's reverse engineered engine called Ippolit. Out of curiosity I looked at the sources, well the source, it is a single, horrid to read, file. I found an idea I never saw before. When null search fails high we simply return beta, eventually after zugzwang verification search. In this case, before to return, the null value (the result of the null search) is saved in the TT table as a LOWER BOUND type node (as it should be) but with NO associated move (as normally happens only for upper bound nodes). I think the logic makes sense: null search is just a normal search but on an undefined move, on an absolutly dumb move, if we anyhow fail high it makes sense to store we are in a cut-off type node and because we don't have searched any specific move we store MOVE_NONE in the hash table. Does anyone have ever heard of such idea before ? For me it is new, but I am not in this field from a long ago Марко Костальба - это тот, кто сделел Stockfish из Glaurunga

immortal223: Bison пишет: Марко Костальба - это тот, кто сделел Stockfish из Glaurunga ждём добавления +100 от стокфиша 2



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