Партии
Комментирует Геннадий Шапиро (Пекин, 2008, часть 4)
Комментирует Геннадий Шапиро (Пекин, 2008, часть 3)
Комментирует Александр Колин
Комментирует Геннадий Шапиро (Пекин, 2008, часть 2)
Комментирует Геннадий Шапиро (Пекин, 2008, часть 1)
Комментирует Александр Георгиев (Тула, 2007, часть 2)
Комментирует Александр Георгиев (Тула, 2007, часть 1)
Решающий микроматч, ЧМ среди молодежи, Берлин, 2008
"Дыру эту не заштопать, не зашить!"
Шашечный Бог-рати-он
Шашисту на заметку
Кто с нами
 |
Зарегистрированные |
 |
retepka |
|
В записную книжку
|
|
| Автор |
Сообщение |
NS |
|
Тема сообщения:
Отправлено: Авг 24, 2006 - 10:11 AM
|
|
Зарегистрирован: Авг 22, 2006
Сообщений: 614
Откуда : Санкт-Петербург
|
|
Почти тоже самое, но не совсем У меня без ошибки. |
|
|
| |
|
|
|
 |
Kallisto |
|
Тема сообщения:
Отправлено: Авг 24, 2006 - 10:10 AM
|
|
Зарегистрирован: Авг 18, 2003
Сообщений: 731
|
|
|
NS писал(а):
Нашел на сайте Каллисто исходники SiDra...
Там ошибки в генераторе ходов!
Хотя бы - съев шашку, вместо того чтоб поставить препятствие (через это поле больше бить/проходить нельзя) - зачем-то сразу снимается съеденная шашка с доски...
Почти то же самое, что и у тебя, только у тебя переворачивается, а у меня снимается.
Видимо, у меня дамка рано или поздно сможет пройтись через уже сбитую шашку, что неправильно. Но это очень исключительный случай.
Надо будет исправить. |
|
|
| |
|
|
|
 |
NS |
|
Тема сообщения:
Отправлено: Авг 24, 2006 - 09:59 AM
|
|
Зарегистрирован: Авг 22, 2006
Сообщений: 614
Откуда : Санкт-Петербург
|
|
Нашел на сайте Каллисто исходники SiDra...
Там ошибки в генераторе ходов!
Хотя бы - съев шашку, вместо того чтоб поставить препятствие (через это поле больше бить/проходить нельзя) - зачем-то сразу снимается съеденная шашка с доски...
Практически единственное место в генераторе где возможно сделать ошибку - и она сделана!
Хотя генератор очень похожий на мой. Неужели у всех мысль в одном направлении работает?  |
|
|
| |
|
|
|
 |
NS |
|
Тема сообщения:
Отправлено: Авг 24, 2006 - 09:18 AM
|
|
Зарегистрирован: Авг 22, 2006
Сообщений: 614
Откуда : Санкт-Петербург
|
|
Я, чтоб не плодить протоколов - сразу сделаю её под протокол Каллисто. Ты ведь не против?  |
|
|
| |
|
|
|
 |
Kallisto |
|
Тема сообщения:
Отправлено: Авг 24, 2006 - 09:11 AM
|
|
Зарегистрирован: Авг 18, 2003
Сообщений: 731
|
|
Вот результаты Каллисто на 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
Кстати, ты прогу делай так, чтобы ее легко было пристроить к интерфейсу Каллисто. Получишь сразу несколько соперников для тестировния. |
|
|
| |
|
|
|
 |
Kallisto |
|
Тема сообщения:
Отправлено: Авг 24, 2006 - 08:29 AM
|
|
Зарегистрирован: Авг 18, 2003
Сообщений: 731
|
|
|
NS писал(а):
Так этож 0x88  136!
Я перед генерацией взятий снимаю шашку (которая совершает взятия), а после ставлю обратно. Это правильно?
Да.
Про 0х88 может я и пойму. Но это все равно некрасиво. Лучше сделать макрос IS_ON_BOARD(x). И сразу станет понятно что ты проверяешь.
Т.е. программы лучше делать читаемыми. |
|
|
| |
|
|
|
 |
