Потестировав Fathom.exe для таблиц syzygy пришел к выводу.
Fathom.exe бесполезна для использования ее в своих прогах.
1. Много бесполезной информации, а DTM отсутствует.
2. Да можно было использовать WDL (Win-Draw-Loss)
Но странным образом Fathom.exe некоторые позиции игнорирует
Пример
6Bk/5n2/8/8/3p4/8/8/1K6 w - -
error: unable to probe tablebase; position invalid, illegal or not in tablebase
В отличии от предыдущего результата - error: unable to probe tablebase; position invalid, illegal or not in tablebase
Вопрос остается открытым, по поводу Fathom.exe.
PS
Скачивал только WDL.
Еще 6 фигурные скачаю, потом потестю
PPS
6 фигурных там нет
Веб-сервис Tablebase Налимова
Это простой веб-сервис для доступа к серверу базы таблиц Nalimov endgame объемом 7 ГБ. На сервере представлены все эндшпили на 3, 4 и 5 человек. Доступ к серверу можно получить, отправив на него SOAP-запросы. SOAP - это открытый стандарт для доступа к веб-сервисам, основанный на стандартах open Internet и XML.
Можно поэксперементировть
Все движки юзают локальные таблицы
Веб это забавно, но будет практически тормозить знатно
Я любитель эксперементов
Кстати, уважаемый Vladimirovich, есть ли у вас 6 фигурные бызы syzygyn?
Конечно есть в открытом доступе эти базы, но скачивать по одному, как то не айс.
Если разбить на части по 2 гига, то было бы не плохо.
Возможно есть способ скачать их с сервера все скопом, но как?
Конечно есть в открытом доступе эти базы, но скачивать по одному, как то не айс.
Ну вот и я не скачивал
Если честно, для практических целей это замусоривание диска.
Syzygy хоть и меньше Налимова гораздо, но кушает все равно много
При этом очень много позиций пригодятся только задачникам и этюдникам.
Для закачки оптом
Практически можно под Линухом использовать тулзу WGET (есть под винду где-то тоже)
Я так думаю, что сервер Сизиги специально дает задержку.
Если к ним все бросятся качать по 100 гиг, он упадет, как от DDOS атаки.
Там и по одной качать не сахар.
Плюс у WinHTTrack есть куча опций Set Options, которые все игнорируют
Я думал, каким образом ускорить алгоритм - поиск мата в n ходов.
Во первых также, как и в minimax с alfa beta, скорость зависит от порядка ходов.
Отсортировать ходы не представляется возможным, отсутствуют критерии сортировки.
Решил использовать таблицы транспозиции
Warning: Spoiler![ Click to expand ][ Click to hide ]
Warning: Spoiler![ Click to expand ][ Click to hide ]
Warning: Spoiler![ Click to expand ][ Click to hide ]
Появилась возможность проверить правильно ли реализованы хэш таблицы, покрайне мере я так думаю
Ведь если таблицы работают не правильно или реализация не правильная, то задачи решать правильно не будет.
Warning: Spoiler![ Click to expand ][ Click to hide ]
Ну и результаты теста с хэш таблицами (на тяжелых задачах, где много дальнобойных фигур
3b4/2r3pr/2np1N2/1B3P2/1p5p/8/5K1p/7k w - - 0 1
Warning: Spoiler![ Click to expand ][ Click to hide ]
TableSize = 2000000; // Размер таблицы в количестве записей
Мат в 5 хода
3b4/2r3pr/2np1N2/1B3P2/1p5p/8/5K1p/7k w - - 0 1 mate 5 moves Bf1!
depth=9
Элементов хэш таблицы: 1311202
Коллизии: 36174646
move:b5f1
Checkmates =4288422
Время: Часы:0, Минуты: 5, Секунды: 37, Миллисекунды: 500
На 7 мин быстрее
K1N1Q3/B1p1Npb1/5ppn/pP6/q2rkPpP/P1r1p1P1/B1p1P3/1n5b w - - 0 1
Warning: Spoiler![ Click to expand ][ Click to hide ]
transposition_table
TableSize = 2000000; // Размер таблицы в количестве записей
Мат в 5 хода
K1N1Q3/B1p1Npb1/5ppn/pP6/q2rkPpP/P1r1p1P1/B1p1P3/1n5b w - - 0 1 mate 5 moves Bc5!
depth=9
Элементов хэш таблицы: 1577694
Коллизии: 1532649
move:a7c5
Checkmates =2134802
Время: Часы:0, Минуты: 6, Секунды: 39, Миллисекунды: 250
чуть быстрее
QQ6/5p1p/6p1/3r4/4k3/R7/5KPP/1Rrq4 w - - 1 38
Warning: Spoiler![ Click to expand ][ Click to hide ]
transposition_table
TableSize = 2000000; // Размер таблицы в количестве записей
Мат в 5 хода
QQ6/5p1p/6p1/3r4/4k3/R7/5KPP/1Rrq4 w - - 1 38 mate 5 moves b1b4
depth=9
Элементов хэш таблицы: 1305218
Коллизии: 58101146
move:b1b4
Checkmates =935249
Время: Часы:0, Минуты: 10, Секунды: 9, Миллисекунды: 125
на 15 мин быстрее
Проверил на ряде других задач - работает
1b3NrR/P1pp2pK/1p2p1RQ/5pP1/1P3pk1/1P6/2PPP2P/N7 w - f6 0 1
Warning: Spoiler![ Click to expand ][ Click to hide ]
Немного тупанул
При коллизии наверное луше обновить запись, а не стереть
Warning: Spoiler![ Click to expand ][ Click to hide ]
// write hash entry data
procedure write_hash_entry(score:byte; depth: Integer);
var
index: Integer;
begin
index := hash_key mod tt.mask;
if tt.data[index].hash_key = 0 then
begin
tt.data[index].hash_key := hash_key;
tt.data[index].depth := depth;
tt.data[index].score := score;
Inc(tt.count);
exit;
end;
if tt.data[index].hash_key <> hash_key then begin
tt.data[index].hash_key := hash_key;
tt.data[index].depth := depth;
tt.data[index].score := score;
Inc(tt.collisions);
end;
end;
Да, наверное так лучше
Warning: Spoiler![ Click to expand ][ Click to hide ]
Но есть задачи, где в разумные сроки невозможно просчитать решение, основываясь на этом методе.
r2q1rk1/5ppp/p1pp4/1n2p3/2B1P3/2PPQP1P/P4P2/2KR2R1 w - -
На вскидку оценить число позиций при depth=11
30^11
Результат
17'714'700'000'000'000
Warning: Spoiler![ Click to expand ][ Click to hide ]
perft_64bit_fancy_popcnt.exe
Enter FEN String:
r2q1rk1/5ppp/p1pp4/1n2p3/2B1P3/2PPQP1P/P4P2/2KR2R1 w - -
Perft 1: 36, Time taken: 2.70086e-006 seconds, nps: 13329093
Perft 2: 953, Time taken: 1.83658e-005 seconds, nps: 51889812
Perft 3: 33170, Time taken: 0.000155029 seconds, nps: 213959559
Perft 4: 905555, Time taken: 0.00482481 seconds, nps: 187687020
Perft 5: 30970181, Time taken: 0.11508 seconds, nps: 269117882
Perft 6: 875122491, Time taken: 4.61851 seconds, nps: 189481710
Perft 7: 29724722883, Time taken: 114.475 seconds, nps: 259661088
Perft 8: 865642560949, Time taken: 5147.54 seconds, nps: 168166419
Perft 9: 29349634656590, Time taken: 151927 seconds, nps: 193182729
Perft 9: 29'349'634'656'590
Warning: Spoiler![ Click to expand ][ Click to hide ]
Числа Гугол, Гуголплекс и Гиггол, конечно очень большие, но отнюдь не самые, есть еще такие числа как: Гаггол, Бугол, Число Грэма, Траддом, Биггол, Трултом, Тругол, Квадругол, Квадрексом, Квинтугол, Губол, Бубол и другие.
Можно распознавать шахматные диаграммы прямо в браузере и получить для этой диаграммы fen строку.
Мне интересно извлекать задачи с различных сайтов, быстро и удобно alexlaw wrote:
null move prunning
- я не увидел возможности использовать для решения задач
Во первых также, как и в minimax с alfa beta, скорость зависит от порядка ходов.
Отсортировать ходы не представляется возможным, отсутствуют критерии сортировки.
Все же сортировать ходы - это правильный путь.
Попробовал
Warning: Spoiler![ Click to expand ][ Click to hide ]
Время затраченное на сортировку компенсируется, если обрезка происходит как можно раньше.
Имеет смысл при многоходовых задачах в 5 и более ходов.
function read_hash_entry(depth: Integer):byte;
var
index: Integer;
begin
index := hash_key mod tt.mask;
result:=255;
if (depth<tt.data[index].depth) and (tt.data[index].hash_key = hash_key) then
begin
// extract stored score from TT entry
result:=tt.data[index].score;
end;
end;
было
if (depth<=tt.data[index].depth) and (tt.data[index].hash_key = hash_key) then
8x8 светодиодная матрица на max7219.
Просто светодиоды.
Не понял. А как там фигурки светятся? P, K....
Светятся не фигуры, а поля под фигурами.
Фигуры и доска настоящие.
Подсветка полей откуда и куда ходить.
Вот например подсвечиваются поля, на которых расположены фигуры.
Хочу заметить, У меня пока всего лишь прототип для отработки логики и прошивки контроллера.
Решил еще поработать над матчастью, чтобы код поместился в мк.
А пока вопрос.
Я пока еще не решил, как определять фигуры на доске.
Рассматриваю вариант - RFID — способ автоматической идентификации объектов, в котором посредством радиосигналов считываются или записываются данные, хранящиеся в так называемых транспондерах...
Фигуры на доске определить можно, а вот позицию расположения фигур, не очень понятно.
Можно конечно просто герконами определить - занято поле или нет, без определения типа.