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
Posted: 19.10.09 23:16. Post subject: Все это с толкчесс В..
Все это с толкчесс Вообще для знающих английский веселая там темка. Одни говорят, что автора Ипполита звали Ида Про, а другие спорят о том, хорошо ли быть капиталистами. OffTopic: Капиталисты - такой мнительный народ, Везде им мерещатся заговоры и перевороты. (с)
Posted: 19.10.09 23:25. Post subject: Удвоение скорости, н..
quote:
Удвоение скорости, насколько я помню, дает ~70 пунктов Эло, так что в знаниях он не особо прибавил, правильно?
Если бы знать, что такое знания. Если говорить об ОФ, то в Рыбке 3 она посложнее будет. Но и медленнее.
Насчет удвоения скорости. В среднем - да, около 70 пунктов. Но это при игре непохожих движков. Если же наш новый движок вдвое быстрее предыдущей версии, и считает соответственно на полуход дальше, но играет по тому же алгоритму, то разница в ЭЛО получится намного больше. Просто такой новый движок всегда будет знать ответный ход соперника и будет редко ошибаться против него. А старый будет ошибаться часто.
Posted: 20.10.09 06:20. Post subject: Заметил, что Рыбка в..
Заметил, что Рыбка в отличие от Ипполита значительно чаще и охотнее жертвует качество за проходную пешку и легкую фигуру, получая значительный перевес. Ипполит эту жертву обычно не смотрит.
Posted: 20.10.09 06:35. Post subject: Еще заметил, что оце..
Еще заметил, что оценка материального дисбаланса у Ипполита с Рыбкой абсолютно разная - иногда вообще прямо противоположная. Это касается как компенсации за ферзя, так и борьбы легких фигур с пешками против тяжелых. Причем непонятно, чья оценка лучше - оба бывало ошибались. Но статистически, Ипполит ошибается реже. Так что если это и клон, то точно не Рыбки 3.
Posted: 20.10.09 06:38. Post subject: IPP_ENG*.c - достато..
IPP_ENG*.c - достаточно ли одного этого файла для компиляции? Скачал Code Blocks 8.02, попробовал скомпилировать - кучу ошибок выдала прога: то ей то не нравится, то это, файлы отсутствуют с расширением *.h и так далее. Исходник bankuss-а такие ошибки не выдаёт, но всё равно не хочет компилироваться и требует какой-то файл. Может, компилятор нужен помощнее? В программировании я не силён.
Posted: 20.10.09 06:54. Post subject: Кстати. В Рыбки 4 ав..
Кстати. В Рыбке 4 автор вряд ли стал бы настолько координально изменять оценку дисбаланса, ибо она была и без того хороша. Скорее мелкие доработки и усовершенствования по сравнению с Рыбкой 3. Но никак не противоположные оценки! Поэтому, следуя этой логике надо признать, что Ипполит не может быть клоном и Рыбки 4!
Posted: 20.10.09 08:06. Post subject: bankuss пишет: я кс..
bankuss пишет:
quote:
я кстати правленные исходники не выкладывал
А, ну не помню кто, но выкладывали файл IPPOLIT 64 1Gb SOURCE, ThinkingAlot2, может, так там есть h-файл. На сайте автора Ипполита можно скачать только IPP_ENG.c и IPPOLIT.c Где же взять h-файл? Очень надо. Из IPPOLIT 64 1Gb SOURCE не подойдёт? Или самому нужно его делать?
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-строка), в которой происходит глюк, причём очень желательно - воспроизводимый.
Posted: 21.10.09 22:37. Post subject: Извиняюсь, PGN парти..
Извиняюсь, PGN партий пожалуй не подойдёт. Там играли на время, а это почти нереально воспроизвести. Ладно, придётся самому искать глюки.
Сегодня провёл турнир под своей оболочкой между Ипполитом и "своей" версией Рыбки 3. Играли 412 партий из 206 начальных позиций, оба считали на фиксированную глубину depth=6. Начиная с 12-й партии на Ипполита напала порча - начал сливать всё подряд. Где-то между 220-й и 280-й партиями почему-то восстановился и начал выигрывать. Потом опять провалился и слил. Итог: +60 -268 =84 в пользу Рыбки. Было несколько партий, где Ипполит надолго задумывался - тратил времени раз в 10 больше, чем Рыбка. И узлов в итоге насчитал почти в 3 раза больше. Есть над чем подумать.
Posted: 22.10.09 05:15. Post subject: Osipov , bankuss и д..
Osipov , bankuss и другие программисты: какой компилятор посоветуете? Как для компиляции Ипполита, так и вообще. Хочу немного поизучать языки программирования, раз уж тут такая интересная тема - на руках есть исходникик Ипполита.
Posted: 22.10.09 05:55. Post subject: Кевин просто для изу..
Кевин просто для изучения достаточно бесплатной версии VS express (2005 или 2008). качается с мелкософта. а так, самый быстрый код выдает компилятор от intel, но он в версии для windows стоит немалых денег.
1) Почему ослабела версия d по сравнению с b ? 2) Возьметься все-таки кто-нибудь приделывать движку многопоточность или так друг на друга и будем кивать?
Posted: 22.10.09 16:03. Post subject: Renegat23 пишет: 2)..
Renegat23 пишет:
quote:
2) Возьметься все-таки кто-нибудь приделывать движку многопоточность или так друг на друга и будем кивать?
Ака ты махнул с многопоточностью! Я бы просто хотел multiPV увидеить для начала, а то для анализа он очень неудобен пока что, кроме того в ИДЕЕ аквариумской он тоже не работает :( так как команду searchmoves тоже не поддерживает.. А там глядишь уже и рыбка 4 поспеет и как верно замечено было - все постепенно забудут про Ипполит, пока не выйдет Ипполит 2 основанный на коде Рыбки 5
Posted: 22.10.09 16:15. Post subject: Renegat23 пишет: 1)..
Renegat23 пишет:
quote:
1) Почему ослабела версия d по сравнению с b ? 2) Возьметься все-таки кто-нибудь приделывать движку многопоточность или так друг на друга и будем кивать?
1) Смысл версии d исключительно в длительном хранении результатов анализа. Почему играет слабее - без понятия. Может статистическая погрешность. Разница скорее всего в пределах 20-30 пунктов. 2) Это очень долго и скучно. К примеру, просто переопределение всех структур под мультипоточность для движка по сложности сопоставимого со Стрелкой заняло у меня пол дня. Код Ипполита многократно сложнее. При этом распараллеливание a-la Фрукт может запросто вообще не сработать, а нормальный алгоритм, как в Stockfish, - это возня с каждой из множества функций поиска.
Posted: 22.10.09 17:24. Post subject: кстати, если компиля..
кстати, если компилять интеловским компилятором в дебаг режиме, то он при запуске ехе начинает ругаться на static __inline int BSF (UINT64 x) { int y; _BitScanForward64(&y,x); return y; } что эта функция портит стэк
Posted: 22.10.09 19:13. Post subject: Возмодно поможет одн..
Возмодно поможет одно из 3x: 1) Переписать BSF/BSR на ассемблере: bsf/bsr rax, x 2) Убрать опции /Qipo, /ipo - в общем отключить interprocedural optimization. 3) Попробовать Profile Guided Optimization.
Posted: 22.10.09 19:43. Post subject: Погонял infinite ana..
Погонял infinite analysis по несколько минут версии d в сравнении с b. Создалось впечатление, что у d больше branching factor. То есть глубины 16 достигают примерно одновременно, а до 20 версия d считает в несколько раз дольше. Хотя возможно это всего лишь статистическая погрешность.
Posted: 22.10.09 20:19. Post subject: Может быть немного н..
Может быть немного не в тему, извиняйте. Надоело глядеть на эти дебильные имена, вручную переименовывать влом, все-таки 14,5 тысяч строк. Решил механизировать процесс. Начал писать программульку, завтра будет готова. Только писать тоже влом, может быть у кого готовое чего есть, чтобы не изобретать велосипед. Задумка такая: Создаешь папку, туда эту самую прогу и любой текстовый файл, например "IPP_ENG.c". Вводишь старое слово и новое. И все. Прога создает тут же новый файл, точно такой же и с таким же расширением. Все различия - все заданные имена поменяны на новые. Так есть у кого чего-нибудь наподобе?
Posted: 22.10.09 22:44. Post subject: bankuss пишет: но о..
bankuss пишет:
quote:
но он в версии для windows стоит немалых денег.
Так можно же с лекарством скачать
Intel(R) C++ Compiler Professional Edition for Windows* Version 11.1.035 Hidden text. Click here
Год выпуска: 2009 Версия: 11.1.035 Разработчик: Intel Corporation Платформа: Windows NT 4.0/XP/Server 2003 32-bit Editon Совместимость с Vista: неизвестно Системные требования: Intel C++ Compiler Professional Edition for Windows can be used on, and develop code for, Intel processors since the Intel® Pentium® 4 processor. Язык интерфейса: только английский Таблэтка: Присутствует Описание: Intel C++ Compiler Professional Editions лучшее средство для создания многопоточных приложений под Windows. В профессиональной версии реализована расширеная оптимизация, поддержка процессоров, векторизация, авто-параллелизм, OpenMP, развертка циклов вместе с высоко оптимизированными библиотеками.
Содержание пакета:
Intel(R) C++ Compiler Professional Edition for Windows* Version 11.1.035 Intel(R) Math Kernel Library 10.2 for Windows* Intel(R) Integrated Performance Primitives 6.1 Intel(R) Threading Building Blocks 2.1 for Windows, Update 4
Posted: 23.10.09 02:20. Post subject: Перечитал ветку на к..
Перечитал ветку на крестбуке по поводу появления Стрелки+появление Рыбкина. Нашел там интересную фразу Юрия Осипова
quote:
Версия 2.4 по алгоритму совершенно одинакова с 1.8. Изменен только расчет времени на обдумывание хода. Это попытка нащупать путь к более оптимальному распределению времени по партии. В идеале хотелось бы найти критерии для выполнения "instant move", а« также критерии для глубокого размышления в критических позициях.»
Вся соль в том, что наблюдая за тестами Иполита я заметил, что он часто расходует время больше обычного в критических ситуациях, и часто этим переигрывает Рыбку. ИМХО конечно, но автор похоже реально мастер
Posted: 23.10.09 13:26. Post subject: дуп пишет: Может бы..
дуп пишет:
quote:
Может быть немного не в тему, извиняйте. Надоело глядеть на эти дебильные имена, вручную переименовывать влом, все-таки 14,5 тысяч строк. Решил механизировать процесс. Начал писать программульку, завтра будет готова. Только писать тоже влом, может быть у кого готовое чего есть, чтобы не изобретать велосипед. Задумка такая: Создаешь папку, туда эту самую прогу и любой текстовый файл, например "IPP_ENG.c". Вводишь старое слово и новое. И все. Прога создает тут же новый файл, точно такой же и с таким же расширением. Все различия - все заданные имена поменяны на новые. Так есть у кого чего-нибудь наподобе?
Visual Studio: Ctrl+F->Quick Replace->Replace All Есть еще полезная функция (Клик правой кнопкой мыши)->Collapse all definitions. Гораздо проще ориентироваться в коде, особенно неструктурированном, как у Ипполита.
Posted: 23.10.09 23:23. Post subject: Господа! Мы как-то з..
Господа! Мы как-то зациклились на Ипполите. А ведь есть его более продвинутый аналог - Robbolito. Ипполиту уже полгода, а Robbolito более свежий. Буржуи говорят, что он более стабилен и содержит меньше ошибок. Поддерживает изменение размера хэша и выводит currmove. Я почитал его тексты - там хоть и по итальянски, но текст в целом лучше структурирован. Одна беда - он не заточен под компиляцию в Студии. Мне пришлось пару часов скрежетать напильником, чтобы откомпилировать его в VC 2008 express. Заработал, гад, сейчас запустил тестирование. После 5 партий против Рыбки 3 ведёт: +3 -0 =2.
Однако, хотелось бы сделать более грамотную компиляцию. Судя по всему, этому Robbolito нужен GCC. И тут хотелось бы выяснить два вопроса: 1. Где взять этот GCC, да так чтобы скомпилировать под Windows, а не под Linux. 2. Как компилировать, имея makefile. Желательно, поподробнее. Последний вопрос, конечно, для чайников. Но я и есть чайник.
P.S. Пока писал, Robbolito выиграл ещё одну партию у Рыбки. Стало +4 -0 =2.
Posted: 24.10.09 00:18. Post subject: Osipov пишет: 2. Ка..
Osipov пишет:
quote:
2. Как компилировать, имея makefile. Желательно, поподробнее.
Если без осложнений, то стандартный способ такой. Сначала посмотрите, сколько там мейкфайлов под Винду. В Крафти, например, их бывает несколько, под каждую Студию. Если он там один, то он должен называться "Makefile", без расширения. Если несколько, то выбрать нужный и запомнить название. В Студии есть спецуттилитка, называется nmake. Вот она все и делает. Из Студии, в меню найти командную строку, набрать полный путь к папке с сорсами и вызвать эту уттилиту. Я сейчас напечатаю, как это делаю я, а вы подправите по месту. Итак: cd C:\Documents and Settings\MyName\Мои документы\folder_source_name\ (здесь лучше нажать enter) nmake -f Makefile.расш. Это если несколько мейкфайлов. Если один, то команда выгляит просто nmake. // У меня этого Робболито пока нет, конкретно его я не пробовал.
Posted: 24.10.09 07:36. Post subject: Думаю, если получитс..
Думаю, если получится сделать в VS, то лучше ничего и не надо. Компилятор там отличный, в мингв будет хуже. Главное, чтобы с Мэйкфайлом было все в порядке. "Два часа напильником" - это он наверное парился с поддержкой кроссплатформенности. Намного удобнее было, если бы авторы выкладывали два отдельных комплекта с исходниками. Тогда таких проблем бы не возникало.
Posted: 24.10.09 08:34. Post subject: Osipov пишет: Одна ..
Osipov пишет:
quote:
Одна беда - он не заточен под компиляцию в Студии. Мне пришлось пару часов скрежетать напильником, чтобы откомпилировать его в VC 2008 express. Заработал, гад, сейчас запустил тестирование. После 5 партий против Рыбки 3 ведёт: +3 -0 =2.
Можешь выложить исходники?
immortal223 пишет:
quote:
А ну-ка, ребята, признавайтесь, что вы там наделали с ИППОЛИТом??
Posted: 24.10.09 09:44. Post subject: я тоже пробовал точи..
я тоже пробовал точить напильником но 20 ошибок так и не убрал, и не совсем понятно, что не нравится студии. так как робболито под линукс, то компилятор там GCC конечно, я на работе 084 версию компильнул с 1 раза, без ошибок и проблем. проверял в консоли - все работало. scid у меня не был установлен, поэтому на позициях проверить не смог. ну а раз Юрий уже что-то сдлелал - то можно общими усилиями доделать.
Posted: 24.10.09 09:54. Post subject: С makefile чего-то н..
С makefile чего-то не выходит, nmake ругается. Когда делал в Студии через создание проекта, то проблемы были такие: 1. Не понимала asm-вставок, пришлось брать из Стрелки. 2. Не находила стандартных h-файлов, и связанных с ними функций получения времени и stdin/stdout. Заменил время на GetTickCount, а отслеживание ввода вообще вырубил. 3. Не нашла функцию posix_memalign - заменил на malloc. Судя по названию последней функции, это заточено под Linux.
Posted: 24.10.09 10:54. Post subject: Robbolito 0084 x64 И..
Robbolito 0084 x64 Изменение размера хэша сделано оригинально - надо открыть опции UCI и проставить там нужное значение вручную... Попробовал сначала обычным способом - Робболито завис.
P.S. У меня вылетает каждый раз при попытке послать лучший ход. Матч играть невозможно.
Posted: 24.10.09 10:55. Post subject: Даже версия 0084 выг..
Даже версия 0084 от Osipov выглядит посильнее Ипполита +2=2-0 (даже работает турнирный контроль) Вся надежда на доблестных программистов форума и они доведут 0085 (а может и последующие версии) до exe под win. Если не хотите менять имя движка, то добавляйте пожалуйста к номеру версии постфикс, указывающий на то, чья версия скомпилированного exe выложена.
Posted: 24.10.09 11:06. Post subject: Радует, что работа а..
Радует, что работа авторов над движком вроде бы продолжается и пока нет предпосылок, что новые версии исходников не будут выкладываться на сайт. Возможно, авторы предполагали обвинения в клонировании, поэтому изначально не нацеливались на коммерческую версию. Счет уже +3=5-1 в пользу RobboLito 0084 против Ippolit 0.080b
Posted: 24.10.09 11:31. Post subject: Там я убил приём ком..
Там я убил приём команд от оболочки во время думания. От того и виснет. Надо будет прикрутить стандартный input-available. К тому же Robbolito тоже не совсем свободен от багов Ипполита, на него тоже нападает порча после нескольких партий. Поэтому, при тестировании под Ареной я поставил птичку: перегружать движки после каждой партии.
Posted: 24.10.09 11:38. Post subject: Robbolito 0084 x64 ..
quote:
Robbolito 0084 x64 Изменение размера хэша сделано оригинально - надо открыть опции UCI и проставить там нужное значение вручную... Попробовал сначала обычным способом - Робболито завис.
P.S. У меня вылетает каждый раз при попытке послать лучший ход. Матч играть невозможно.
Большая просьба выложить откомпилированную 64-битную версию, если она годится хотя бы для анализа
Posted: 24.10.09 12:03. Post subject: под линукс х64 без п..
quote:
под линукс х64 без проблем
Ясно. Я думал, что если там файл .vcproj, то это - проект VS, а если VS, то для виндовз Тогда еще вопрос(ы). :) Чем, по-вашему, вызвано, что версии выкладываются только под Линукс? И как вообще его запускать в линуксе, под какой оболочкой? Я думал, что только под вайн запускаются виндовзкие облочки, а в них движки... По крайней мере, с рыбкой я не видел других вариантов
Posted: 24.10.09 12:06. Post subject: onedrey то что вылож..
onedrey то что выложил Юрий - да под виндовс, но у меня его проект не компилируется. а то что под линукс - компилишь, получаешь запускаемый файл, и запускаешь его в оболочке линукса, например scid (других незнаю).
Posted: 24.10.09 20:41. Post subject: или просто авторы ра..
quote:
или просто авторы работают на линуксе
Это понятно. Не ясно, как он его могут тестировать, если не в партиях с рыбой? Потому что под wine будет неадекватное сравнение.. Со старыми версиями стравливают? Можно, конечно, на разных машинах запустить рыбу и ипполита...
Posted: 26.10.09 22:38. Post subject: В робболите зачем-то..
В робболите зачем-то время в миллисекундах умножается на 1000?! А вот такой код вызывает ошибки, и очень тяжело понять его поведение: void risolvere_termine (int d) { sint64 x; if (!salto_ok) return; x = orologio () - OROLOGIO; nodo_conteggio = nodo_frequenza; if (d == ABISSO) // предельная глубина cerca_alt (1); if (x - INVIO > 1000000) notizia (x); if (d >= 1 && d < 8) goto FINALE; if (x > ORA_ASSOLUTA) cerca_alt (1); if (d == 0) goto FINALE; if (!MOSSA_BRUTTA && x >= ORA_BATTAGLIA) cerca_alt (2); if (FACILE && x >= ORA_FACILE) cerca_alt (3); if (!MOSSA_BATTAGLIA && x >= ORA_ORDINARIA && !MOSSA_BRUTTA) cerca_alt (4); FINALE: while (interrogativo_ingresso ()) input_console (); } Аварийки срабатывают криво. Процедура эта запускается раз в неколько тысяч генераций ходов, а ней и аварийка по времени (при этом она не срабатывает при Depth от одного до восьми), и аварийка при достижении предельной глубины (255)
Posted: 27.10.09 23:00. Post subject: Кроче - посмотрел на..
Кроче - посмотрел на свежую голову, ничего особо править не надо. Достаточно поставить запас времени. То есть перед расчетом времени написать
if (movestogo) ORA = (ORA - 1000000 - movestogo * 200000); else ORA = (ORA - 1000000 - 40 * 200000); // в безлимитке запасаемся на 40 ходов.
//Ну и в случае израсходования времени, чтоб совсем не блицевала - if (ORA < 100000) ORA = 100000;
И в аварийках убрать условие на глубину
// if (d >= 1 && d < 8) // goto FINALE;
Либо переместить его сразу за основную аварийку
if (x > ORA_ASSOLUTA) cerca_alt (1); if (d >= 0 && d < 8) // при d==0 не надо использовать методы сокращения времени, это не вызов из корня goto FINALE;
А вторая причина зависаний - это останавливаются часы. Надо смотреть где с разрядностью переменных накосячено. uint64 x; x = GetTickCount() * 1000; В этом коде переполнение наверно действительно получается.
Posted: 28.10.09 09:49. Post subject: x = GetTickCount() ..
quote:
x = GetTickCount() * 1000;
Не должно переполнить. Эта функция возвращает число мс с момента старта ОС. Т.е. спустя сутки после включения компа это число всего 86 400 000. Это если я не нагнал в подсчетах
Posted: 28.10.09 10:13. Post subject: А может всё-таки рез..
А может всё-таки результат умножения будет int32? Не знаю соглашений в этом языке, а в делфи резльтат будет 100% int32, а потом уже будет преобразовываться в int64.
Posted: 28.10.09 10:26. Post subject: NS А может всё-таки ..
NS
quote:
А может всё-таки результат умножения будет int32? Не знаю соглашений в этом языке, а в делфи резльтат будет 100% int32, а потом уже будет преобразовываться в int64.
Результат умножения будет 32-битный, и будет переполнятся 20 раз в сутки.
Достаточно один из операндов преобразовать в 64 бита.
Posted: 28.10.09 10:41. Post subject: Знаю. Это я издеваюс..
Знаю. Это я издеваюсь так. Я же выше написал что глюк в этом месте. Точнее - не проверял, но был практически уверен что приведение типов работает также как в делфи. bankuss пишет:
quote:
дуп да, надо поправить. хотя у меня и с lld вроде без ошибок выводит
Posted: 28.10.09 11:38. Post subject: Да, так не влезает. ..
Да, так не влезает. Никогда про такое не слышал и не читал. Так и не понял почему. Даже если он при таких дефайнах неявно приводит множитель к 4-байтному типу, при чем тут результат?
Posted: 28.10.09 11:50. Post subject: Результат перемножен..
Результат перемножения четырехбайтных - четырехбайтное число. потеряли точность уже в процессе умножения. Понять вроде очень просто. Чтоб в результате умножения получить 64битное - нужно один из множителей привести к 64битному виду. Ты в своем примере умножаешь 64битное, поэтому у тебя всё ОК. А GetTickCount -32 битное.
Posted: 28.10.09 11:53. Post subject: Результат умножения ..
Результат умножения двух 32-битных чисел сперва записывается в 32-битный регистр, а уж затем значение из этого регистра записывается в 64-битную переменную. Естественно старшие разряды теряются.
Posted: 28.10.09 12:13. Post subject: NS пишет: А вторая ..
NS пишет:
quote:
А вторая причина зависаний - это останавливаются часы. Надо смотреть где с разрядностью переменных накосячено. uint64 x; x = GetTickCount() * 1000; В этом коде переполнение наверно действительно получается.
Вот где недоразумение. Вы то говорите глядя как в коде, а я только на пост NS. А у него здесть x uint64
Posted: 28.10.09 13:25. Post subject: Мда... Непросто все ..
Мда... Непросто все с компилятором. Подскажите пожалуйста к чему в Иппо структура type_dynamics? Ведь для хеширования есть type_hash_variated. И что за 32хбитные _7, _9, _0...? Причем первой структуры наинициализировано 16384 экземпляра, а второй, сложной, 1024.
if (!is_pipe) { SetConsoleMode(stdin_h,val&~(ENABLE_MOUSE_INPUT|ENABLE_WINDOW_INPUT)); FlushConsoleInputBuffer(stdin_h); // no idea if we can lose data doing this } } это фруктовый
Posted: 29.10.09 14:48. Post subject: source code translation
hi bankuss, and everyone-
i have completed translation of the 0.085c3 source code from Italian to common English programming terms... i'd be happy to share it with you if you are interested...(much easier to follow if one doesn't speak Italian well) i will begin soon to concentrate on SMP...
perhaps we can begin to work together for further development... are you interested?
Re: What's this engine ? by Denis P. Mendoza on Thu Oct 29, 2009 12:22 pm
Like you, I'm only good in another filed, so I let them gossip among themselves in third person mode .
I still have no work at the moment (waiting for another mission), so i just scan the net on what interests me - like the links you mentioned.
My opinions are too trivial for the experts in those forums. I'm a practical guy and I only involve myself to the level my brains can handle . In the first place, I like IPPOLIT and ROBBOLITO same as Protector - open source stuffs...period! Whether we like it or not (good or bad), these works of Yakov, Igor, Vladimir, Roberto, Yusuf, and the rest of the other supporters will revolutionize the next set of engines in the future. Crafty, Fruit, Glaurung and Strelka had started it before. Nice job comrades!....as they say in Red Alert (game)....For the UNION!
I think Vas will just shrug this "clone" talks aside and just move on in his Rybka cluster experiments. That is more important, as still some chronic chess activists are using this issue to rekindle the case about Rybka being a Fruit clone, hiding true nps, etc. It's sounds like a broken record.
Let's move on and enjoy the fruits of computerchess.
Posted: 29.10.09 20:14. Post subject: This is extracted fr..
This is extracted from the bugs topic on Ippolit site
Bugs Location for workers to deposit bugs.
Current The current version 0.085d has had no reported bugs. Update: nodes appear negative beyond 2^31..... info time 1075380 nodes -2145685551 nps 1998000 cpuload 999 Looks like sorvegliare.c has a TRASMISSIONE with %d rather than %lld in notizia
Fixed RobboLito 0.085: Failings with captures (cattura) for Robbo_glue.c: fixed (Igor). RobboLito 0.085b: Igor's "fix" was unfunctional. Fixes correctly, I hope (RP). RobboLito 0.085c: Changed recurse in RobboBuild (failed with BPb). RobboLito 0.085c2: Previous fix (Igor) for lazy failed. New with valu.c: #define bianco_minore_pietra (8<<2) #define nero_minore_pietra (16<<2) Previous: decimating the double sinister shuffle.
Posted: 29.10.09 20:47. Post subject: Банкусс, нафига бало..
Банкусс, нафига бало городить весь этот огород, если достаточно было закомментить
// if (stdin->_cnt > 0) // return 1; За ненадобностью, и добавить в случае консольного ввода условие на GetNumberOfConsoleInputEvents(stdin_h, &count); if (count && PeekConsoleInputA(stdin_h...
Posted: 30.10.09 20:00. Post subject: В строке "0123nb..
В строке "0123nbrq" девять символов. Девятый tipo по умолчанию '\0'. Если поменять расширение на "cpp" не скомпилируется. Компилятор выдаст ошибку "overflow" в этом месте. Хотя может тут это и не важно.
Posted: 31.10.09 00:51. Post subject: Yuri, you are absolu..
Yuri, you are absolutely right. Rybka is using this nice nonlinear aggressive function, while in Robbo it is limited to TimeMax/movestogo in the most aggressive setting. That is why Robbo is taking time linearly, and always taking less. Also the absolute longest time Rybka can take is TimeMax*9/15, and for Robbo is TimeMax/2.
Direct example in 40 moves time control, around 15th move, Rybka allocates 0.047*TimeMax, while Robbo allocates only 0.04*TimeMax and that only in the most aggressive setting (otherwise is half of it).
This is definitively something that must be changed.
Posted: 02.11.09 22:54. Post subject: В этом интервью авто..
В этом интервью автор Рыбки рассказывал о WinFinder-е
quote:
Я потратил много времени, работая над поиском в Рыбке 2.2, а WinFinder был небольшим экспериментом для некоторых моих идей. Я разрабатывал WinFinder всего пару дней, так что эта версия совершенно недоработана. Тем не менее, концепция создания WinFinder достаточно интересна, и в третьей версии вы увидите подобную модификацию Рыбки. Если я смогу выделить хотя бы две недели на разработку Rybka 3 WinFinder, то все будет сделано как следует.
Если предположить, что корни Ипоолита (Робболита) растут из Рыбки (я в этом уверен на 99%), то возникает вопрос: В чем именно состоит «концепция создания WinFinder»? Либо это IID, чуть более продвинутая, чем у остальных, либо использование тактической составляющей ОФ при отсечениях (см. tower_dynamics->white_encoded_xray), либо что-то еще. Интересно узнать мнение поизучавших исходники.
Posted: 04.11.09 09:32. Post subject: Лучше поменять, GetT..
Лучше поменять, GetTickCount() считает не время, и какие только глюки с ним не бывают... У него одно преимущество - он быстрее, и если замена на timeGetTime не просадит NPS, то лучше заменить.
Posted: 04.11.09 10:21. Post subject: NS почитал описание ..
NS почитал описание - функции похожие, только timeGetTime более точная. при простой вставке компиляция сразу выдает ошибку Ошибка 1 error LNK2001: неразрешенный внешний символ "__imp_timeGetTime" utils.obj
Posted: 04.11.09 11:38. Post subject: Сглючило меня. Совсе..
Сглючило меня. Совсем не время выдает PerformanceCounter, GetTickCount выдает время, но с большой погрешностью.
quote:
timeGetTime обращается к таймеру напрямую, читая из него текущее значение внутреннего счетчика. Функция GetTickCount обращается к переменной в памяти, которая обновляется приблизительно раз в 16 мс. Приблизительно потому, что точно невозможно: в системе могут идти какие-то высокоприоритетные процессы, которые прерывать нельзя. Но в момент обновления в счетчик добавляется не 16, а столько, сколько реально набежало
Posted: 04.11.09 12:09. Post subject: Bison пишет: В чем ..
Bison пишет:
quote:
В чем именно состоит «концепция создания WinFinder»? Либо это IID, чуть более продвинутая, чем у остальных, либо использование тактической составляющей ОФ при отсечениях (см. tower_dynamics->white_encoded_xray), либо что-то еще. Интересно узнать мнение поизучавших исходники.
Думаю что в WF просто убраны отсечения уменьшающие тактическую силу, и добавлены продления увеличивающие. И упрощена ОФ.
Posted: 04.11.09 18:50. Post subject: Time forfeits have n..
Time forfeits have nothing to do with GetTickCount(). Still 16ms is not precise enough, so in the next version there will be changes, I'm currently testing the code with QueryPerformanceCounter, and it seams to be working fine. Of course, the code compatibility is gone, but something must be scarified.
Posted: 05.11.09 10:49. Post subject: сделал версию с родн..
сделал версию с родной поддержкой RB (robbobases) и даже генератор этих таблиц скомпилялся (пришлось многопоточность вырубать) но создание файлов таблиц надо коренным образом переписывать. ибо файловые системы линукса и винды отличаются, что линуксу хорошо, то винде смерть хотя он создает несколько файлов, но на генерации коня вылетает с ошибкой. (на 3-х фигурке пробую)
Posted: 08.11.09 17:35. Post subject: Оказывается у Robbol..
Оказывается у Robbolito поиск в Cut узлах продлевается больше, чем в PV. Причем это даже не продления, а увеличение глубины перебора при определненных условиях !
Posted: 08.11.09 18:44. Post subject: Я так понимаю сила R..
Я так понимаю сила Robbo как раз и состоит в хитром сочетании продлений и сокращений. WildCat пишет:
quote:
Единственные ходы вроде надо продлевать во всем дереве.
Полностью согласен. Или во всем, или нигде, но чтобы в Cut было, а в PV - нет, - это что-то странное! WildCat пишет:
quote:
Тут важнее как определять единственность хода.
Она, кстати, тоже как-то подозрительно определяется. Чем меньше глубина - тем менее строгие условия на единственность. Как мне кажется должно быть или наоборот, или везде одинаково.
Posted: 08.11.09 21:18. Post subject: Я попробавал написат..
Я попробавал написать то же самое в PV, и time management предсказуемо перестал нормально работать - второй (от корня) узел principal variation часто просчитывался на большую глубину чем первый , соответственно прога долго думала над очевидными ходами. Думаю имеет смысл протестировать 4 версии: 1) Убрать продления связанные с altezza/heigth везде. 2) Добавить их в PV, но при этом ограничить значение SINGULAR двойкой (и в PV, и в Cut): SINGULAR = MINIMUM(SINGULAR,2); 3),4) - То же, только запускать exclusion search не с параметром beta = value - DEPTH/2 (value - DEPTH, value - 2 * DEPTH), a, например, с value - 8 (value - 16, value - 32 соответственно). Может быть именно в этом причина падения рейтинга Рыбы при увеличении контроля времени. Вообще фишка с продлениями по altezza/height усиливает тактическую зоркость, но не факт, что положительно сказывается на силе игры. Пока после 92 партий версия 3) набирает против исходной +4 Elo: +17-16=59.
Posted: 08.11.09 23:17. Post subject: Пожалуй, самым любоп..
Пожалуй, самым любопытным и загадочным для меня в Ипполите является чередование функций WhiteCut() (или BlackCut) и WhiteAll(). Выглядит это как-то так: PV->Cut->All->Cut->...->Slide (при depth <= 3.5 ply). Причем All() на первый взгляд кажется более строгой в плане прунинга и сокращения глубины. Зачем нужно было городить такой огород - непонятно. Версия у меня пока только такая - при итеративном углублении в корне поиска таким образом происходит чередование сторон, за одну ищутся угрозы сопернику, а другая как бы защищается. Любая найденная угроза все равно запишется в trans. Звучит, конечно, довольно бредово, примерно как совет давать программе считать на четную глубину , но другого объяснения не вижу.
Posted: 09.11.09 07:55. Post subject: Это ведь стандартная..
Это ведь стандартная фишка еще со времен Фрукта. Cut узлы лучше сильно не резать, так как это может превести к дополнительному перебору соотвествующей ветки поиска уже в PV режиме. Кстати можно попробовать схему Cut/All узлов не как во Фрукте, а как в Стрелке.
Posted: 09.11.09 19:40. Post subject: Отлично работает вер..
Отлично работает версия Robbolito0.084Linux правда Kn/s выводит заоблачный,причем чем больше анализирует тем больше Kn/s Интересно это ошибочно или реально?
Posted: 09.11.09 22:06. Post subject: Chessved пишет: ms ..
Chessved пишет:
quote:
ms 13, можно поинтересоваться, как запустили движок под линуксом? Это какой GUI на скрине показан?
bankuss пишет:
quote:
ms 13 в 084 есть ошибка в выводе, так что это глюк )))
у меня в SCID linux роболито так и не запустился.
В SCID linux у меня тоже не запустился,вернее запустился в диспечере но анализировать не хочет.Зато отлично работаетв Shredder Classic 4 Linux впрочем как и Spike,ZappaMexico2,Fruit...но не тот gui. Было бы неплохо прикрутить все это к Xboard через Polyglot там потестировать можно, если ктото в курсе обьясните плис.Поскольку я не программист если можно скомпилируйте RobboLito0.085d.Linux
Posted: 09.11.09 22:12. Post subject: ms 13 пишет: можно ..
ms 13 пишет:
quote:
можно скомпилируйте RobboLito0.085d.Linux
сам можешь сделать, в папке с исходниками набери make и жди. скомпилятся 2 проги - сам роб и генератор таблиц. все, юзай. в системе должен стоять GCC, если нет, качни с репов.
Posted: 11.11.09 17:27. Post subject: Расширение с одной б..
Расширение с одной буквой.Собрал TotalBase 5 фигурки, и TripleBase 4 фигурки Правда как их прикрутить к Roobbolito так и не понял,прописал директорию в оболочке но движок с ними не работает Hidden text. Click here
Оболочку использовал DeepShredder11Linux .Пусть простят админы за офтоп прекрасно в ней работает Rybka3Linux и ненужно заморачиватся с engineServer и с engineClient.[hideguest]Оболочка есть на форуме,но установить ее не такто просто пред установкой нужно отредактировать исполняемый файл InstallJava заменив JREARCHIVE=jre-6u3-linux-i586.bin на JREARCHIVE=jre-6u16-linux-i586.bin.После установки Java нужно отредактировать исполняемый файл DeepShredder11 заменив JREDIR=jre1.6.0_03 на JREDIR=jre1.6.0_16.После чего запустить keygen в директории.Если нет желания заморачиватся можете скачать оболочку с установленой Java DeepShredder11Linux[/hideguest]
я просто их в отдельную директорию скидывал Доделаю чуть позже 5 фигурки+6 фигурки пока через VirtualBox это не реально.Можно сделать так чтобы эти базы работали в окнах?
Posted: 11.11.09 19:10. Post subject: ms 13 у меня есть ви..
ms 13 у меня есть виндовая версия с таблицами, но при достижении таблиц движок вылетает с ошибкой. видимо линуксовый код не так корректно в винде работает. где подкручивать пока не ясно...
Posted: 14.11.09 15:05. Post subject: Вроде как хеш в Робб..
Вроде как хеш в Робболите не очень. Из любопытства захотел посмотреть на числа-идентификаторы в хеш таблице(хеш-ключи). Имеется в ввиду во время игры. Для сравнения сделал то же самое со Стрелкой. Со Стрелкой удобно, потому что и там и там хеш "фруктового" типа и число это 32-битное. В Робе называется type_zobrist.zobrist , в Стрелке entry_t.lock. Хеш 128 мб, контроль 5 мин. После 15 хода картина такая (в скобках те же показатели у Стрелки):
Всего ячеек в таблице - 8388608 (8388611). К 15 ходу равны нулю (не востребованы) - 113728 (3627).
Еще проверил первую тысячу этих чисел на уникальность. Из тысячи 47 имеют повторы. Нули, конечно, не рассматривались. В Стрелке на 1000 нашлось только одно такое число. Только вот не знаю, этот последний показатель говорит о коллизиях, или нет? Но в любом случае, чем их меньше тем лучше. Партию один хрен Робболит выиграл
Posted: 14.11.09 15:53. Post subject: дуп пишет: Еще пров..
дуп пишет:
quote:
Еще проверил первую тысячу этих чисел на уникальность. Из тысячи 47 имеют повторы. Нули, конечно, не рассматривались. В Стрелке на 1000 нашлось только одно такое число.
О какой уникальности идет речь? Коллизии, когда идет запись позиции, уже находящейся в хэше?
Posted: 14.11.09 16:35. Post subject: ThinkingALot пишет: ..
ThinkingALot пишет:
quote:
Коллизии, когда идет запись позиции, уже находящейся в хэше?
Не знаю. Что конкретно записано по тому или иному адресу я не проверял. Может быть это и не коллизии. Просто по разным адресам записан один и тот же хеш-ключ. Позиции могут быть и разными. Скорее всего так и есть. В идеале должно быть для каждой записи - свой id. Может быть то, что в Роббо это сильно не так ни о чем и не говорит. Просто мне захотелось проверить - я и проверил.
Возможно это значит, что для зобриста плохо подобраны числа.
Posted: 14.11.09 16:55. Post subject: дуп пишет: Просто п..
дуп пишет:
quote:
Просто по разным адресам записан один и тот же хеш-ключ.
Логично. Для вычесления адреса используются младшие 32 бита DYNAMIC->zobrist, а для ключа - старшие. Но то, что случаев совпадения 47 на 1000, - это нечто невероятное! По идее должно быть 1 на 10^9.
Posted: 14.11.09 17:03. Post subject: ThinkingALot пишет: ..
ThinkingALot пишет:
quote:
Но то, что случаев совпадения 47 на 1000, - это нечто невероятное!
Ну а я о чем? По одним адресам часто перезаписывается, а другие лежат без дела. Очень неравномерное распределение индексов(имхо). Может попробовать взять "случайные" числа из Стрелки?
Posted: 22.11.09 02:00. Post subject: Bankus Здравствуйте,..
Bankus Здравствуйте, простите за мой плохой русский (я итальянская) Я хотел спросить, как активировать "размышлял" по версии Linux от Robbo. E 'возможно? Спасибо.
Posted: 25.11.09 12:47. Post subject: ThinkingALot В Иппо..
ThinkingALot В Ипполите это не критично. Там весьма интересная функция накручивания счетчика, которой требуется меньше ходов на обрабоку новой позиции, да и ходы остаются примерно те же, всего-то 2 хода сделано с прошлой позиции.
Posted: 06.12.09 14:07. Post subject: Еще две странности: ..
Еще две странности: 1) В корне, если произошла отсечка, перебор еще раз запускается с нулевым окном, но уже в PV режиме. Во всех остальных PV узлах такого нет. 2) В PV узлах значения из хэша могут возвращаться только в игровом режиме, когда ограниченно время на ход.
Posted: 12.12.09 21:21. Post subject: Продления в Robbo оп..
Продления в Robbo определяются с помощью вызова exclusion search. При этом оценка всех ходов, кроме хода из хэша, должна быть не выше (beta - margin). В PV узлах этот margin в два раза меньше чем в Cut узлах. Я попробовал в Cut тот же margin, что и в PV (только в обычном поиске - если шах, то оставил двойной margin). По логике вещей скорость набора глубины должна была бы существенно упасть. Но она НЕ упала ! Кто-нибудь понимает, почему?
Posted: 12.12.09 23:13. Post subject: Возможно потому, что..
Возможно потому, что таких позиций, в которых срабатывает singular продление, не так уж и много, плюс все это дело запускается на довольно больших глубинах, поэтому и разница почти не чувствуется.
Posted: 29.12.09 19:27. Post subject: Нашел БАГ. Если доба..
Нашел БАГ. Если добавить в структуру type_dynamic переменную типа uint8, которая потом нигде не используется, то есть, по идее, не должна ни на что влиять, происходит следующее. 1) Изменяется поиск: для перебора на ту же глубину требуется другое количество узлов. 2) В определенный момент Роббо вылетает с ошибкой. Если переменная типа uint16, то все ОК. Получается, что зачем-то необходимо двухбайтовое выравнивание.
А... понял в чем дело. Размер type_dynamic используется в move_make.c - там он предполагается равным 32-м байтам.
Posted: 30.12.09 15:56. Post subject: ThinkingALot writes:..
ThinkingALot writes:
quote:
Нашел БАГ. Если добавить в структуру type_dynamic переменную типа uint8, которая потом нигде не используется, то есть, по идее, не должна ни на что влиять, происходит следующее.
These dummy bytes (words) are used in hash structures for memory alignment to 64bits. It's very important thing (more then 5% in speed). I double checked it, and it's all correct.
Posted: 16.01.10 17:22. Post subject: посмотрел что засыла..
посмотрел что засылает аквариум движку: setoption name UCI_AnalyseMode value true position startposgo infinite stop setoption name UCI_AnalyseMode value false position fen ................... go infinite stop setoption name UCI_AnalyseMode value false setoption name UCI_AnalyseMode value true
и т.д. что интересно постоянно шлет команду UCI_AnalyseMode, для перевода движка в режим анализа. Из опенсорсных ее только вяленый и глаурунг видят. рыбка-3 такой команды не знает. но это не суть. движок тупо запускается в бесконечный режим (режим анализа) и потом прерывается командой стоп, после этого смотрит что выдал движок и пишет в дерево. вот в этом месте у айвенго где-то что-то не то. работает явно не так, как надо.
Posted: 10.02.10 18:17. Post subject: prefetch опция на ко..
prefetch опция на компиляторах MS VC просто напросто отсутствует, она имеется только в GСС:
"Чтобы минимизировать задержки доступа к данным и таким образом улучшить производительность, лучше всего держать данные в ближайшей к процессору памяти. Выполнение этой задачи вручную называется предварительной выборкой. GCC поддерживает предварительную выборку данных вручную с помощью встроенной функции, называемой __builtin_prefetch. Эта функция используется для помещения данных в кэш незадолго до того как они понадобятся."
так что данный ключ ничего не делает в виндозных компиляциях от MS (Visual studio). А жаль...