NS |
|
Тема сообщения:
Отправлено: Авг 24, 2006 - 08:26 AM
|
|
Зарегистрирован: Авг 22, 2006
Сообщений: 614
Откуда : Санкт-Петербург
|
|
А неоптимального много - навсикдку - после превращения в дамку можно продлжить взятие только в одном направлении (если угол - тогда вообще невозможно) - а у меня вызывается процедура взятий дамки по четырем (ошибки не будет, остальные три направления заблокированы), в структуре хода хранятся отдельно координаты откуда ход и куда - нужно конечно хранить в одном элементе (просто сдвинуть "откуда") и т.д.
Направление взятия можно убрать из параметра (Для простой, для дамки нужно оставить)
Зачем-то при каждом взятии в структуру списка ходов пишу что это взятия (а не простые ходы), Хотя можно это сделать в основной процедуре генерации, проверив что вернула ненулевое количество взятий.
Можно еще чего-нибудь придумать...
//
А есть данные perft-а, с указанием потраченного времени, и компа на котором производилось тестирование? |
|
|
| |
|
|
|
 |
NS |
|
Тема сообщения:
Отправлено: Авг 24, 2006 - 08:13 AM
|
|
Зарегистрирован: Авг 22, 2006
Сообщений: 614
Откуда : Санкт-Петербург
|
|
|
Kallisto писал(а):
// поменям шашку противникак на нашу, чтоб не взять повторно.
прикольно
if (kuda and 136)=0 then - так некрасиво (магические числа), смысл не очевиден такой конструкции
А так вроде нормально. Что ты видишь здесь неоптимального?
Как с генератором? Успел за вечер?
Так этож 0x88 136!
За вечер не получилось - смог начать писать только в полночь...
К Двум часам ночи дописал, проверил на нескольких тестовых позиций.
Дальше писать уже не мог - хотелось спать
Сейчас нужно бежать на работу - нужно немного подправить генератор взятий дамки (работает вроде правильно (правда не уверен), но совсем кривой) и у меня вопрос по правилам - меня переклинило - шашка которой совершаем взятие тоже снимается только по окончании взятия? (может ли шашка в процессе взятия вернутся на изначальное место, либо пройти через него?)
Я перед генерацией взятий снимаю шашку (которая совершает взятия), а после ставлю обратно. Это правильно? |
|
|
| |
|
|
|
 |
Kallisto |
|
Тема сообщения:
Отправлено: Авг 24, 2006 - 08:06 AM
|
|
Зарегистрирован: Авг 18, 2003
Сообщений: 731
|
|
// поменям шашку противникак на нашу, чтоб не взять повторно.
прикольно
if (kuda and 136)=0 then - так некрасиво (магические числа), смысл такой конструкции не очевиден
А так вроде нормально. Что ты видишь здесь неоптимального?
Как с генератором? Успел за вечер? |
|
|
| |
|
|
|
 |
