Sorry, the engine guide available only in Russian, you can use for example translate.google.com to translate it.


Настройки движка программы "Aurora Borealis"

Многие пользователи Авроры уже заметили, что в новой 3.5 версии появилась возможность реактирования оценочной функции (фактически, большинства параметров движка). Она позволяет загрузить параметры из внешнего файла, отредактировать и сохранить, пользуясь в последующем ими при игре и анализе. Фактически, у пользователей программы, не знакомых с программированием, появилась возможность создать свой собственный движок на основе Авроры. В принципе, практически все программы базируются на одинаковых алгоритмах, отличаются только детали и качество реализации. Основной задачей становится оптимальный подбор большого количества параметров, для достижения наилучшего результата.

Попробую кратко изложить внутренности вынесенных в редактирование параметров:

Позиция всегда оценивается за белых при их очереди хода. Основная часть оценочной функции — перечень шаблонов. Каждому шаблону в позиции приписывается определенная позиционная оценка, сумма всех шаблонов формирует позиционную составляющую оценки. Шаблон состоит из положения белых и черных простых, а так же обязательных пустых полей (обозначаются красным кружком). Например одинокая шашка описывает элементарную составляющую оценочной функции — веса полей. Белая на с6, пустая на с8 описывают шаблон рожна. Указываемая оценка шаблона — только позиционная составляющая (без материала). Шаблоны можно удалять, создавать новые, а также редактировать веса у существующих шаблонов. При формировании шаблона не забывайте создавать также его «зеркального» двойника за противоположный цвет — сохранив шаблон нажимайте соответствующую кнопку и сохраняйте также двойник. Логично предположить, что если у шаблона за белых положительная оценка, то у его двойника должна быть отрицательная, возможно, чуть меньшая т.к. очередь хода при оценке будет за белыми и соперник может не успеть реализовать соответствующее преимущество.

Вторая часть оценочной функции — перечень параметров.

0 - man value — материальная оценка простой. Обычно в программах принято отталкиваться от значения в 100 базовых единиц, но можно попробовать как немного варьировать стоимость в зависимости от стадии, так и значительно изменить вес простой (при этом также не забудьте соответсвующе скорректировать веса всех шаблонов). Значительное уменьшение базовой стоимости шашки приведет к уменьшению разброса ОФ и ускорению перебора (тут также см. параметр 13). Этот параметр используется только внутри ОФ, наверху в интерфейсе оценка всегда для удобства приводится к стоимости шашки. Например если ОФ выдаст +110 при стоимости шашки 100, интерфейс покажет +1.10, ОФ выдаёт +55 при стоимости 50 — так же интерфейс покажет +1.10

1 - king value — стоимость дамки (в процентах от простой). Обычно принято длинные шашки оценивать в 3 простые, 300 пунктов в параметрах (русские, стоклетки), короткие — в 2 (чекерс). Обращаю внимание что оценка указывается в процентах относительно простой. То есть если простая будет стоить 50, то если дамка стоит 3 простых в параметре нужно указывать не 150 а 300 (в процента)

2, 3, 4, 10 - Параметры сокращения и удлинения перебора. При сокращении используется следущая идея. Допустим, из некоторой позиции нам нужно произвести перебор еще на 10 полуходов, вместо того, чтобы делать полный перебор мы делаем сокращенный на 2 полухода (в данном случае, 8). Как правило, такой перебор нам ничего не будет стоить, т.к. мы его уже выполняли на предыдущей итерации и результат в большинстве случаев просто берется из таблицы запоминания. Даже если результат по каким-то причинам не сохранился такой сокращенный перебор займет в 4 раза меньше времени. Теперь смотрим на результат. Если он сильно отличается от ожидаемого (например, в текущей позиции равенство, а после сокращенного перебора мы выигрываем две шашки или наоборот проигрываем три, или в текущей позиции уже материальное преимущество а сокращенный перебор показывает что мы его теряем) то нужно принимать решение — достаточно ли убедителен для нас обнаруженный перевес и мы будем использовать полученную оценку, экономя время, или все же делать полный перебор.

Удлинение — если в позиции ход форсированный (единственный) то базовая глубина увеличивается на единицу. Это позволяет во-первых очень быстро находить комбинационные угрозы, во-вторых уменьшает вероятность комбинационных зевков, которые могут получиться если слишком активно пользоваться отсечениями. С другой стороны, слишком большое количество удлинений ухудшает позиционное видение программы — отдавать на ровном месте шашки и глубже считать эти варианты в поисках мифических комбинаций отбирает время от расчета «тихих» позиций.

Таким образом, параметры 2, 3, 4, 10 указывают в какие моменты использовать отсечения и удлинения в позициях со своим ходом (совпадающим с ходом в начальной позиции - цвет за который идет анализ) и за противника. Всего существует 33 варианта. Два позволяют выбрать варианты ВСЕГДА или НИКОГДА, остальные определяются по формулам (см. выпадающую подсказку) MN-базовая глубина, на которую перебирается начальная позиция. N – текущая итерация, в которой принимается решение. Например N>MN/2 – функция будет использоваться только во второй половине перебора, например при MN=20 только в тех случаях, где N будет больше 10.

