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

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

 10.12.2006

And_chess_K- Предлагаю вашему вниманию шахматную программу, написанную на языке Java. С самого начала обращаю ваше внимание на то, что в программе нет шаха, мата и инверсии доски, а кроме того - она легко бьет чужого короля и отдает своего за вражеского! :).
And_chessK(95Kb)
Напутствие игрокам с And_chessK

Ниже представлены предварительные версии программы Джин. Джин находится в процессе разработки т.е. каждая следующая версия делает предыдущую совершенно неактуальной. Разве что в ней появятся глюки которых не было в предыдущих :)

GENIE_0_0_1 – самая первая версия программы джин. Эта версия была написана на базе And_chess_K. В ней я заново переписал движок. Мы используем полный перебор. Движок выводит вариант и оценку этого варианта. Последний ход варианта дебильный.
Genie_0_0_1 (113Kb)

 23.12.2006

GENIE_0_0_2- в этой версии движок научился делать рокировку. Но рокировка в оболочке не доработана так что если снимут ранее не ходившую ладью то можно рокировать с возникновением ладьи :) В движке этого бага нет.
Genie_0_0_2 (115Kb)

 30.12.2006

GENIE_0_0_3- в этой версии движок научился бить на проходе.
Genie_0_0_3 (116Kb)

 1.01.2007

GENIE_0_0_4- в этой версии движок перестал есть короля. Также он видит шах и мат и соответственно если мы имеем матовую комбинацию то игра прекращается. Движок не знает правил трехкратного повторения позиции и 50-го хода.
Genie_0_0_4 (117Kb)

 5.01.2007

GENIE_0_0_5- в этой версии я подключил Тогу. Тога это сильнейшая бесплатная шахматная программа. Что бы с ней играть нужно в папку где находится Джин поместить TogaII.exe. После этого можно играть. Если же Тоги не будет а флажок игры с ней поставлен то хода от проги вы не дождетесь :) Тогу я тоже выложил на своем сайте.
Genie_0_0_5(116Kb)
Дневник разработчика шахматной программы Джин часть 2

Ниже представлены предварительные версии программы Ифрит. Ифрит находится в процессе разработки т.е. каждая следующая версия делает предыдущую совершенно неактуальной.

 28.01.2007

Ифрит - шахматный UCI движок написанный на языке С++.
Версия Ifrit_C.0.0.1 -Полный перебор на два хода. В матовой позиции жрет вражеского короля. Не знает правила трех повторов позиции и 50 ходов.
Ifrit_C.0.0.2 -Сделал альфа-бета отсечение и вывод варианта. Можно устанавливать глубину перебора. По умолчанию 5 полуходов

 23.02.2007

Ifrit_C.0.0.3
Сделал косметическую правку кода. Добавил комментариев.
Полный перебор меня не устраивает, а "метод интересных продолжений" еще обдумываю. Отсюда и простой.

 17.03.2007

Ifrit_C.0.0.4
Заново переписал функцию перебора. Теперь мы оцениваем позицию на каждом полуходе. Даная реализация использует полный перебор но с оценкой в каждом узле. Комфортная глубина игры 4 полухода. Играет так же как предыдущая но углубляется медленнее. Тут заложен фундамент который должен усилить следующие версии.

 31.03.2007

Ifrit_C5
Сделал альфа-бета отсечение. Быстро играет при depth 4. Рекомендую устанавливать четную глубину перебора. Устанавливается глубина перебора(в полуходах) не более 9. Если поставить глубину depth 10 то Ифрит выставит 1. Программа больше не нападает на вражеского короля в матовой ситуации. Но по прежнему рокирует из под шаха и через битые поля. Не знает правила трех повторов позиции и пятидесяти ходов. От форсированных взятий пока отказался так же как и от узкого луча поиска.

 07.05.2007

