В первой части была рассмотрена идея динамического дерева поиска, в котором различные ветви получают различную глубину анализа. Теперь рассмотрим, каким образом эту идею можно развить дальше. Главная проблема заключается в том, что изменение оценки позиции само по себе еще не всегда означает, что положение действительно стало сложнее для анализа. Поэтому при определении приоритета ветви необходимо учитывать несколько признаков одновременно.
Здесь Q - общий приоритет ветви, I - изменение оценки позиции, T - тактическая активность позиции, а B - изменение количества доступных ходов. Коэффициенты α, β и γ определяют влияние каждого признака. Такой подход позволяет не связывать глубину поиска только с одним показателем.
Показатель T может учитывать появление шахов, взятий и непосредственных угроз. Если после хода количество таких продолжений резко возрастает, позиция становится более разветвленной и требует дополнительного анализа. В спокойной позиции, наоборот, дерево может развиваться значительно медленнее.
В этой формуле M обозначает количество доступных продолжений позиции. Величина B показывает, насколько изменилась структура дерева после выполнения хода. Большое значение B означает, что новый узел имеет существенно отличающееся количество возможных продолжений.
На практике это позволяет обнаружить интересное свойство. Иногда два хода имеют практически одинаковую оценку, но один из них оставляет противнику только несколько разумных ответов, а другой создает большое количество возможностей. Для обычной функции оценки эти позиции могут выглядеть почти одинаково, тогда как для алгоритма поиска они имеют совершенно разную вычислительную сложность.
Здесь C - вычислительная сложность ветви, Q - ее приоритет, а L - количество уже исследованных уровней. Полученное значение можно использовать для определения необходимости дальнейшего углубления поиска. Если C превышает установленный порог, ветвь продолжается, в противном случае ее можно временно отложить.
Следующим шагом является введение памяти о предыдущем поиске. Если программа уже несколько раз исследовала похожую позицию и каждый раз получала близкий результат, повторное глубокое исследование такой ветви может оказаться избыточным. Напротив, если оценки постоянно меняются, ветвь следует считать нестабильной и увеличивать ее приоритет.
Здесь V - нестабильность оценки позиции, а σ - мера изменения последовательности полученных оценок. Если значения оценки практически не меняются при увеличении глубины, V будет небольшой. Если же оценка постоянно изменяется, ветвь считается нестабильной и получает дополнительную глубину поиска.
Это позволяет сформулировать более общий принцип: глубина поиска должна зависеть не только от положения фигур на доске, но и от поведения самой оценки во время поиска. В этом случае программа анализирует не только шахматную позицию, но и собственный процесс ее исследования.
Полученная формула объединяет основные признаки динамического дерева. D - конечная глубина анализа, D0 - базовая глубина, а коэффициенты k1, k2 и k3 задают влияние изменения оценки, структуры дерева и нестабильности позиции соответственно.
Такой механизм может привести к необычному результату. Средняя глубина поиска при одинаковом времени работы может оказаться меньше, чем у обычного алгоритма, однако глубина анализа наиболее важных вариантов при этом будет больше. Иными словами, программа не обязательно должна искать глубже вообще - ей необходимо искать глубже именно там, где дополнительный анализ дает наибольшее количество информации.
Для проверки этого свойства можно разделить тестовую выборку на несколько групп: спокойные позиции, тактические позиции, позиции с большим количеством возможных продолжений и позиции с нестабильной оценкой. Для каждой группы отдельно измеряются число просмотренных узлов, средняя глубина и совпадение выбранного хода с эталонным поиском. Это позволяет определить, в каких именно типах позиций динамический механизм дает наибольший эффект.
Здесь E - эффективность поиска, A - точность выбора хода, а N - количество просмотренных узлов. В отличие от простой оценки точности, этот показатель учитывает и качество решения, и затраченные вычисления. Чем больше значение E, тем больше полезной информации программа получает от каждого просмотренного узла.
В итоге, динамическое дерево позволяет не тратить одинаковое количество времени на все варианты. Простые продолжения можно просматривать на небольшой глубине, а более сложные - исследовать дольше. В результате основная часть вычислений приходится именно на те варианты, которые сильнее влияют на результат партии.
Дальнейшее развитие этого метода связано с подбором коэффициентов α, β, γ, k1, k2 и k3. Их значения можно определить экспериментально, проверяя работу алгоритма на разных шахматных позициях. Это позволит установить, какие параметры дают наилучшее соотношение между глубиной поиска, количеством просмотренных позиций и качеством найденного хода.