Рыбная ловля

Тема в разделе "Машинное отделение", создана пользователем Рыбкин, 16 мар 2007.

  1. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    Рыбка имеет намного более хорошую ОФ чем все остальные программы.
    И именно это дает ей такую жуткую силу.
    А то что Рыбка не медленный движок, и просто по другому считает количество узлов - так это всем известно и Васик никогда этого не скрывал.

    Рыбка показывает реальную глубину перебора. Она просто немного другим способом считает узлы (Nodes)
     
  2. Vlad_Imir
    Оффлайн

    Vlad_Imir Новичок

    Репутация:
    20
    Все просто, Рыбкин же прямо указал на material_get_info (из Fruit или Toga).
    Как используется информация о материале ? смотрите eval()

    Если принять, что на доске может быть не более 8 пешек, двух слонов, итд. То-есть не экзотика типа борьба 5 слонов против 6 коней, а обычная позиция, то всего сочетаний фигур, белых и черных равно
    int size = 9*3*3*3*2*9*3*3*3*2;

    Создаем массивчик material_info_t *n_material = new material_info_t[size];
    Делаем циклы, для всез сочетаний, вызывая material_comp_info(info,board), заполняем массив.
    Теперь можно (но необязательно) записываем на диск.

    При загрузке:
    material_info_t *n_material;

    int main(int argc, char * argv[]) {

    // init
    FileProcessor<material_info_t> FP;

    int size = 9*3*3*3*2*9*3*3*3*2;
    n_material = new material_info_t[size];

    bool succes = FP.ReadFromFile("T.ini", &n_material[0], size);
    .
    .

    Используем:

    extern material_info_t *n_material;

    void material_get_info(material_info_t *info, const board_t * board) {

    int wp, wn, wb, wr, wq;
    int bp, bn, bb, br, bq;
    int tkey;

    wp = board->number[WhitePawn12];
    wn = board->number[WhiteKnight12];
    wb = board->number[WhiteBishop12];
    wr = board->number[WhiteRook12];
    wq = board->number[WhiteQueen12];

    bp = board->number[BlackPawn12];
    bn = board->number[BlackKnight12];
    bb = board->number[BlackBishop12];
    br = board->number[BlackRook12];
    bq = board->number[BlackQueen12];

    if (!(wn > 2 || wb > 2 || wr > 2 || wq > 1 || bn > 2 || bb > 2 || br > 2 || bq > 1)) {
    tkey = bq
    + br *2
    + bb *2*3
    + bn *2*3*3
    + bp *2*3*3*3
    + wq *2*3*3*3*9
    + wr *2*3*3*3*9*2
    + wb *2*3*3*3*9*2*3
    + wn *2*3*3*3*9*2*3*3
    + wp *2*3*3*3*9*2*3*3*3;

    *info = n_material[tkey];
    return;
    }

    //Если два ферзя, пять ладей итп - вызываем
    material_comp_info(info,board);

    Из структуры material_info_t убираем uint32 lock - не нужен, конечно

    Скорости процентов десять прибавляет
     
  3. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    Я выше написал - я это понял.

    Только 10% прибавки скорости это не даст, и если уж создалит таблицу, то считать её надо точно! Ну получил бы Васик на этом максимум 5 пунктов, а где остальные 145? :)

    Допустим мы даем стоимость коня как расстояние от центра.
    Улучшаем, заводим таблицу на 64 элемента. Зачем её заполнять значением которое мы считали? Мы можем сделать более правильную таблицу.
     
  4. Рыбкин
    Оффлайн

    Рыбкин Зарегистрирован

    Репутация:
    0
    Vlad_Imir, поздравляю! Ты первый, кто понял самую суть.
    К сожалению, алгоритм Рыбкиного варианта material_get_info не известен -
    он остался за кадром. Но главное в том, что весь этот массив - всего лишь оценка
    материала.

    По поводу жульничества.
    Еще раз повторяю, что Рыбка показывает уменьшенную глубину перебора, обрезанные
    на шесть полуходов варианты, и неверное число узлов. Я подозреваю, что все это
    сделано с единственной целью - создать у нас впечатление, что Рыбка работает на основе
    знаний, а не перебора.

    Однако, лично мое отношение к Рыбке и Васику - очень даже положительное.
    Васик - безусловно гений. Все таки он написал очень хорошую программу, которая
    играет лучше всех.
    А гениям можно простить маленькие шалости.
     
  5. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    Такой-же бред, как и фраза о том, что никому не известен алгоритм полученной мной таблицы оценки коня.

    Полная ахинея. Я уж чуть не подумал что кто-то близкий к программированию и шахматному программированию прикалывается, а оказывается кто-то где-то нашел порцию бреда, и в силу своего плохого понимания еще и неправильно интерпретирует.

    Да? Возьми любую позицию и проверь. Рыбка пишет точно таку-же глубину, как и все остальные движки. Если считает на один полуход - значит не видит вилки, и не увидит мат в два хода без вступительного шаха.

    Что такое "верное количество узлов" по-вашему?
     
  6. drowsy
    Оффлайн

    drowsy Учаcтник

    Репутация:
    0
    Человек, которые могут взять Рыбку, дизасемблировать и перевести в нормальный Сишный код, в мире не так много. Один у меня экзамен принимал по программированию — заставил прогу с исходником килов на сто с лишним откомпилировать, и потом по ассемблерному тексту объяснять, как она работает.(прога была — оптимизация циклов в ассемблерных исходниках). Но что-то мне не вериться, что такой аксакал к нам сюда пришёл. Имхо, это весеннее наступление товарищей типа ras.
     
  7. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    Не не так много, а таких людей просто нет :)
    Так-же как и нет людей пробегающих стометровку за пол-секунды.
     
  8. Guest
    Оффлайн

    Guest

    Репутация:
    0
    Ребята, вы что-то не то говорите. Рыбкин же ничего сверхестественного не сказал. Берем программу дисассемблер и она из машинного кода производит смесь кода на Си и ассемблере. После этого можно над какими-то кусками Сишного кода поработать и сделать их читабельными. Если все это делать аккуратно, то все это будет еще и компилириваться.
    Я правда такими вещами лет 15 не занимаюсь, но при отладке иногда приходится смотреть код на уровне машинных команд.
     
  9. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    Размер кода! :)
    Какой размер кода? Не один из ведущих разработчиков шахматных программ не может его понять, так как нет названий функций и имен переменных. Дизасемблер это конечо хорошо. Но понять такой код невозможно.

    Программу решения квадратного уравнения можно привести к Сишному виду, но никак не хорошую шахматную программу.
     
  10. drowsy
    Оффлайн

    drowsy Учаcтник

    Репутация:
    0
    Ну что вы, NS. Если люди которые в компиляторах и дизасемблировании собаку съели. Только этим и занимаются, и исходники gcc знают наизусть. Только их мало и они по форумам не шляются.

    А во Рыбкин тут чушь порет, что легко можно исходники Рыбки в читабельный С-шный текст перевести.
    особенно насмешило
     
  11. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    Можно привести хоть один пример приведения к читабельному сишному виду серьезной откомпилированной программы? :)

    Я пишу уже больше двух десятков лет, но о таком не слышал. Даже слухов таких ни разу не было... Даже в интернете.

    Последний пример который я видел - декомпиляция за неделю программы из двадцати строк. (с диалекта VB, программа откомпилирована в промежуточный код) Причем это чудо - сотня человек пытались понять что делает программа, одному из них удалось.

    Фрукт - на порядок сложнее этой программы, и имеет на четыре порядка больший объем.

    Декомпиляция за 100+ человеко-лет - в такое я поверю. Если найти сотню гениев, дать каждому по целому состоянию - возможно за пару лет можно будет добиться каких-то результатов.

    Повторю - нет в истории ни одного примера приведения к читабельному Сишному виду объемных сложных скоплированных программ.
     
  12. Guest
    Оффлайн

    Guest

    Репутация:
    0
    Даже если бы это однозначно утверждалось Рыбкиным, я бы тоже в этом сомневался.
    Понять какие-то куски кода всегда можно, ну и посчитать эти куски ключевыми тоже можно, почему нет :)
     
  13. Guest
    Оффлайн

    Guest

    Репутация:
    0
  14. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    Понять куски кода можно, посчитать их ключевыми тоже - но речь идет о полном приведении программы к читабельному виду. Даже простое переименование всех имен - практически делает невозможным восстановление кода. Речь идет о сотнях тысяч строк кода!!!
     
  15. Guest
    Оффлайн

    Guest

    Репутация:
    0
    NS, обращаю Ваше внимание на цитату из Рыбкина:
    Он фактически сам признает, что не весь код перевел на Си, по крайней мере я его именно так и понял.
     
  16. drowsy
    Оффлайн

    drowsy Учаcтник

    Репутация:
    0
    Кстати, код, откомпилированный с -O3 нихрена не читабелен и не понятен. Как его в С переводить — загадка.
     
  17. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    О чем вы тут спорите?

    Аффтар пашутил. Мы, тоже посмеялись :)
    На этом ветку можно считать исчерпанной.
     
  18. Рыбкин
    Оффлайн

    Рыбкин Зарегистрирован

    Репутация:
    0
    Аффтар не шутил, но точку в самом деле можно ставить.
    На прощание хочу сказать о выводах, которые я сделал для себя.

    1. Раньше я считал себя весьма заурядной личностью. Теперь, благодаря вам,
    моя самооценка повысилась. Если за два месяца мне удалось сделать то,
    на что нужно более 100 человеко-лет и целое состояние, то значит моя стоимость
    гораздо выше, чем я думал. А это приятно.

    2. Многие убеждены в невозможности декомпиляции. Это дает мне уверенность,
    что исходники Рыбки есть только у Васика и у меня. Тоже очень удачное
    обстоятельство.

    3. Из некоторых высказываний я понял, что шахматные разработчики будут
    оставаться при своем особом мнении об алгоритме, заложенном в Рыбку.
    И будут продолжать копать в неверном направлении. Значит - меньше конкурентов.

    Огромное всем спасибо. Счастья в работе и успехов в личной жизни.
    Пойду ковырять новую версию - там много чего добавилось, так что работа есть.
     
  19. Fruit
    Оффлайн

    Fruit Александр баннер

    Репутация:
    3
    Стороны рассудит мощная игровая программа, написанная Рыбкиным. ;) Отсутствие оной превращает данные выступления в простую болтовню.
     
  20. Fruit
    Оффлайн

    Fruit Александр баннер

    Репутация:
    3
    Да, я ж пошутил. :lol:
     
  21. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    1. Раньше я считал себя весьма заурядной личностью. Теперь, благодаря вам,
    моя самооценка повысилась. Если за два месяца мне удалось сделать то,
    на что нужно более 100 человеко-лет и целое состояние, то значит моя стоимость
    гораздо выше, чем я думал. А это приятно.


    100 человеко лет требуется на получение читабельного Си кода. Вы его где-то выложили?
    Столько-же времени требуется на полный разбор алгоритмов.

    А что сделано вами? Подменен ввод/вывод?

    2. Многие убеждены в невозможности декомпиляции. Это дает мне уверенность,
    что исходники Рыбки есть только у Васика и у меня. Тоже очень удачное
    обстоятельство.


    У вас нет исходников Рыбки.

    3. Из некоторых высказываний я понял, что шахматные разработчики будут
    оставаться при своем особом мнении об алгоритме, заложенном в Рыбку.
    И будут продолжать копать в неверном направлении. Значит - меньше конкурентов.



    1. Оптимизируйте скорость перебора - это решает всё.
    Битборды - вот что вам поможет. Но только не списывайте с Crafty -
    там реализация битовых операций очень плохая. Васик в этом вопросе ушел далеко вперед.


    Вы не понимаете алгоритмов Рыбки :)
     
  22. HotDog
    Оффлайн

    HotDog Учаcтник

    Репутация:
    0
    Я не понимаю только одного - зачем человеку, который так хорошо разбирается в ассемблере и чужих мегабайтовых листингах, переводить это дело на Си?
     
  23. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    Чтобы, в случае чего, предоставить исходники - смотрите я все сам сделал :cool:
     
  24. syrdon
    Оффлайн

    syrdon Учаcтник

    Репутация:
    0
    Аффтар, кстати, не шутил.
    Декомпиляция программы известной структуры (ну скаута-то всякий найдёт) вполне возможна.
     
  25. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    Декомпиляция программы конечно возможна - взял дизасемблер да и дизасемблировал :)

    Можно даже разобрать и понять структуру скомпилированной программы из сотни строк, но нельзя за реальное время разобрать и понять код скомпилированной программы из десятков и сотен тысяч строк. Можно найти нужный участок и разобрать небольшой кусок кода, но это не тоже самое что полностью восстановить код шахматной программы - привести его в понятный и читабельный вид.
     
  26. syrdon
    Оффлайн

    syrdon Учаcтник

    Репутация:
    0
    Декомпиляция - это ИМХО не дизассемблирование. Речь идет о переводе на Си.

    Полный разбор даже и не нужен.
    Мало кому интересно, как Рыбка генерирует хода, проверяет шах и т.д.
    Как только нашлась процедура, которая за это отвечает, работа сделана. Это относительно изолированные куски.
    А статически слинкованные CRT? А интерфейс к EGTB? Он раздувает Рыбку.

    ОФ и Поиск и есть такие небольшие куски, с которыми можно разобраться.
    Что Рыбкин и сделал.
     
  27. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    syrdon, есть такой тип людей которые любому встречному верят на слово какую бы чушь тот не нес :)
    С чего вы взяли что Рыбкин вообще чего-то делал?

    ОФ и поиск небольшие куски? Вы откомпилированную ОФ битбоард-движка сможете разобрать?
    То есть в наборе битовых опреаций над регистрами вы сможете отследить где и когда в регистре появилась конкретная переменная?
    Несколько тысяч строк это по-вашему небольшой кусок?
     
  28. syrdon
    Оффлайн

    syrdon Учаcтник

    Репутация:
    0
    При наличии декомпилятора, который производит из машинных кодов плохой Си-код со случайными именами, человек имеющий средний опыт программирования на ассемблере, но хорошо понимающий, что именно должно быть в шахматном движке может за пару человеко-месяцев восстановить исходный код программы, обсуждаемого размера. Я в это верю.
    Вычтите из размера Рыбки таблицы, доступ к EGTB, CRT и останется не так много.

    Не забывайте, что точки входа находятся очень быстро - известен UCI-интерфейс.
    Рыбкин не написал ничего, что не может быть правдой.

    Но это же делает любой, кто программирует на ассемблере!
     
  29. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    Я выше написал сколько останется.
    Что делает любой кто программирует на ассемблере? Я немного не понял.
    Любой кто пишет на ассемблере восстанавливает имя переменной по конкретным операциям над регистром?
     
  30. syrdon
    Оффлайн

    syrdon Учаcтник

    Репутация:
    0
    Проследить что и куда пошло в память по регистрам возможно. Любой программист на ассемблере умеет запоминать, чем и как он жонглирует по регистрам. Без имен временных переменных.

    Поинтересуемся у Рыбкина, сколько там на самом деле осталось. Он же не теорему Ферма доказал. Пара человеко-месяцев на Си-код.

    Он же не утверждает, что знает, как Райлих оптимизировал веса! Вот это интересно.
     
  31. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    Сегодня очередной день открытых дверей?
     
  32. syrdon
    Оффлайн

    syrdon Учаcтник

    Репутация:
    0
    Ну вот. Зачем студента обидели?

    Я просто хотел заметить, что Рыбкин не сморозил ничего технически неверного. Он вполне может преувеличивать степень понимания Рыбки.

    Возьмите например Фрукта. Вы имеете его исходный код, но Вы не можете похвастаться четким пониманием, почему он такой сильный. Автор все равно понимает это лучше.
     
  33. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    Что-то маньяки к нам зачастили...
    Наверно к дождю.
     
  34. syrdon
    Оффлайн

    syrdon Учаcтник

    Репутация:
    0
    Зачем Вы меня травите?!
    Вы не нашли у Рыбкина ни одной фактической ошибки!
     
  35. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    Что за радость выискивать ошибки в маниакальных идеях?