Ifrit_C6
Заново переписал модуль правил. В модуль подается доска в виде структуры, а на выходе получаем список возможных ходов. Сделал на основе доски 8 на 16. Это известная техника и ничего нового тут я не сделал. Так как новый модуль подключен через переходники, то пока прироста скорости нет. Выложил, потому что закончился еще один этап хотя на данный момент изменения неощутимы. Уже в следующей версии должен быть прирост скорости.

 13.05.2007

Ifrit_C7
Заново переписал реализатор ходов. По моему прирост скорости ~20%. Теперь он напрямую завязан на модуль правил без всяких переходников. Массивы вариантов и дерево перебора остались старыми. В следующей версии я их перепишу.

 22.05.2007

Ifrit_C8
Полный перебор без альфа-беты. Использую как точку отсчета.

 27.05.2007

Ifrit_C9
Свершилось! Полностью перешел на новый генератор 8 на 16. Теперь нет никаких переходников.  Все работает на новых структурах данных. Есть альфа-бета отсечение. Нормально играет при depth 5.

 1.06.2007

Ifrit_C10
Доработал линию вывода варианта. Это последняя версия проги, которая не знает шаха, т.е. рокирует под шахом и не умеет ставить маты. В следующей версии генератор шахов уже будет.

 3.06.2007

Ifrit_C11
Знает все правила кроме трехкратного повторения позиции и правила 50 ходов. Нормально играет при depth 5. Продлений нет, поэтому ярко выражен эффект горизонта.

 8.06.2007

Ifrit_C12
Нормально играет при depth 6. При переборе взятия рассматривает первыми. 

 14.06.2007

Ifrit_C13
Причесал код. Сделал отключаемое средствами препроцессора тестирование. В итоге исполняемый код уменьшился до 60 кб! Сделал вывод текущего варианта. Нормально играет при depth 7. При переборе взятия рассматривает первыми.

 17.06.2007

Ifrit_C14
Отладил матовую атаку. Нормально играет при depth 6.

 23.06.2007

Ifrit_C15
Выводит варианты разной длины, но не больше максимальной глубины. Нормально играет при depth 6.

 15.07.2007

Ifrit_C16
Сделал честную проверку на шах. Детектор шахов крайне медленный. Нормально играет при depth 6.

 16.07.2007

Ifrit_C16_1
Никогда не думал, что буду выпускать версии типа 16_1 :) Но время переделки возрастает, а баги требуют немедленного исправления, так что открыл новую традицию. Ифрит, как садист, выбирал не самый короткий путь к мату. Исправил, и теперь он ищет кратчайший путь.

 22.07.2007

Ifrit_C17
Переписал детектор шахов. Где только можно перевел структуры с int на short int. Сделал печать фигуры превращения пешки в вариантах. Нормально играет при depth 6.

 02.08.2007

Ifrit_C17_3
Доработал превращение пешки при инициализации стартовой позиции. Убрал пробел в вариантах когда пешка не превращается. Раньше вместо фигуры превращения печатался пробел.

 04.08.2007

Ifrit_C17_4
Доработал превращение пешки при инициализации стартовой позиции.

 18.08.2007

Ifrit_C18
Сделал вывод дистанции до мата. Переписал вывод вариантов. Нормально играет при depth 6.
Ifrit_Forced_C18
Версия с просчетом взятий до глубины depth 10. Нормально играет при основной глубине depth 5.

 14.09.2007

Отредактировал главную страницу сайта(HTML-код). Добавил комментариев.
Упорядочил структуру и выкинул лишнее. На внешнем виде это почти не отразилось :)

 15.09.2007

Ifrit_C18_1
Исправил вывод оценки.

 18.09.2007

Ifrit_C19
Сделал форсированный ход и корректный выход в любой момент. Нормально играет при depth 6.

 23.09.2007

Ifrit_C20
Добавил правило трехкратного повторения позиции. Нормально играет при depth 6.

 11.10.2007

Ifrit_C20_2
Добавил комментариев.

 13.10.2007

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

 19.10.2007

Ifrit_C21
Включена форсировка до 10 полуходов.

 28.10.2007

