История версий программ Джин & Ифрит

на главную страницу


История версий часть 1

 13.4.2008

Ifrit_b1_8
Подправил нулевой ход. Редукция 3.
Подправил оценочную функцию. Добавил мобильность ладей и слонов.
Исходники Ifrit_b1_8(94Kb)
Ifrit_b1_8(116Kb)

 19.4.2008

Ifrit_b1_9
Реализатор ходов разбил на функции для черных и белых. В итоге перебор слегка ускорился (5-10%).
Исправил нулевой ход. В предыдущей версии забыл пропустить ход.
В результате получал отсечение просмотром на меньшей глубине :) Редукция 3.
Исходники Ifrit_b1_9(94Kb)
Ifrit_b1_9(116Kb)

 20.4.2008

Ifrit_b1_9
Нулевой ход жестко глючит на глубинах 8-9 полуходов. Поэтому Ifrit_b1_9 перезалил с отключенным нулевых ходом.

 22.4.2008

Ifrit_b1_10
Нулевой ход подключил.
Без проверки на шах нулевой ход бил короля, а мой генератор не верит в позиции без короля, отсюда и глюки.
Так же учел ситуацию с взятием на проходе.
Исходники Ifrit_b1_10(95Kb)
Ifrit_b1_10(116Kb)

 27.4.2008

Ifrit_b1_11
Подправил оценку.
Исходники Ifrit_b1_11(95Kb)
Ifrit_b1_11(116Kb)

 17.5.2008

Ifrit_b1_12
Перешел на новые списки ходов. Пришлось перелопатить всю программу.
Теперь вся информация упакована в одно целое(int) число. Списки остались глобальными.
Слегка причесал генератор ходов.
Исходники Ifrit_b1_12(95Kb)
Ifrit_b1_12(116Kb)

 18.5.2008

Ifrit_b2
Перешел на стековые списки. Это стало возможным благодаря упаковке информации в одно число.
По скорости то же, а программа несколько упростилась, да и в отладке проще.
Усложнил оценку позиции, что несколько замедлило перебор.
Исходники Ifrit_b2(93Kb)
Ifrit_b2(116Kb)

 25.5.2008

Ifrit_b2_1
Исправил ошибку инициализации в оценочной функции.
Закончил перевод всех функций на новые списки ходов.
Исходники Ifrit_b2_1(92Kb)
Ifrit_b2_1(116Kb)

 15.6.2008

Ifrit_b2_2
Исправил взятие на проходе в генераторе. Ошибка проявлялась в редком случае когда брать можно двумя пешками.
Включил продление на взятиях.

 5.7.2008

Ifrit_b2_3
Сделал регулируемую хеш таблицу. Теперь пользователь сам определяет сколько памяти выделить под хеш.
Перешел на 64 битный хеш ключ. До этого был тестовый 32 битный.

 12.7.2008

Ifrit_b2_4
Доделал регулируемую хеш таблицу.
Добавил второго киллера.

 2.9.2008

Ifrit_b2_5
Дописал комментарии и привел их в соответствие с последней редакцией кода.
Перехожу на библиотеки "Си ++". Размер "exe" увеличился где-то раза в два, поэтому решил "ехе" тоже сжимать в архив.
Исправил таймер.
Исправил вставку второго киллера.

Слегка изменил сортировку:
1) ход из хеша;
2) лучшее взятие по mvv/lva;
3) киллер 1;
4) киллер 2;
5) упорядочение по централизации фигур.

В целях ввода упорядочения по истории в список ходов добавил оценку для сортировки.
Пока использую ее для упорядочения ходов по централизации фигур.

 6.9.2008

Выложил "Ifrit история разработки часть 4".
Начал описание алогритмов Ifrit_b.


 15.9.2008

Ifrit_b2_6
Продолжил описание алогритмов Ifrit_b.
Слегка причесал код.
Поправил оценочную функцию.
Добавил futility pruning.

 17.9.2008

Ifrit_b2_7
Поправил оценочную функцию.
Поправил futility pruning.
Добавил late move reductions.

 21.9.2008

Ifrit_b2_8
Переписал форсированный поиск.
Добавил internal iterative deepening.

 12.10.2008

Ifrit_b2_9
Добавил history heuristic(эвристику истории).
Исправил тестовый модуль(после добавления динамического хеша выдавал ошибку инициализации хеш-таблицы)
Исправил баг в генераторе ходов(при возврате пешки на два поля всегда писал взятие на проходе = 0)
Интересно что этот баг никак не отражался на трех известных тестовых позициях!

 8.11.2008

