Стандартная проверка корректности генератора ходов

Главная Форумы Шашечные программы Шашечные программы Стандартная проверка корректности генератора ходов

Просмотр 15 сообщений - с 16 по 30 (из 127 всего)
  • Автор
    Сообщения
  • #364620
    NS
    Участник

    А неоптимального много — навсикдку — после превращения в дамку можно продлжить взятие только в одном направлении (если угол — тогда вообще невозможно) — а у меня вызывается процедура взятий дамки по четырем (ошибки не будет, остальные три направления заблокированы), в структуре хода хранятся отдельно координаты откуда ход и куда — нужно конечно хранить в одном элементе (просто сдвинуть «откуда») и т.д.
    Направление взятия можно убрать из параметра (Для простой, для дамки нужно оставить)
    Зачем-то при каждом взятии в структуру списка ходов пишу что это взятия (а не простые ходы), Хотя можно это сделать в основной процедуре генерации, проверив что вернула ненулевое количество взятий.
    Можно еще чего-нибудь придумать…
    //
    А есть данные perft-а, с указанием потраченного времени, и компа на котором производилось тестирование?

    #364621
    Kallisto
    Участник

    Так этож 0x88 :) 136! :)
    Я перед генерацией взятий снимаю шашку (которая совершает взятия), а после ставлю обратно. Это правильно?

    Да.

    Про 0х88 может я и пойму. Но это все равно некрасиво. Лучше сделать макрос IS_ON_BOARD(x). И сразу станет понятно что ты проверяешь.
    Т.е. программы лучше делать читаемыми.

    #364622
    Kallisto
    Участник

    Вот результаты Каллисто на Sempron 3000+ (реальная частота 2340):


    1 - 7 time: 0 speed: Infinity
    2 - 49 time: 0 speed: Infinity
    3 - 302 time: 0 speed: Infinity
    4 - 1469 time: 0 speed: Infinity
    5 - 7482 time: 0 speed: Infinity
    6 - 37986 time: 0 speed: Infinity
    7 - 190146 time: 16 speed: 11884 Kn / sec
    8 - 929905 time: 62 speed: 14998 Kn / sec
    9 - 4570667 time: 281 speed: 16266 Kn / sec
    10 - 22450628 time: 1422 speed: 15788 Kn / sec
    11 - 110961169 time: 7047 speed: 15746 Kn / sec
    12 - 545059387 time: 34328 speed: 15878 Kn / sec

    Кстати, ты прогу делай так, чтобы ее легко было пристроить к интерфейсу Каллисто. Получишь сразу несколько соперников для тестировния.

    #364623
    NS
    Участник

    Я, чтоб не плодить протоколов — сразу сделаю её под протокол Каллисто. Ты ведь не против? :)

    #364624
    NS
    Участник

    Нашел на сайте Каллисто исходники SiDra…
    Там ошибки в генераторе ходов!
    Хотя бы — съев шашку, вместо того чтоб поставить препятствие (через это поле больше бить/проходить нельзя) — зачем-то сразу снимается съеденная шашка с доски…
    Практически единственное место в генераторе где возможно сделать ошибку — и она сделана! :)
    Хотя генератор очень похожий на мой. Неужели у всех мысль в одном направлении работает? :)

    #364625
    Kallisto
    Участник

    Нашел на сайте Каллисто исходники SiDra…
    Там ошибки в генераторе ходов!
    Хотя бы — съев шашку, вместо того чтоб поставить препятствие (через это поле больше бить/проходить нельзя) — зачем-то сразу снимается съеденная шашка с доски…

    Почти то же самое, что и у тебя, только у тебя переворачивается, а у меня снимается.
    Видимо, у меня дамка рано или поздно сможет пройтись через уже сбитую шашку, что неправильно. Но это очень исключительный случай.
    Надо будет исправить.

    #364626
    NS
    Участник

    Почти тоже самое, но не совсем :) У меня без ошибки.

    #364627
    plus600
    Участник

    Видимо, у меня дамка рано или поздно сможет пройтись через уже сбитую шашку, что неправильно. Но это очень исключительный случай.
    Надо будет исправить.

    «И эти люди не разрешают мне ковыряться в носу» :)
    Вы уж сначала все правила игры реализуйте, а потом разбирайтесь кто лучше 😆 😆 😆

    #364628
    NS
    Участник

    Мелкие огрехи в генераторе ходов сильно на силе не скажутся, и ошибка же не в Каллисто, а в открытых исходниках демонстрационного движка «SIDra» :)

    #364629
    plus600
    Участник

    Мелкие огрехи в генераторе ходов сильно на силе не скажутся, и ошибка же не в Каллисто, а в открытых исходниках демонстрационного движка «SIDra» :)

    Если речь идет о сидре, то виноват, но думал речь идет о Калисто.
    На силе не скажится, скажится на правильности игры 😆

    #364630
    Kallisto
    Участник

    Посмотрел исходники SIDra нет там такого.


    inline bool AddCaptured(int sq, Move *m, int caps)
    {
    for (int i = 0; i cap_sq) return false;
    }
    m->cap_sq[caps] = sq;
    m->cap_type[caps] = Board[sq];
    return true;
    }

    Вот так добавляется новая сбитая шашка. Она с доски не убирается (раньше действительно убиралась). Просто прежде чем сбивать следующую шашку мы проверяем, что раньше ее не сбивали.

    У тебя какой даты Generator.cpp? На сайте должен лежать 06.05.06 11:34.

    Когда сделаешь perft?

    #364631
    Kallisto
    Участник

    Что-то одна строчка внутри фигурных скобок пропадает. Ну да ладно. И без нее понятно.

    #364632
    NS
    Участник

    Дата файла 6 мая 2006 г., 11:34:32 (я его скачал пару часов назад, так что должна быть свежая версия)
    perft сделаю как приду домой (если опять жена чего-нибудь не выдумает :) )
    Долго искать в списке — намного проще (быстрее) поменять шашку на свою, а потом обратно.

    inline void TryManCapture(int sq, int dir)
    {
    int m = sq + dir;
    if (!OP_CHECKER(m)) return;
    int to = m + dir;
    if (Board[to]) return;
    int save = Board[sq];
    Board[sq] = 0; // вот ошибка!!
    Move t;
    t.from = sq;
    AddCaptured(m, &t, 0);
    if (to <9> 35 && stm == BLACK) {
    t.promotion = true;
    AddPromoCaptures(to, &t, 1, dir);
    }
    else {
    t.promotion = false;
    AddManCaptures(to, &t, 1, -dir);
    }
    Board[sq] = save;
    }

    Мы же не просто должны запретить взятие этой шашки, а любой повторный проход через это поле!!!
    Так как шашка снята с доски — проход через это поле не будет уже взятием (Для дамки), и программа не понимает «Турецкий удар»

    Добавлено — виноват, это обнуляется поле с которого ход…
    А зачем его обнулять? Для генерации взятий шашки достаточно один раз его обнулить, а потом просто не ставить её на доску. (п после завершения генераций обратно поставить) Тоже быстрее будет.

    #364633
    Kallisto
    Участник

    Да тупо как-то получилось. Добавил проверку по спискам и забыл убрать удаление с доски. Видимо просто запутался при отладке.
    Списков достаточно, чтобы все было правильно (так в Каллисто).
    До переворачивания просто не догадался :)

    #364634
    Kallisto
    Участник

    Блин, совсем запутал ты меня :)
    Ведь все правильно!!!

Просмотр 15 сообщений - с 16 по 30 (из 127 всего)
  • Для ответа в этой теме необходимо авторизоваться.