Ifrit_C22
Переписал функцию форсированного перебора. Включена форсировка до 10 полуходов. Подправил вывод вариантов. Сделал итерационное углубление, но пока без хеширования.

 30.10.2007

Ifrit_C22_1
Переписал альфу бету в основном и форсированном варианте. Реализовал самую прозрачную и эффективную версию. Конечно это на мой взгляд :) Сравнительно быстро играет при глубине depth 5.

 1.11.2007

Ifrit_C22_3
Убрал ограничение на глубину форсированного варианта. Исправил форсированный вариант. На глубине depth 5 думает до 16 мин(на сравнительно слабой машине). Что конечно неприемлемо. Будем с этим бороться :)

 3.11.2007

Ifrit_C23
Реализовал MVV/LVA(наиболее ценная жертва -наименее ценный нападающий) сортировку взятий. Для этого ввел в список избыточных ходов массив взятых фигур. Получил ощутимый прирост в скорости. На глубине depth 5 думает до 1 мин.

 12.11.2007

Ifrit_C23_1
Подправил форсированный вариант. Слегка подкорректировал оценку позиции. Сравнительно быстро играет при глубине depth 6.

 17.11.2007

Ifrit_C24
Подправил форсированный вариант. Теперь продолжаю не только когда фигура взята, но также, когда фигура под боем.
Сделал блиц контроль, заданное время на ход. Пока добавление времени за ход не понимает. Весьма своеобразно распределяет время на партию. :)

 18.11.2007

Ifrit_C25
Добавил бесконечный анализ. Сделал отдельный генератор взятий. Движок слегка ускорился.

 26.11.2007

Ifrit_C26
Обнаружил, что тестовая функция не работает. Оказалось, что функция strtok разрушает входящую строку. А я довольно долго искал ошибки в переборе :) Сделал список возможных ходов глобальным. Пришлось прилично менять код. В результате быстродействие резко упало. Хотя, если отключаешь форсировку скорость на том же уровне. На глубине depth 4 думает до 1 мин.

 27.11.2007

Ifrit_C26_1
Забыл включить альфа-бета отсечение. Отсюда и низкая скорость. А я-то было подумал, что виноваты глобальные списки :) Это версия с форсировками. По сути, это 25-ка только с глобальными списками ходов. Ну и исправил некоторые баги.
Ifrit_C26_2
Здесь подключил форсировку на шахах. Ради этого я и затеял глобальные списки.

 29.11.2007

Добавил 3-ю часть истории разработки Ифрита.

 9.12.2007

Ifrit_C26_4
Переписал альфа-бета в основном и форсированном поиске. Вернулся к схеме с амортизацией отказов. Подправил вывод варианта в форсированном поиске. Ввел контроль соответствия оценки и варианта. Сделал вывод тестовой информации в форсировке(при отладке).

 12.12.2007

Ifrit_C26_5
Слегка изменил оценку. Добавил бонус в пешку за существование фигур. Чтобы движок не отдавал фигуры за пешки. Все равно на их реализацию глубины не хватает.

 17.12.2007

Ifrit_C27
Сделал хеширование ходов. Ускорения почти нет. Зато теперь, как правило, не возвращается к кривому ходу во время итераций :) Реализация хеша предварительная и нужна для отладки.
Dann Corbit посмотрел исходники Ифрита(Ifrit_С27)
"I made some corrections"
Dann Corbit

 22.12.2007

Ifrit_C28
Добавил недействительное перемещение(null move). Использую на глубине 2. Учел некоторые замечания Дена Корбита (Dann Corbit). Убрал критические баги (неинициализированная структура и переполнение буфера). Стоит ли отказываться от си-библиотек в пользу си++ я еще подумаю :)

 23.12.2007

Ifrit_C28_1
Исправил недействительное перемещение(null move). Использую на глубине, начиная с 2.

 31.12.2007