NS |
|
Тема сообщения:
Отправлено: Авг 24, 2006 - 07:17 AM
|
|
Зарегистрирован: Авг 22, 2006
Сообщений: 614
Откуда : Санкт-Петербург
|
|
|
Код:
Function addmove(izot:byte;otkuda:byte;nap:shortint;var cap:capture;var mov:moves):Byte;
var kuda,kuda1,kolvz,nomMoves,i:byte;
Begin
kolvz:=0;
kuda:=otkuda+nap;
if (kuda and 136)=0 then
if pole[kuda]<0 then
Begin
kuda1:=kuda+nap;
if (kuda1 and 136)=0 then
if pole[kuda1]=0 then
if kuda1<112 then
Begin
// взятие
pole[kuda]:=-pole[kuda];
// поменям шашку противникак на нашу, чтоб не взять повторно.
cap[0]:=cap[0]+1;
cap[cap[0]]:=kuda;
kolvz:=kolvz+addmove(izot,kuda1,15,cap,mov);
kolvz:=kolvz+addmove(izot,kuda1,-15,cap,mov);
kolvz:=kolvz+addmove(izot,kuda1,17,cap,mov);
kolvz:=kolvz+addmove(izot,kuda1,-17,cap,mov);
pole[kuda]:=-pole[kuda];
if kolvz=0 then
Begin
kolvz:=1;
NomMoves:=mov.kolMoves+1;
mov.kolMoves:=NomMoves;
mov.moveOt[NomMoves]:=izot;
mov.moveKu[NomMoves]:=kuda1;
mov.dam[NomMoves]:=false;
mov.Vzatie:=true;
for i:=0 to cap[0] do mov.Cap[NomMoves][i]:=cap[i];
end;
cap[0]:=cap[0]-1;
end
Else
Begin
// взятие с превращением
pole[kuda]:=-pole[kuda];
cap[0]:=cap[0]+1;
cap[cap[0]]:=kuda;
kolvz:=kolvz+addmoveD(izot,kuda1,15,cap,mov);
kolvz:=kolvz+addmoveD(izot,kuda1,-15,cap,mov);
kolvz:=kolvz+addmoveD(izot,kuda1,17,cap,mov);
kolvz:=kolvz+addmoveD(izot,kuda1,-17,cap,mov);
pole[kuda]:=-pole[kuda];
if kolvz=0 then
Begin
kolvz:=1;
NomMoves:=mov.kolMoves+1;
mov.kolMoves:=NomMoves;
mov.moveOt[NomMoves]:=izot;
mov.moveKu[NomMoves]:=kuda1;
mov.dam[NomMoves]:=True;
mov.Vzatie:=true;
for i:=0 to cap[0] do mov.Cap[NomMoves][i]:=cap[i];
end;
cap[0]:=cap[0]-1;
end;
end;
addmove:=kolvz;
end;
Вот такая вспомогательная функция получилась для генерации взятий простой... Или это очень неоптимально? (все переменные модуля компилятор хранит в регистрах)
ЗЫ. Прошу извинить за такое название переменных - но мне так удобней.  |
|
|
| |
|
|
|
 |
Kallisto |
|
Тема сообщения:
Отправлено: Авг 24, 2006 - 06:45 AM
|
|
Зарегистрирован: Авг 18, 2003
Сообщений: 731
|
|
значит будет. после первого же просмотра.
почему perfit, не perft? |
|
|
| |
|
|
|
 |
NS |
|
Тема сообщения:
Отправлено: Авг 24, 2006 - 12:40 AM
|
|
Зарегистрирован: Авг 22, 2006
Сообщений: 614
Откуда : Санкт-Петербург
|
|
|
alemo писал(а):
skoree vsego Avrora zapisivayet xod kak: a1xc3xh8 ili a1xd4xh8 ... nu i tak dalee. Voobshe-to pravilno, ved dobav chernim eshe jdnu shahku na b6, i togda mozhno a1xd4xa7
Kazhdy programmiruyet po svoemu
Зачем понапрасну раширять дерево перебора,
И смотреть четыре одинаковых хода?
А если позиции после этого хода нет в хеше? |
|
|
| |
|
|
|
 |
alemo |
|
Тема сообщения:
Отправлено: Авг 24, 2006 - 12:35 AM
|
|

Зарегистрирован: Апр 04, 2003
Сообщений: 3772
|
|
skoree vsego Avrora zapisivayet xod kak: a1xc3xh8 ili a1xd4xh8 ... nu i tak dalee. Voobshe-to pravilno, ved dobav chernim eshe jdnu shahku na b6, i togda mozhno a1xd4xa7
Kazhdy programmiruyet po svoemu |
|
|
| |
|
|
|
 |
NS |
|
Тема сообщения:
Отправлено: Авг 23, 2006 - 11:30 PM
|
|
Зарегистрирован: Авг 22, 2006
Сообщений: 614
Откуда : Санкт-Петербург
|
|
Аврора считает, что дамкой a1 можно сбить простые b2 и g7 4-мя способами.
У меня один способ. |
|
|
| |
|
|
|
 |
NS |
|
Тема сообщения:
Отправлено: Авг 23, 2006 - 11:28 PM
|
|
Зарегистрирован: Авг 22, 2006
Сообщений: 614
Откуда : Санкт-Петербург
|
|
Я конечно идиот, но я уже час мучаюсь, как бы их (одинаковые) исключить, и притом быстро )))
Написал генератор (0x88) Сейчас передохну, и начну пробовать perfit. |
|
|
| |
|
|
|
 |
|
|
|
|
|