Ifrit_b2_10
Перешел к бета-версии. Теперь буду тестировать и оптимизировать код.
Новые методы добавлять не планирую.
Сделал пошаговое вычисление оценки материала, т.е. в корне считаем материал, а потом только корректируем оценку при разменах.
В генераторе ходов убрал лишние условия и причесал код.
Причесал код в реализаторе ходов.
В разделе "Ifrit_b - основные алгоритмы" выложил описание генератора ходов.

 17.11.2008

Ifrit_b2_11
Нашел и исправил баг в реализаторе ходов. Баг связан с флагами рокировки.
Подправил форсированный поиск.

 29.11.2008

Ifrit_b2_12
Подправил форсированный поиск.

 14.12.2008

Ifrit_b3
Подправил оценку, форсированный поиск, null move, futility pruning.
LMR пока использую как PVS.

 21.12.2008

Ifrit_b3_1
Подправил futility pruning, LMR.
Изменил запись лучшего варианта в узле.

 3.1.2009

Ifrit_b3_2
Подправил детектор шахов, форсированный поиск, хеш-таблицу, историю, IID.
В форсированный поиск добавил delta pruning.
У Стрелки давно уже свой сайт, поэтому убираю с главной страницы исходники Стрелки в виде html-страниц.

 6.1.2009

Ifrit_b3_3
В оценку добавил мобильность ферзя, коня, ладьи, учет атаки окрестности короля.

 10.1.2009

Ifrit_b3_4
Перешел к сокращенному поиску всех неглавных(не pv) вариантов.

 17.1.2009

Ifrit_b3_5
В главном варианте(pv variant) LMR не применяем.
В главном варианте(pv variant) применяем продления на разменах.

 28.1.2009

Ifrit_b3_5comment
Добавил еще комментариев. Прокомментировал параметры всех функций.

 15.2.2009

Ifrit_j1
Перешел на классы. Потеря в скорости перебора ~10%

 27.2.2009

Ifrit_j1_refactoring
Расчистил пространство глобальных имен.
Указателям присвоил префикс р_.
Скрыл внутренние методы классов.

 9.3.2009

Ifrit_j1_1
Всем флагам присвоил логический тип и префикс flag_
В классе FULLSEARCH модернизировал режимы компиляции.
В классе BITBOARDGENERATOR добавил именованных констант.
Структуры текущего и лучшего варианта переместил в класс PVSAVE.
Проверку трехкратного повторения позиции переместил в класс HASHM.
Добавил распознавание трехкратного повторения позиции в рассчитываемом варианте.

 11.4.2009

Ifrit_j1_1(comment)
Добавил описания классов. Подредактировал код.

 13.6.2009

Ifrit_j1_2
Выход версии задержал, так как перебрал и протестировал весь поиск.
К следующей версии планирую переписать оценку.

Отключил внутренние итерации(internal iterative deepening) так как в моей реализации они
неэффективны.
Отключил delta pruning в форсированном поиске.

Добавил комментариев.
Сделал остановку поиска, если найден мат.
Переделал продления на шахах.
Переделал продления на разменах.
В нулевом ходе редукцию снизил с 3 до 2.
Сделал отключение нулевого хода, когда материала мало и вероятность цугцванга повышается.

 28.7.2009

Добавил "Дневник разработчика шахматной программы часть 5".

 18.8.2009

Ifrit_j1_3
Исправил ошибку для случая, когда задаем время на ход. Независимо от времени поиск велся на глубине один полуход.
Функцию оценки разбил на несколько функций.
Параметры оценки вынес во внешний файл. Теперь желающие могут настроить оценку.
Сделал экстренный ход, если поиск слишком задержался на глубине.
В нулевом ходе редукцию поднял с 2 до 3.

 29.8.2009

Ifrit_j1_4
Отключил futility pruning. В некоторых задачах решение отодвигает на полуход вглубь.
Отключил сортировку по истории.
Включил delta pruning.

 9.9.2009

Ifrit_j1_5
Переписал и протестировал хеш-таблицу.
Добавил использование оценки из хеш-таблицы.

 29.9.2009

Ifrit_j1_6
Исправил и протестировал использование оценки из хеш-таблицы.
Отключил delta pruning.
Отключил продление на разменах в главном варианте.
Полностью удалил internal iterative deepening.

 18.10.2009

Ifrit_j1_7
Доработал и протестировал использование оценки из хеш-таблицы.
Добавил сортировку корневого списка ходов. Сортируем по оценкам из предыдущих итераций.
Оценка позиции примитивная. Материал + pst. Внешний файл не используем.

 25.10.2009

Ifrit_j1_8
В нулевой ход добавил динамическую редукцию.
В нулевой ход добавил проверку на цугцванг.
Линию варианта пишем только в главном(pv) поиске.
Включил продление на разменах в главном(pv) поиске.
Ifrit_j1_7 64 bit компиляция от Dann Corbit

 2.11.2009