5-8: range alpha self, range alpha opponent, range beta self, range beta opponent

Весовые параметры отсечений. Aplha — граница сверху (на выигрыш: если оценка позиции выше чем ожидаемая на данное количество пунктов используется сокращенный перебор), beta – граница снизу (на проигрыш: если оценка хуже на столько пунктов то используется сокращенный перебор). Параметры за себя и за соперника устанавливаются отдельно. Например, можно позволить себе не тратить время на поиск выигрывающих комбинаций за себя и сосредоточиться на переборе тихих позиций, в то время как за соперника искать все возможные комбинации. Большие значения будут отсекать только реальное материальное преимущество, меньшие значения будут отсекать большее число позиций.

9 - min count draughts for stage — количество шашек для стадии игры. Партию по ОФ можно разделить на 4 стадии, по количеству шашек, при этом иметь разные параметры для дебютных, миттельшпильных и эндшпильных позиций. Минимальное количество шашек для стадии указывается в этом параметра и также отображается в столбце сверху. Если указано число меньше чем в предыдущем то эта стадия никогда использоваться не будет (Х в заголовке). Можно указать в первом столбце например 24 (для русских шашек) и вся партия будет оцениваться оценками из этого столбца. Разделение можно сделать например таким образом: 6-12-18-24 при этом надо учитывать что первый столбец так же фактически использоваться не будет при установленных ЭБ.

11 - side balance — распределение шашек по флангам, считаются кол-во шашек на левом и правом фланге и разница в шашках умножается на число в параметре. При 0 — не используется.

12 - side balance extended — расширенные шланги. То же самое, только к флангу добавляется еще одна вертикаль, то есть на 64 доске левым считается от a до е, правым от d до h

13 - EvalFunc compress (mod) — сжатие оценочной функции по модулю (приведение к ближайшему меньшему кратному). Например при значении параметра 10 оценки 112,115,117 - будут приведены к 110, при значении в 30 оценка 55 будет приведена к 30. Уменьшает разброс ОФ, что увеличивает глубину перебора, особенно в сочетании с уменьшением базовой стоимости простой. Но при этом соответственно уменьшается различие между ходами, большее число ходов будут иметь одинаковую оценку. Вероятно хорошо применять для создания узкоспециализированных движков, например, в плохой позиции найти ничью, либо найти выигрыш. В практической игре когда нужно разделять ходы даже с нимимальным преимуществом как правило завышение значений приводит к отрицательным результатам.

14 - EvFunc squeeze (by avg value) — при ненулевом параметре производится сжатие оценочной функции по относительной материальной стоимости шашек на доске. Например, 2 дамки против одной получается оценка +300, которая приравнивает данный эндшпиль к миттельшпилю с тремя лишними шашками. При включенном параметре оценка делится на относительную стоимость материала (в данном случае 300) и получается +100, то есть одна лишняя единица, что более адекватно. При наличии на доске только простых оценка не меняется. Как правило, параметр следует оставлять ненулевым за исключением экспериментов.

15 Kings - mainroad value — стоимость занятия дамкой главной дороги. Считается только факт занятия, то есть 2-3 дамки, расположенные на одной диагонали оценку не увеличивают 16 Kings - double road value — стоимость дамки на одном двойнике, оба занятых двойника соответственно увеличивают оценку вдвое 17 Kings - triple road valuе — стоимость дамки на одном тройнике

18, 19 — параметры для внутреннего тестирования ОФ и ЭБ, не используются в игре

20 EndGame - use max draughts — ограничивает максимальное количество шашек для использования ЭБ (используется для тестирования ЭБ в части параметров эндшпиля). Например при параметре 6 будут использоваться только максимум 6-шашечные ЭБ, даже если установлены большие базы, в остальных случаях будет использоваться ОФ.

Таким образом, можно редактировать параметры оценочной функции и движка, самостоятельно указывая какие позиционные факторы имеют большее значение и подбирать динамические параметры под определенные задачи. К сожалению, динамические параметры взаимоисключающие - можно сделать движок, который моментально будет решать комбинационные угрозы любой сложности, но при этом очень слабо играть позиционно, либо очень быстро доводить средний миттельшпиль до эндшпильных баз но при этом рисковать зевками простых двух-трехходовых комбинаций в глубине дерева. Для игры очевидно нужно найти оптимальный баланс между этими качествами.

Предлагаю шашистам-энтузиастам создать на базе Авроры свои варианты настроек движка, прислать мне и устроить между ними турнир. Кроме основной цели выявления лучшего это возможно позволит обнаружить существующие труднонаходимые ошибки в Авроре, они редко проявляются, один раз на несколько сотен партий, и найти их в одиночку сложно, а просматривая партии своих движков возможно кто-то натолкнется на них.