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

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

Просмотр 15 сообщений - с 31 по 45 (из 127 всего)
  • Автор
    Сообщения
  • #364635
    Kallisto
    Участник

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

    Так ведь это обнуление именно это и делает (только один раз).

    #364636
    NS
    Участник

    Да это я торможу по-полной. Это же не рекурсивная процедура — получается так же как у меня — шашка один раз снимается с доски, потом ставится…
    Работать надо на работе, а не в чужие исходники пялиться :)

    Только со списком конечно глупость — я так и не нашел старых исходников, поэтому не помню как делал тогда, но сейчас сразу как сел — сразу мысль пришла что нужно просто перевернуть шашку.

    #364637
    Kallisto
    Участник

    По скорости будет то же самое, т.к. ходов сбивающих более 2 шашек очень мало и несколько лишних проверок для них практически никак не скажутся.

    #364638
    NS
    Участник

    Сверим быстродействие… Хотя я особо сильно «вылизывать» генератор не собираюсь. :)
    Насчет Эндшпильных библиотек — я посчитал, пятифигурки вполне влезают в память… Даже без особых ухищрений. Так что с эндшпильной библиотекой проблем скорей всего не будет, постараюсь сформировать сам. (или 5-ти фигурной мало?)
    Вопрос только в дебютной.

    #364639
    Kallisto
    Участник

    В тех таблицах, что я приводил Каллисто при подсчете количества позиций не выполнял ходов (make/unmake) на посленем уровне, т.к. это не нужно для подсчета.
    Но для проверки скорости ядра все же лучше вместе с ними:

    Каллисто:


    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: 15 speed: 12676 Kn / sec
    8 - 929905 time: 110 speed: 8454 Kn / sec
    9 - 4570667 time: 484 speed: 9444 Kn / sec
    10 - 22450628 time: 2438 speed: 9209 Kn / sec
    11 - 110961169 time: 12062 speed: 9199 Kn / sec
    12 - 545059387 time: 59047 speed: 9231 Kn / sec

    СиДра:


    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: 32 speed: 5942 Kn / sec
    8 - 929905 - time: 187 speed: 4973 Kn / sec
    9 - 4570667 - time: 875 speed: 5224 Kn / sec
    10 - 22450628 - time: 4391 speed: 5113 Kn / sec
    11 - 110961169 - time: 21468 speed: 5169 Kn / sec
    12 - 545059387 - time: 105219 speed: 5180 Kn / sec
    #364640
    NS
    Участник

    ОК. Вечером запущу тест с make/unmake на последнем ходе.
    Либо просто вышлю exe-шник. Надеюсь что генератор будет не особо медленней :)

    #364641
    Kallisto
    Участник

    Чтобы прога нормально играла достаточно 4-х фигурной ЭБ.
    Дебютную библиотеку обсуждали на гостевой Креста.

    #364642
    NS
    Участник

    Не получилось плотно посидеть.
    Но мой 0x88 из-за большого количества условий (плюс из за этого что вместо одного массива структур сделал структуру массивов)
    в начальной позиции делает 1000000 генераций (7000000) Ходов, Без Make/Unmake за 1980 мс. меньше 3500000 позиций в секунду.
    Однозначно нужно переписывать. Perft запускать не стал (Генератор за одну сторону, только за белых)

    Маленький Тест показал, что 16×16 будет быстрее (чем 0х88).
    Плюс — вызов рекурсивной процедуры лучше делать когда уже взятие точно есть — (то есть саму возможность взятия определять в нерекурсивной (основной) процедуре, а продолжать взятие — в рекурсивной) И нужно поменять структуру хранениия списка ходов.

    #364643
    Kallisto
    Участник

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

    #364644
    NS
    Участник

    Сейчас начинаю делать. То есть — где-то через два часа будет готов.
    (пока неоптимизированный)

    #364645
    NS
    Участник

    procedure perft(depth:byte);
    var i:byte;mov:moves;
    Begin
    for i:=1 to genmove(mov) do
    Begin
    MakeMove(mov,i);
    if depth=1 then kol:=kol+1 else perft(depth-1);
    UnMakeMove(Mov,i);
    end;
    end;

    8 929905 489 1901

    Надо переписывать.

    #364646
    Kallisto
    Участник

    Зачем сразу переписывать? Делай лучше прогу. Там есть вещи поважнее, чем генератор. Ты же шахматный генератор не переписывал по несколько раз. Какой у тебя там результат?

    #364647
    Kallisto
    Участник

    Может тебе битборды попробовать? Говорят в шашках они рулят. Ведь на шашечной доске только 32 поля.

    #364648
    NS
    Участник

    В шахматах — один раз написал и больше не трогал. Только сортировки добавлял. Perft не пробовал (в шахматах)
    Насчет БитБоардов в шашках думал — Надо 64-мя битами представлять, иначе очень неудобно.

    #364649
    NS
    Участник

    ОК. Попробую сделать 32-битный бибоард. :)

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