Google
 

Сайт Андрея Иванова

Андрей Иванов - все секреты шашек и шашистов

Login





 


 Забыли пароль?
 или новый пользователь? Зарегистрируйся!

Кто с нами

Пользователей:  На сайте
Пользователей:  Пользователей: 0
Гостей:  Гостей: 11
Всего:  Всего: 11
Пользователей:  Зарегистрированные
No members connected


Новая тема   Ответить
Предыдущая тема Версия для печати Войти и проверить личные сообщения Следующая тема
Автор Сообщение
Kallisto
Тема сообщения:   СообщениеОтправлено: Авг 24, 2006 - 02:02 PM



Зарегистрирован: Авг 18, 2003
Сообщений: 747

Чтобы прога нормально играла достаточно 4-х фигурной ЭБ.
Дебютную библиотеку обсуждали на гостевой Креста.
 
 Профиль пользователя отправить личное сообщение Послать e-mail WWW  
Ответить с цитатой Наверх
NS
Тема сообщения:   СообщениеОтправлено: Авг 24, 2006 - 02:02 PM



Зарегистрирован: Авг 22, 2006
Сообщений: 671
Откуда : Санкт-Петербург
ОК. Вечером запущу тест с make/unmake на последнем ходе.
Либо просто вышлю exe-шник. Надеюсь что генератор будет не особо медленней Smile
 
 Профиль пользователя отправить личное сообщение  
Ответить с цитатой Наверх
Kallisto
Тема сообщения:   СообщениеОтправлено: Авг 24, 2006 - 01:59 PM



Зарегистрирован: Авг 18, 2003
Сообщений: 747

В тех таблицах, что я приводил Каллисто при подсчете количества позиций не выполнял ходов (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
 
 Профиль пользователя отправить личное сообщение Послать e-mail WWW  
Ответить с цитатой Наверх
NS
Тема сообщения:   СообщениеОтправлено: Авг 24, 2006 - 01:00 PM



Зарегистрирован: Авг 22, 2006
Сообщений: 671
Откуда : Санкт-Петербург
Сверим быстродействие... Хотя я особо сильно "вылизывать" генератор не собираюсь. Smile
Насчет Эндшпильных библиотек - я посчитал, пятифигурки вполне влезают в память... Даже без особых ухищрений. Так что с эндшпильной библиотекой проблем скорей всего не будет, постараюсь сформировать сам. (или 5-ти фигурной мало?)
Вопрос только в дебютной.
 
 Профиль пользователя отправить личное сообщение  
Ответить с цитатой Наверх
Kallisto
Тема сообщения:   СообщениеОтправлено: Авг 24, 2006 - 12:39 PM



Зарегистрирован: Авг 18, 2003
Сообщений: 747

По скорости будет то же самое, т.к. ходов сбивающих более 2 шашек очень мало и несколько лишних проверок для них практически никак не скажутся.
 
 Профиль пользователя отправить личное сообщение Послать e-mail WWW  
Ответить с цитатой Наверх
NS
Тема сообщения:   СообщениеОтправлено: Авг 24, 2006 - 12:03 PM



Зарегистрирован: Авг 22, 2006
Сообщений: 671
Откуда : Санкт-Петербург
Да это я торможу по-полной. Это же не рекурсивная процедура - получается так же как у меня - шашка один раз снимается с доски, потом ставится...
Работать надо на работе, а не в чужие исходники пялиться Smile

Только со списком конечно глупость - я так и не нашел старых исходников, поэтому не помню как делал тогда, но сейчас сразу как сел - сразу мысль пришла что нужно просто перевернуть шашку.
 
 Профиль пользователя отправить личное сообщение  
Ответить с цитатой Наверх
Kallisto
Тема сообщения:   СообщениеОтправлено: Авг 24, 2006 - 12:01 PM



Зарегистрирован: Авг 18, 2003
Сообщений: 747

NS писал(а):

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

Так ведь это обнуление именно это и делает (только один раз).
 
 Профиль пользователя отправить личное сообщение Послать e-mail WWW  
Ответить с цитатой Наверх
Kallisto
Тема сообщения:   СообщениеОтправлено: Авг 24, 2006 - 11:59 AM



Зарегистрирован: Авг 18, 2003
Сообщений: 747

Блин, совсем запутал ты меня Smile
Ведь все правильно!!!
 
 Профиль пользователя отправить личное сообщение Послать e-mail WWW  
Ответить с цитатой Наверх
Kallisto
Тема сообщения:   СообщениеОтправлено: Авг 24, 2006 - 11:57 AM



Зарегистрирован: Авг 18, 2003
Сообщений: 747

Да тупо как-то получилось. Добавил проверку по спискам и забыл убрать удаление с доски. Видимо просто запутался при отладке.
Списков достаточно, чтобы все было правильно (так в Каллисто).
До переворачивания просто не догадался Smile
 
 Профиль пользователя отправить личное сообщение Послать e-mail WWW  
Ответить с цитатой Наверх
NS
Тема сообщения:   СообщениеОтправлено: Авг 24, 2006 - 11:52 AM



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

Код:
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;
}


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

