Ипполитоообразные движки

Тема в разделе "Машинное отделение", создана пользователем Renegat23, 11 янв 2010.

  1. Осипов Юрий Учаcтник

    • Участник
    Рег.:
    18.06.2007
    Сообщения:
    399
    Симпатии:
    475
    Репутация:
    11
    Адрес:
    Правда
    Оффлайн
    Школьного курса информатики маловато будет. Хотя работа не сложная.
    Вообще, если будет время и не будет лень, то попробую пропатчить Гудини. Точно не буду обещать, но если сделаю, то о результате сообщу туда, куда не знает путь При_вет.
  2. dan77790 Учаcтник

    • Участник
    Рег.:
    06.03.2008
    Сообщения:
    3.792
    Симпатии:
    17
    Репутация:
    0
    Оффлайн
    Спасибо, Юрий :)

    А ведь наверняка более-менее скоро выйдет и новая версия Гудини...
  3. просроченый_кмс Старожил

    • Участник
    • Старожил
    Рег.:
    15.02.2010
    Сообщения:
    1.112
    Симпатии:
    167
    Репутация:
    6
    Оффлайн
    Что за фигню вы пишите, гудини показывает нормальную оценку, по позиции.
  4. Осипов Юрий Учаcтник

    • Участник
    Рег.:
    18.06.2007
    Сообщения:
    399
    Симпатии:
    475
    Репутация:
    11
    Адрес:
    Правда
    Оффлайн
    В самом деле, что за фигню я пишу? Если бы Гудини показывал свою настоящую оценку, никто бы не поверил, что она у него на самом деле такая. Например, в начальной позиции по команде go depth 1 Гудини выдает ход e2e4 с оценкой +49. А на самом деле оценка у него равна аж +118! Простой ход e2e4 дает позиционный перевес больше пешки!
    А это всего лишь PST пешки на e4 плюс мобильность ферзя и слона.

    Проверяется легко. Для желающих сделать это:
    1. Берем файл Houdini_15a_w32.exe
    2. Открываем его в отладчике (я использую IdaPro) и ставим breakpoint по адресу 0x5323C0. Это начало функции, которая пересчитывает оценку при выводе.
    3. Запускаем отладчик, даем команду go depth 1 и после останова на этом адресе смотрим на значение регистра ecx. Это значение - настоящая оценка Гудини. В нашем случае она равна 0x76 (hex) или 118 (dec)
    4. Смещаемся на несколько десятков строк ниже до команды push eax и смотрим значение регистра eax. Там видим число 0x31 (hex) или 49 (dec). Это то, что Гудини выведет.
  5. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    осталось сваять патчик )))
  6. dan77790 Учаcтник

    • Участник
    Рег.:
    06.03.2008
    Сообщения:
    3.792
    Симпатии:
    17
    Репутация:
    0
    Оффлайн
    А на чем написан Гудини?) С++ наверное....
  7. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    или простой Си, другого не дано )
  8. Осипов Юрий Учаcтник

    • Участник
    Рег.:
    18.06.2007
    Сообщения:
    399
    Симпатии:
    475
    Репутация:
    11
    Адрес:
    Правда
    Оффлайн
    Сваял. Ищите ссылку у дохлика невмерущего.
  9. Kesandr Учаcтник

    • Участник
    Рег.:
    02.09.2008
    Сообщения:
    464
    Симпатии:
    35
    Репутация:
    11
    Оффлайн
    А дайте пожалоста ссилку где иммено.Чесное слово незнаю.
  10. Gildar Старожил

    • Участник
    • Старожил
    Рег.:
    09.01.2009
    Сообщения:
    2.216
    Симпатии:
    57
    Репутация:
    6
    Оффлайн
    Юрий, а как вы могли его поправить если исходники вроде как закрыты? :)
  11. immortal223 Вячеслав

    • Участник
    Рег.:
    22.02.2006
    Сообщения:
    2.412
    Симпатии:
    15
    Репутация:
    0
    Оффлайн
  12. dan77790 Учаcтник

    • Участник
    Рег.:
    06.03.2008
    Сообщения:
    3.792
    Симпатии:
    17
    Репутация:
    0
    Оффлайн

    Немного уличной магии) Дэвид Блэйн :)
  13. Crest Админ, МГ

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    57.242
    Симпатии:
    21.128
    Репутация:
    627
    Адрес:
    Москва, Россия
    Оффлайн
    И что дальше делать с этим файлом? Зачем нужен этот патч?

    А! Вижу пост 599. Х-ммм...
    Ничего не понял! :)
    Ладно, это для вас - для профи.
  14. просроченый_кмс Старожил

    • Участник
    • Старожил
    Рег.:
    15.02.2010
    Сообщения:
    1.112
    Симпатии:
    167
    Репутация:
    6
    Оффлайн
    Ну и что, это его личное дело как оценивать отдельные последние позиции хоть +2 главное что с учётом минимакса и глубины вариантов всё это приводится в норму.
    А насчёт того что выводит и что считает, может там вообще разные переменные которые к оценке не относятся.
    И ецеикс это не еаикс.
  15. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    а зачем исходники?
    можно прямо в ассемблере все поправить. (в exe).

    подключить в оболочку и смотреть на РЕАЛЬНУЮ оценку Гудини.
  16. просроченый_кмс Старожил

    • Участник
    • Старожил
    Рег.:
    15.02.2010
    Сообщения:
    1.112
    Симпатии:
    167
    Репутация:
    6
    Оффлайн
    У гудини реальная оценка, я смотрю некоторые позиции, например смотрю скандинавку он за белых часто показывает +0,4 например, значит так и есть и я с этим согласен.
  17. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    смысл? когда проще прогнать через "искажатель". как например делает Васик в рыбке.

    а оценка намного реальней стала, приятно смотреть.
    вот поза из франции... фриц 10 белым дает +1.15 на глубине 18,
    попатченный гуди не отстает: +1.12 на 23 глубине. (изначално оценка была +0.47)
  18. просроченый_кмс Старожил

    • Участник
    • Старожил
    Рег.:
    15.02.2010
    Сообщения:
    1.112
    Симпатии:
    167
    Репутация:
    6
    Оффлайн
    Ну я от том и говорю кто тут что то там в коде нашёл может ошибаться, и оценка показывается правильная.
  19. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    непонятно... кто может ошибаться?

    в моем примере гуди оперирует в "мозгах" оценкой +1.12, а на вывод в консоль (в ГУИ) выдает +0.47
    патч Юрия блокирует "искажатель" и мы видим реальную оценку в +1.12 уже на выходе.
  20. просроченый_кмс Старожил

    • Участник
    • Старожил
    Рег.:
    15.02.2010
    Сообщения:
    1.112
    Симпатии:
    167
    Репутация:
    6
    Оффлайн
    Кто кто Осипов и (dan77790 иди к гадалкам они тоже много чего говорят) нечего мне в репу ставить я немного увлекался программированием и хоть не разбираюсь пытаюсь мыслить логически а не принимать на веру, на этом же построены всякие лохотроны наговорить умных слов простакам а они и поверят.


    2. не факт что это начало функции поторая пересчитывает оценку, сказать можно всё что угодно.
    3. сначала он нам предлагает посмотреть на ecx а потом через несколько десятков строк вдруг на eax, тогда уж надо приводить эти 10ки строк с подробным описанием а так опять пустая болтовня т.е. мы не знаем что там было.
  21. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    факт искажения оценки известен еще с первых версии гудини. но можете и в это не верить :D

    берете IdaPro и сами смотрите, чтобы укрепиться в вере ))).
  22. Greedy Учаcтник

    • Участник
    Рег.:
    22.01.2010
    Сообщения:
    448
    Симпатии:
    12
    Репутация:
    0
    Оффлайн
    Это не искажатель, а нормализатель.
    Ибо чтобы действительно понять, что эта за внутренняя оценка - необходимо оценить очень много параметров. В идеале, весь механизм оценки. Программа же на выходе (и это делают многие шахматные проги), проводит нормализацию оценки и выдаёт её в привычном для пользователей виде.
  23. dan77790 Учаcтник

    • Участник
    Рег.:
    06.03.2008
    Сообщения:
    3.792
    Симпатии:
    17
    Репутация:
    0
    Оффлайн

    Человек паходу вообще в программинге лыка не вяжет) Даже больше, чем я
  24. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    что вы под этим имеете ввиду?

    "нормализация" есть в плане вывода матовой оценки, чтобы показывать не +3000, а мат в 10 ходов, например.
    больше на память никаких "нормализаций" не приходит...
  25. Crest Админ, МГ

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    57.242
    Симпатии:
    21.128
    Репутация:
    627
    Адрес:
    Москва, Россия
    Оффлайн
    Именно. Внутренние, кухонные числовые показатели программы - её личное дело.
    Важно, чтобы она выдавала нормальные, адекватные оценки на выходе. И Гудини это делает. Да и Рыбка тоже.
  26. просроченый_кмс Старожил

    • Участник
    • Старожил
    Рег.:
    15.02.2010
    Сообщения:
    1.112
    Симпатии:
    167
    Репутация:
    6
    Оффлайн
    Вот умная и самое главное логичная мысля, а то вылезли горе программисты - "искажает", может все параметры внутри программы в целочисленном виде в 100 раз больше и что бы привести к нормальному виду программа в конце дели на 100, к примеру.
  27. Crest Админ, МГ

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    57.242
    Симпатии:
    21.128
    Репутация:
    627
    Адрес:
    Москва, Россия
    Оффлайн
    Дорогой кмс, давайте-ка будем повежливей в общении.
    У нас в принципе не принято так резко отвечать оппонентам.
    К тому же в данном случае Вы отвечаете людям, которые разбираются в программировании и в движках примерно в сто раз лучше Вашего.
    Сделайте для начала свой движок, доведите его уровень до приличного - тогда и поговорите, скажем, с Юрием Осиповым на равных. А пока...
  28. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    :D


    вот вам для примера "нормализаторы" ипполита:

    void informatory (SINT64 x)
    {
    UINT64 t, speed, N = nodals_white + nodals_black + nodals_nobody;
    clock_t u = clock ();

    previous_informatory = x;
    t = x / 1000;
    if (t == 0)
    speed = 0;
    else
    speed = N / t;
    u = clock () - initialization_ducat;
    PRINTF ("info time %d nodes " uint64_type " nps %d cpuload %d\n", (UINT32) t, N, (UINT32) (speed * 1000), (int) ((double) u / (double) x * 1000.0));
    FFLUSH ();
    }

    static char *centipawns_or_mate (int score, char *s)
    {
    if (score > 30000 - 1024)
    SPRINTF (s, "mate %d", (30000 + 1 - score) / 2);
    else if (score < -30000 + 1024)
    SPRINTF (s, "mate %d", (-30000 - score) / 2);
    else
    SPRINTF (s, "cp %d", score);
    return s;
    }

    есть еще одна функция, но она по размеру большая, не буду приводить (там ПВ линия "вынимается").

    т.е. это стандартный вывод UCI команд. никаких нормализаций нет (кроме приведения матовой оценки в правильный вид)

    в каких вы программах видели нормализации? дайте пример что-ли.
  29. просроченый_кмс Старожил

    • Участник
    • Старожил
    Рег.:
    15.02.2010
    Сообщения:
    1.112
    Симпатии:
    167
    Репутация:
    6
    Оффлайн
    Я люблю спорить) На одном из формумов десятки страниц спорили, я утверждал что времени не существует, ок.
  30. ProstoTak Старожил

    • Ветеран
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    5.479
    Симпатии:
    123
    Репутация:
    1
    Оффлайн
    Кстати, я это уже где то слышал. И в этом что то есть. :)
  31. Greedy Учаcтник

    • Участник
    Рег.:
    22.01.2010
    Сообщения:
    448
    Симпатии:
    12
    Репутация:
    0
    Оффлайн
    Юрий Осипов про Гудини был абсолютно прав, что там есть функция, которая преобразует некое число в то, которое потом выводится пользователю. И это и есть пример нормализации.

    Весь вопрос в том, что чтобы делать окончательный вывод о предназначении этой функции, необходимо достоверно знать, что именно на получает на входе.
  32. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    это пример "искажации"

    запустите патченный движок и увидите, что она получает на входе.

    движок считает оценку позы в сантипешках, в любом месте кода +0.30 это приемущество белых в 0.3 пешки. где пешка равна значению определенному для данного вида позиций (в дебюте это может быть 90, а в эндшпиле 120 и т.д.)
    UCI протокол и оболочки принимают оценку от движка тоже в сантипешках! никаких переводов оценки не требуется - она едина и в движках, и в оболочке. смысла в нормализации никакой нет.
  33. immortal223 Вячеслав

    • Участник
    Рег.:
    22.02.2006
    Сообщения:
    2.412
    Симпатии:
    15
    Репутация:
    0
    Оффлайн
    А для 64-битки никто не может «нормализатор» сделать? :d
  34. Gildar Старожил

    • Участник
    • Старожил
    Рег.:
    09.01.2009
    Сообщения:
    2.216
    Симпатии:
    57
    Репутация:
    6
    Оффлайн
    Классный движок стал :D
  35. Greedy Учаcтник

    • Участник
    Рег.:
    22.01.2010
    Сообщения:
    448
    Симпатии:
    12
    Репутация:
    0
    Оффлайн
    Смысла в нормализации нет, если коэффициенты различных факторов динамически не меняются в процессе оценки.

    Вот самый простой пример (Гудини к этому не имеет отношение).
    Берём дерево вариантов в некой около-начальной позиции, посчитанное уже до глубины в 20 полу-ходов. Получается даже с прямым (по текущим параметрам оценки) отсечением офигенный куст с практически одинаковой оценкой в вариантах.
    И вот здесь можно провести маленькую хитрость и мультиплицировать некоторые позиционные параметры оценки. И из нашего офигенного куста сразу же выпадает наиболее перспективный кустик вариантов, максимально отвечающих данным позиционным факторам.
    Функция оценки работает, как и работала, но отсечение стало теперь более направленным. В конце, естественно, перед выводом, оценку варианта уже надо нормализовывать.

    Это только пример. Причём грубый. Но по уму, без модификации коэффициентов качественно отсечение работать не может. И такой метод влияет на характер игры программы заметно сильнее, чем статическая игра с коэффициентами для функции оценки.

Поделиться этой страницей