Posted: 19.10.09 12:26. Post subject: Первое впечатление о..
Первое впечатление от кода - очень трудно его разобрать. Не совсем корректные названия типичных переменных только усиливают это впечатление: below вместо alpha, above вместо beta - мелочи по-сравнению с murderer вместо killer. Штук 10 поисковых функций тоже никак не помогают читабельности.
из функции white_pv(). Окно зависит от глубины + функция охватывает очень большие глубины (deepness >= 10). Все это, очевидно, весьма кстати при нахождении тактики.
Posted: 19.10.09 14:28. Post subject: Для глубокого поиска..
Для глубокого поиска Ипполит имеет на мой (весьма беглый) взгляд самый лучший из opensource движков Futility Pruning. Реализуется он, как я понял, через таблицу increment_maximal[16][4095], своим устройством напоминающую History. Стоит все это дело поизучать поподробнее.
Posted: 19.10.09 21:50. Post subject: Некоторые сходства с..
Некоторые сходства с Рыбкой 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 этой ерунды нет.
Posted: 19.10.09 21:58. Post subject: Osipov Юрий больша..
Osipov
Юрий большая просьба - отладьте движок, а! только Вы можете это сделать Я от него в полнейшем восторге. Он ненормально силён! Особенно в эндшпиле. Мульти-ПВ привязать бы к нему для анализа это очень надо!!
Posted: 19.10.09 22:22. Post subject: Osipov Юрий, поиск ..
Osipov Юрий, поиск сильно похож на тот, что в Рыбе? Там тоже гора переборных функций? Я, например, до сих пор не докопался, что такого особенного делают функции white_all (), white_exclustion() и white_slide(), что их понадобилось выносить из общего поиска.
Posted: 19.10.09 22:30. Post subject: Immortal223. Отладк..
Immortal223.
Отладка Ипполита и прикручивание Multi PV не заставят себя ждать. Есть много хороших программистов.
Ещё интересное наблюдение про Ипполита. Сравнил его скорость с оригинальной Рыбкой и "своей". Мне удалось выжать только 40% прироста скорости по сравнению с оригинальной Рыбкой. Но Ипполит на 100% быстрее Рыбки 3, т.е. вдвое.
Posted: 19.10.09 22:36. Post subject: Юрий, поиск сильно п..
quote:
Юрий, поиск сильно похож на тот, что в Рыбе? Там тоже гора переборных функций? Я, например, до сих пор не докопался, что такого особенного делают функции white_all (), white_exclustion() и white_slide(), что их понадобилось выносить из общего поиска.
Я пока ещё не копался в поиске Ипполита. Только посмотрел PV-поиск. Тоже сложное впечатление, как и от всего остального - много похожего на Рыбку 3, но много и отличий. Кстати, сколько функций поиска в Ипполите всего? В Рыбке их 20 - по 10 на white и black. Это не считая корня.
Posted: 19.10.09 22:51. Post subject: Osipov пишет: Отлад..
Osipov пишет:
quote:
Отладка Ипполита и прикручивание Multi PV не заставят себя ждать. Есть много хороших программистов.
Я просто в нереальном экстазе от этого движка. Это просто сказка какая-то! не поверил бы что такое возможно. Такое потрясение испытывал только в декабре 2005 когда рыбка 1.0 Бета появилась. И немного похожее - когда Рыбка 3 вышла!
Posted: 19.10.09 22:52. Post subject: Юрий Осипов, скажите..
Юрий Осипов, скажите, пожалуйста, а что вы заканчивали? Очень хочется чувствовать себя так же свободно в программировании. В 2010 собираюсь поступить на заочку в Санкт-Петербургский Политехнический на информационные системы и технологии. На очку уже нет времени.
Posted: 19.10.09 23:05. Post subject: Как я и думал, Иппол..
Как я и думал, Ипполит уже все изучают (кому надо).
quote:
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