Главная › Форумы › Шашечные программы › Шашечные программы › Стандартная проверка корректности генератора ходов
- В этой теме 126 ответов, 8 участников, последнее обновление 17 лет, 1 месяц назад сделано Kallisto.
-
АвторСообщения
-
24.08.2006 в 07:26 #364620NSУчастник
А неоптимального много — навсикдку — после превращения в дамку можно продлжить взятие только в одном направлении (если угол — тогда вообще невозможно) — а у меня вызывается процедура взятий дамки по четырем (ошибки не будет, остальные три направления заблокированы), в структуре хода хранятся отдельно координаты откуда ход и куда — нужно конечно хранить в одном элементе (просто сдвинуть «откуда») и т.д.
Направление взятия можно убрать из параметра (Для простой, для дамки нужно оставить)
Зачем-то при каждом взятии в структуру списка ходов пишу что это взятия (а не простые ходы), Хотя можно это сделать в основной процедуре генерации, проверив что вернула ненулевое количество взятий.
Можно еще чего-нибудь придумать…
//
А есть данные perft-а, с указанием потраченного времени, и компа на котором производилось тестирование?24.08.2006 в 07:29 #364621KallistoУчастникТак этож 0x88 136!
Я перед генерацией взятий снимаю шашку (которая совершает взятия), а после ставлю обратно. Это правильно?Да.
Про 0х88 может я и пойму. Но это все равно некрасиво. Лучше сделать макрос IS_ON_BOARD(x). И сразу станет понятно что ты проверяешь.
Т.е. программы лучше делать читаемыми.24.08.2006 в 08:11 #364622KallistoУчастникВот результаты Каллисто на 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
Кстати, ты прогу делай так, чтобы ее легко было пристроить к интерфейсу Каллисто. Получишь сразу несколько соперников для тестировния.
24.08.2006 в 08:18 #364623NSУчастникЯ, чтоб не плодить протоколов — сразу сделаю её под протокол Каллисто. Ты ведь не против?
24.08.2006 в 08:59 #364624NSУчастникНашел на сайте Каллисто исходники SiDra…
Там ошибки в генераторе ходов!
Хотя бы — съев шашку, вместо того чтоб поставить препятствие (через это поле больше бить/проходить нельзя) — зачем-то сразу снимается съеденная шашка с доски…
Практически единственное место в генераторе где возможно сделать ошибку — и она сделана!
Хотя генератор очень похожий на мой. Неужели у всех мысль в одном направлении работает?24.08.2006 в 09:10 #364625KallistoУчастникНашел на сайте Каллисто исходники SiDra…
Там ошибки в генераторе ходов!
Хотя бы — съев шашку, вместо того чтоб поставить препятствие (через это поле больше бить/проходить нельзя) — зачем-то сразу снимается съеденная шашка с доски…Почти то же самое, что и у тебя, только у тебя переворачивается, а у меня снимается.
Видимо, у меня дамка рано или поздно сможет пройтись через уже сбитую шашку, что неправильно. Но это очень исключительный случай.
Надо будет исправить.24.08.2006 в 09:11 #364626NSУчастникПочти тоже самое, но не совсем У меня без ошибки.
24.08.2006 в 09:31 #364627plus600УчастникВидимо, у меня дамка рано или поздно сможет пройтись через уже сбитую шашку, что неправильно. Но это очень исключительный случай.
Надо будет исправить.«И эти люди не разрешают мне ковыряться в носу»
Вы уж сначала все правила игры реализуйте, а потом разбирайтесь кто лучше 😆 😆 😆24.08.2006 в 09:51 #364628NSУчастникМелкие огрехи в генераторе ходов сильно на силе не скажутся, и ошибка же не в Каллисто, а в открытых исходниках демонстрационного движка «SIDra»
24.08.2006 в 09:58 #364629plus600УчастникМелкие огрехи в генераторе ходов сильно на силе не скажутся, и ошибка же не в Каллисто, а в открытых исходниках демонстрационного движка «SIDra»
Если речь идет о сидре, то виноват, но думал речь идет о Калисто.
На силе не скажится, скажится на правильности игры 😆24.08.2006 в 10:45 #364630KallistoУчастникПосмотрел исходники SIDra нет там такого.
inline bool AddCaptured(int sq, Move *m, int caps)
{
for (int i = 0; icap_sq) return false;
}
m->cap_sq[caps] = sq;
m->cap_type[caps] = Board[sq];
return true;
}
Вот так добавляется новая сбитая шашка. Она с доски не убирается (раньше действительно убиралась). Просто прежде чем сбивать следующую шашку мы проверяем, что раньше ее не сбивали.
У тебя какой даты Generator.cpp? На сайте должен лежать 06.05.06 11:34.
Когда сделаешь perft?
24.08.2006 в 10:48 #364631KallistoУчастникЧто-то одна строчка внутри фигурных скобок пропадает. Ну да ладно. И без нее понятно.
24.08.2006 в 10:52 #364632NSУчастникДата файла 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;
}Мы же не просто должны запретить взятие этой шашки, а любой повторный проход через это поле!!!
Так как шашка снята с доски — проход через это поле не будет уже взятием (Для дамки), и программа не понимает «Турецкий удар»Добавлено — виноват, это обнуляется поле с которого ход…
А зачем его обнулять? Для генерации взятий шашки достаточно один раз его обнулить, а потом просто не ставить её на доску. (п после завершения генераций обратно поставить) Тоже быстрее будет.24.08.2006 в 10:57 #364633KallistoУчастникДа тупо как-то получилось. Добавил проверку по спискам и забыл убрать удаление с доски. Видимо просто запутался при отладке.
Списков достаточно, чтобы все было правильно (так в Каллисто).
До переворачивания просто не догадался24.08.2006 в 10:59 #364634KallistoУчастникБлин, совсем запутал ты меня
Ведь все правильно!!! -
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.