Ifrit_j1_9
Подправил нулевой ход.
Переписал детектор трехкратного повтора позиций.

 14.11.2009

Ifrit_j2_0
Почистил код.
Удалил сортировку по истории.
Отключил продление на разменах в главном варианте.
Подправил оценку позиции.

 15.11.2008

Выложил "Ifrit. История разработки. Часть 6".


 17.11.2009

Ifrit_j2_1
Вернул постоянную редукцию нулевого хода 4.
Включил продления на разменах в главном варианте.
Доработал мобильность фигур и атаку на короля.
Подправил оценку позиции.

 20.11.2009

Ifrit_j2_2
Доработал delta pruning.
Продление на размене заменил на продление побеждающего взятия.
Подправил оценку позиции.

 28.11.2009

Ifrit_j2_3
Переписал LMR.
Отключил мобильность.
Подправил оценку позиции.

 13.12.2009

Ifrit_j2_4
Подправил таймер.
Переписал распределение времени на ход.
Маленькое изменение в кэшировании хода.

 17.12.2009

Добавил ссылку на турнир.
Ифрит играет в турнире 17th Amateur Series Division 8, который проводит Graham Banks
Подробности смотрите на форуме.
Ifrit j2.4 is playing in tournament:
17th Amateur Series Division 8

 20.12.2009

Ifrit_j2_5
Переписал LMR.
Добавил возраст записи в хеш-таблицу.

 26.12.2009

Ifrit_j2_6
Подправил запись в хеш-таблицу.
Подправил использование оценки из хеш-таблицы.

 10.1.2010

Ifrit_j2_7
Попытался оптимизировать код.
Уменьшил размер записи хеш-таблицы.
Оптимизировал переменные.

 28.1.2010

Ifrit_j2_8
В очередной раз переписал запись в хеш-таблицу.
Теперь в одной ячейке таблицы храню две позиции - первая для сортировки ходов, а вторая для отсечки по оценке .

По совету Dann Corbit убрал избыточный вывод из UCI.
Кстати, именно по совету Dann Corbit в свое время я начал переход на чистый C++.

Исходники Ifrit_j2_8(135Kb)
Ifrit_j2_8(97Kb)

 15.2.2010

Ifrit_j2_9
Немного изменил запись в хеш-таблицу.

Исходники Ifrit_j2_9(135Kb)
Ifrit_j2_9(99Kb)

 17.2.2010

Ifrit_j2_9
Заменил exe файл. Вернул статическую линковку библиотек.

 25.4.2010

Ifrit_j3
Отключил два предупреждения компилятора. Подробности в файле a_Structure.h
Константы в генераторе вынес в отдельный файл d_Bitboard_const.h.
Косметическая правка кода генератора.
Заменил классы пространствами имен(namespace).
Переименовал некоторые модули.

Исходники Ifrit_j3(133Kb)
Ifrit_j3(96Kb)

 3.5.2010

Ifrit_j3_1
Привел в порядок пространства имен(namespace).
Заменил макроопределения(macros) константами.
Добавил модуль j_ZObrist.
Подправил код.
Заменил ник(nickname) на имя.

Исходники Ifrit_j3_1(134Kb)
Ifrit_j3_1(96Kb)

 29.5.2010

Ifrit_j3_2
Отформатировал в новом стиле весь код программы.
(Около 30 часов непрерывного щелканья по клавишам tab и enter :)

Добавил модуль g_Search_root.
Отключил продления на разменах.

Исходники Ifrit_j3_2(136Kb)
Ifrit_j3_2(96Kb)

 3.7.2010

Ifrit_j3_3
Удалил продления на разменах.
Удалил futility pruning.
Выделил PVS в функцию.
Выделил LMR в функцию.
Переписал оценку(evaluate).
Исправил ошибку в LMR(lmr_reduction была глобальной).
Поправил delta pruning.

Исходники Ifrit_j3_3(137Kb)
Ifrit_j3_3(95Kb)

 11.7.2010

Ifrit_j3_4
Переписал контроль времени.

Исходники Ifrit_j3_4(138Kb)
Ifrit_j3_4(96Kb)

 14.7.2010

Выложил "Ifrit. История разработки. Часть 7".


 25.7.2010

Ifrit_j3_5
Добавил Futility pruning.
Добавил Razoring.
Подправил оценку.
Вроде прирост есть. Но есть ли 100 пунктов затрудняюсь сказать. Слишком неровная игра.

Исходники Ifrit_j3_5(139Kb)
Ifrit_j3_5(96Kb)

 8.8.2010

Ifrit_j3_6
Подправил Futility pruning.
Подправил Razoring.

Исходники Ifrit_j3_6(139Kb)
Ifrit_j3_6(98Kb)