Добавлено - виноват, это обнуляется поле с которого ход...
А зачем его обнулять? Для генерации взятий шашки достаточно один раз его обнулить, а потом просто не ставить её на доску. (п после завершения генераций обратно поставить) Тоже быстрее будет.
 
 Профиль пользователя отправить личное сообщение  
Ответить с цитатой Наверх
Kallisto
Тема сообщения:   СообщениеОтправлено: Авг 24, 2006 - 11:48 AM



Зарегистрирован: Авг 18, 2003
Сообщений: 747

Что-то одна строчка внутри фигурных скобок пропадает. Ну да ладно. И без нее понятно.
 
 Профиль пользователя отправить личное сообщение Послать e-mail WWW  
Ответить с цитатой Наверх
Kallisto
Тема сообщения:   СообщениеОтправлено: Авг 24, 2006 - 11:45 AM



Зарегистрирован: Авг 18, 2003
Сообщений: 747

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

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


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

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

Когда сделаешь perft?
 
 Профиль пользователя отправить личное сообщение Послать e-mail WWW  
Ответить с цитатой Наверх
plus600
Тема сообщения:   СообщениеОтправлено: Авг 24, 2006 - 10:58 AM



Зарегистрирован: Дек 24, 2002
Сообщений: 1329
Откуда : Москва
NS писал(а):
Мелкие огрехи в генераторе ходов сильно на силе не скажутся, и ошибка же не в Каллисто, а в открытых исходниках демонстрационного движка "SIDra" Smile

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

_________________
С уважением,
Сергей Старцев
______________________________________
Пользуюсь только программами серии Plus
 
 Профиль пользователя отправить личное сообщение WWW ICQ 
Ответить с цитатой Наверх
NS
Тема сообщения:   СообщениеОтправлено: Авг 24, 2006 - 10:51 AM



Зарегистрирован: Авг 22, 2006
Сообщений: 671
Откуда : Санкт-Петербург
Мелкие огрехи в генераторе ходов сильно на силе не скажутся, и ошибка же не в Каллисто, а в открытых исходниках демонстрационного движка "SIDra" Smile
 
 Профиль пользователя отправить личное сообщение  
Ответить с цитатой Наверх
plus600
Тема сообщения:   СообщениеОтправлено: Авг 24, 2006 - 10:31 AM



Зарегистрирован: Дек 24, 2002
Сообщений: 1329
Откуда : Москва
Kallisto писал(а):
Видимо, у меня дамка рано или поздно сможет пройтись через уже сбитую шашку, что неправильно. Но это очень исключительный случай.
Надо будет исправить.

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

_________________
С уважением,
Сергей Старцев
______________________________________
Пользуюсь только программами серии Plus
 
 Профиль пользователя отправить личное сообщение WWW ICQ 
Ответить с цитатой Наверх
Показать:     
Перейти к:  
Время в формате GMT + 3
Новая тема   Ответить
Предыдущая тема Версия для печати Войти и проверить личные сообщения Следующая тема
PNphpBB2 © 2003-2007 
 
Page created in 0.93836688995361 seconds.