Ifrit_C28_2
Отключил недействительное перемещение (null move). Потому что в данной реализации ускорение от null move всего ~30%. Причем, тупит в цугцвангах и стиль игры мне не нравиться, поэтому решил пока обойтись без null move.
По-новому отсортировал модули. Подправил оценку. Теперь есть штраф за сдвоенные пешки. Также слоны и ладьи стремятся контролировать как можно больше полей. Добавил возможность отключения методик (типа альфы-беты, хеш-таблицы и т.д.) перед компиляцией. "Причесал" код в модуле перебора.

 4.1.2008

Ifrit_C29
Переделал оценку. Теперь в конце основного перебора считаем только позиционный фактор, а в конце форсировки только материал. Добавил negascout, только он не ускоряет, а тормозит перебор. Пока отключил. Будем разбираться. Подправил вывод варианта. Теперь выводится ход, который обсчитывается, а не тот, который уже обсчитали. Добавил эвристику убийцы (killer heuristic). Ускорение видно. Переписал функцию форсированного поиска.

 5.1.2008

Ifrit_C29_1
Ограничение на форсировку на шахе увеличил до 20 полуходов. Добавил сортировку ходов. Список смотрим в следующем порядке конь, слон, ферзь, ладья, король, пешки. Продолжаю размножать модули :)

 6.1.2008

Добавил компиляцию Ифрита 28_1 от Dann Corbit. Опубликовал с задержкой потому что неделю не заглядывал в почту.
"This is an update of your latest version. The code will compile with modern C++ compilers."
Dann Corbit

 7.1.2008

Ifrit_C29_2
Изменил оценку. Добавил штраф за бреши в щите короля. Включил negascout. Включил null move.

 10.1.2008

Добавил свои размышления о стратегии поиска. Добавил лицензионное соглашение.
Хочу отметить один момент. Государственным языком у нас является русский язык и юридическую
силу имеют только документы написанные на русском языке, следовательно оригинал
GNU\GPL в нашей стране не действителен. :)
Некоторые мысли

 13.1.2008

Выложил исходники Стрелки в виде html-страниц. Теперь для их изучения нужен только интернет :)

 15.1.2008

Добавил текста в свои размышления о стратегии поиска.

 28.1.2008

Ifrit_C30
Начал переход на битбоард (bitboard).
В данной версии написал битбоард-генератор списка ходов. Подключил его через переходник. Реализатор ходов и все остальные
части программы остались прежними. Программа получилась более тормозная, чем предыдущая.
Так же:
- в выводе варианта дополнительно печатем линию после прохождения очередной глубины;
- сделал, чтобы корректно отображалось количество просмотренных узлов на данной глубине;
- теперь считаю узлы только основного перебора, без учета форсировок;
- изменил сортировку ходов. Теперь сортировка в следующем порядке: ферзь, ладья, слон, конь,король, пешки;
- переделал вставку киллера. Теперь вставка со сдвигом, а не просто замена местами;
- переделал вставку хеша. Теперь вставка со сдвигом, а не просто замена местами.
На главную не выкладываю, так как это промежуточная версия и тестировал в ней я только генератор ходов :)

 29.1.2008

Ifrit_C30_1
Отключил null move. Он глючит с новым генератором.

 2.2.2008

Ifrit_C30_2
Разделил битбоард-генератор списка ходов. Теперь есть функция генерирующая только взятия и превращения + функция
генерирующая все остальные ходы. "Причесал" код в битбоард-генераторе.
Программа получилась еще более тормозная, чем предыдущая.
Генератор списка ходов 0х88 больше не использую.
На главную не выкладываю, так как это промежуточная версия и тестировал в ней я только генератор ходов.

 18.2.2008

Ifrit_C30_3
Закончил переход на битбоард. Теперь генератор ходов, детектор шахов и реализатор ходов переведены на битбоард.
К сожалению, в генераторе есть баг, который проявляется в позиции:
"fen r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 1" начиная с глубины 4 полухода.
В чем проблема я пока не понимаю. Буду думать.
Вообще, хочется сказать, что написать битбоард-генератор оказалось на порядок, - а может и на два, - сложнее. Так что, я бы не
советовал начинать с него. :)
Выкладываю только исходники.

 20.2.2008

Ifrit_C30_4
Баг нашел и исправил. Пока искал во мне пошатнулась вера в человеческий разум :)
Еще чуть-чуть и пошел бы искать свой бубен.
Желающие могут повторить мой подвиг :)
Битбоард-генератор оказался существенно быстрее предыдущего генератора.
Выложил полный перебор (даже без а-б) с простейшей оценкой ( от 0.5 до 1 млн. поз/сек
на селероне 2600).
Сейчас выдает количество узлов на слое, а не полное количество.
На главную не выкладываю, так как все эвристики отключенны, и тестировал в ней я только генератор ходов.

 24.2.2008

Ifrit_b1
Это Ifrit_C29_2, только с битбоард-генератором ходов. С этого движка начал линейку битбоард движков.
Таким образом, в серии "с" используется 0х88-генератор, а в серии "b" используется битбоард-генератор.
Движок на битбоарде играет так же, только несколько быстрее.
Лично я утвердился во мнении, что для среднего движка совершенно без разницы, какой использовать генератор ходов.
Скажу только, что сама идея битбоард-генератора изумительно красивая, а реализация достаточно сложная .
Исходники Ifrit_b1(87Kb)
Ifrit_b1(108Kb)

 25.2.2008

Ifrit_b1_1
Исправил баг из-за которого не работал нулевой ход .
Исходники Ifrit_b1_1(87Kb)
Ifrit_b1_1(108Kb)

 1.3.2008

Ifrit_b1_2
Отключил негаскаут. Толку от него вообще нет. Причину этого я затрудняюсь объяснить. Думаю он по жизни такой.
Добавил контролирующую функцию в генератор ходов. Отловил еще пару багов. Остались очень хитрые баги.
Настолько хитрые, что пока сидят тихо :) В дальнейшем продолжу политику тотального контроля.
Исходники Ifrit_b1_2(87Kb)
Ifrit_b1_2(108Kb)

 2.3.2008

Ifrit_b1_3
Отловил еще два бага в нулевом ходе.
Исходники Ifrit_b1_3(88Kb)
Ifrit_b1_3(108Kb)

 16.3.2008

Ifrit_b1_4
Проверку битых полей при рокировке перенес внутрь генератора избыточных ходов.
Подправил распознавание ничьей повтором ходов.
Подправил статическую оценку позиции.
Нулевой ход продолжает глючить. Пока отключил.
Добавил новые комментарии.
Файлы залил повторно. Если Вы уже успели скачать, то лучше скачать по-новому. В старой версии баг с повтором ходов.
Исходники Ifrit_b1_4(88Kb)
Ifrit_b1_4(108Kb)

 25.3.2008

Ifrit_b1_5
Перешел с NegaMax на MiniMax. Т.е. теперь для белых и черных отдельные функции, вплоть до генератора ходов и детектора шахов.
Отлавливать минусы при тестировании мне надоело :) Кроме того, на мой взгляд, MiniMax на порядок прозрачнее и несколько быстрее.
Нулевой ход вообще убрал из кода. Пока и без него хватает проблем.
Исходники Ifrit_b1_5(89Kb)
Ifrit_b1_5(108Kb)

 30.3.2008

Ifrit_b1_6
Переписал Negascout под MiniMax. В этой версии он работает.
При переходе на новый детектор перестала работать форсировка на шахах. Теперь снова заработала. :)
Сортировка по взятиям в форсированном варианте была просто "взятая фигура - берущая фигура", теперь стало "взятая фигура*100 - берущая фигура"
Ускорение есть, правда, не такое, как бы хотелось :)
Исходники Ifrit_b1_6(88Kb)
Ifrit_b1_6(108Kb)

 12.4.2008

Ifrit_b1_7
Подправил форсированный поиск.
Добавил нулевой ход.
Пытался добавить продление поиска в линиях с разменами. От схемы отказался. Слишком обваливается глубина основного перебора.
Исходники Ifrit_b1_7(89Kb)
Ifrit_b1_7(108Kb)