Введение
Возможности постоянного хеша Рыбки дают ей возможность пользоваться своей предыдущей работой когда её просят анализировать позиции во второй раз или когда её просят анализировать позиции, точная оценка которых зависит от ранее аналированных позиций. Постоянный хеш делают Рыбку более эффективной в этих случаях.
Большая часть функциональности постоянного хеша работает невидимо, не требуя от пользователя какого-то специального контроля. Однако, есть случаи, когда нужны комманды пользователя для максимального использования работы постоянного хеша. В дополнение, пользователи могут обмениваться файлами постоянного хеша, так что пользователь А может использовать анализ сделанный пользователем Б. Постоянный хеш может также быть объединён, так что пользователь А может использовать анализ сделанный отдельно пользователями А и Б. Эти разные сценарии тема этого документа.
Основные Операции
Для обычных пользователей следующие основные операции более-менее достаточны для приемлимой работы:
1) Установите параметр движка (Persistent Hash File), где Вы хотите чтобы располагался файл постоянного хеша. Он должен указывать непосредственно на сам файл (не просто директорию). По соглашению, файлы постоянного хеша имеют расширение .rph.
2) Отметьте поле (Persistent Hash Enabled).
3) Установите параметр движка (Saved Hash File), где Вы хотите чтобы сохранялось содержимое хеша. Путь должен указывать непосредственно на сам файл (не просто директорию). По соглашению, файлы сохранённого хеша имеют расширение .rsh.
4) Когда Вы произвели глубокий анализ какой-нибудь конкретной позиции и хотите, чтобы Рыбка получила доступ к этой работе позже, нажмите кнопку (Save Hash) из списка параметров движка.
5) Когда Вы хотите восстановить анализ из операции #3, убедитесь, что поле (Preserve Analysis) отмечено и нажмите кнопку (Load Hash) из списка параметров движка.
Обратите внимание, что некоторые новые оболочки, которые специализированы под Рыбку (например оболочки от ChessBase & Convekta продающиеся вместе с Rybka 3) дают специальную интерфейсную поддержку для этих операций.
Введение (Расширенное)
Остальная часть этого документа для продвинутых пользователей.
Hash Table - Хеш Таблица
Все современные лучшие программы имеют то, что обычно называется хеш таблицей. Этот термин на самом деле даёт не очень точное представление, так как хеширование - известный алгоритм с широкими применениями. Как бы там ни было, хеш таблица движка сохраняет заключения о позициях, встреченных во время поиска. Движок использует эти заключения когда снова встечает эти позиции в поиске при последовательных итерациях или при перемещении. Эта информация крайне ценна и значительно способствует эффективности поиска.
Проблема с описанным выше в том, что хеш таблица имеет ограниченный размер - она должна входить в память компьютера. Элементы в хеш таблице постоянно должны сбрасываться в пользу элементов с более высоким приоритетом. В этом процессе установки приоритетов большое предпочтение даётся для новых элементов, и старые обычно не держатся очень долго.
Во многих случаях, однако, пользователи хотели бы чтобы движок мог использовать работу, которая была сделана некоторое время назад. Другими словами, они бы хотели чтобы старые элементы хеша лучше сохранялись (консервировались). Есть три способа в которых это поддерживается в Рыбке.
Preserve Analysis - Сохранить Анализ
Один вариант пользователю Рыбки для помощи в решении этой проблемы это параметр движка (Preserve Analysis). Когда он отмечен, Рыбка даёт более высокий приоритет высококачественным (т.е. глубоким) элементам и меньший приоритет недавним элементам. Эта схема установки приоритетов менее эффективна с точки зрения игры, где позиции появляются один раз и быстро и навсегда оставляются позади. Во время интерактивного анализа, где пользователь будет возвращаться снова и снова к тем же нескольки позициям, это более эффективно.
Сохранить анализ - это, однако, не универсальное решение.
Во-первых, он имеет тенденцию после некоторого времени занимать хеш таблицу старыми, высококачественными элементами, мешая эффективному анализу новых позиций. По этой причине, когда анализ с отмеченным (Preserve Analysis) выполнен, лучше всего очистить хеш таблицу при переходе на совершенно новую позицию.
Во-вторых, консервированный анализ не позволяет быть сохранённым с одного включения движка к следующему. Он так же не позволяет пользователям делиться, объединять и каталогизировать свой анализ. Для этого и есть постоянный хеш.
Нисходящее и Восходящее Распространение
Перед тем, как мы подойдём к самому постоянному хешу, давайте рассмотрим вопрос о том, когда мы больше всего хотим чтобы Рыбка вспомнила её старый анализ. Вот два сценария.
Первый - это то, что я называю нисходящим распространением. В этом сценарии Рыбка проанализировала какую-нибудь корневую позицию до мелких деталей и мы хотим чтобы она вспомнила эти маленькие детали, которые она собрала вместе в течении этого анализа. Например, мы дали Рыбке анализировать какую-нибудь корневую позицию три часа, и теперь мы хотим существенно рассмотреть её анализ под этой корневой позицией, ожидая, что она быстро всё вспомнит вместо того, чтобы воссоздавать анализ. Термин "нисходящее распространение" относится к факту, что анализ должен быть не забыт в точке, которая "ниже по течению" (т.е. ниже в дереве вариантов) от точки первоначального анализа.
Второй сценарий это то, что я называю восходящим распространением. В этом сценарии Рыбка пришла к заключению о какой-нибудь позиции, и мы хотим, чтобы она вспомнила это заключение когда мы позже попросим её анализировать более раннюю позицию. Термин "восходящее распространение" относится к факту, что анализ должен быть не забыт в точке, которая "выше по течению" (т.е. выше в дереве вариантов) от точки первоначального анализа.
Как оказалось, механизм, который нужен для работы с нисходящим распространением совершенно отличен от механизма, который нужен для работы с восходящим распространением.
Использование и Операции
Hash Save & Load - Сохранение и Загрузка Хеша
Нисходяшее распространение имеет свойство, что заключения, которые должны запоминаться, имеют огромный размер. Дерево поиска имеет форму ... ну, как дерево, с геометрической формой. Невозможно сохранять весь нисходящий анализ когда-либо сделанный на одном компьютере, тем более объединять эту информацию между несколькими пользователями. Выполнимо только сохранение этого анализа для одной позиции или набора связанных позиций.
В Рыбке эта функция поддерживается через простой механизм сохранения и загрузки хеша. Когда пользователь вызывает параметр движка (Hash Save), Рыбка сохраняет её текущее содержимое хеша в файл, установленный в (Saved Hash File). Когда пользователь вызывает параметр движка (Hash Load), Рыбка загружает содержимое хеша из того файла.
Обычная последовательность:
1) Рыбка работает долгое время над одной интересующей позицией или интересующими позициями, которые близки в дереве вариантов
или
1а) С отмеченным консервированным анализом (Preserve Analysis) пользователь интерактивно анализирует Рыбкой некоторый набор позиций, которые близки в дереве вариантов
2) Пользователь нажимает кнопку (Save Hash) для сохранения содержимого хеш таблицы
3) Позднее, пользователь нажимает кнопку (Load Hash) для восстановления содержимого хеш таблицы и продолжения работы
Вероятно, продвинутые пользователи будут создавать целые библиотеки файлов сохранённого хеша для их любимых областей исследования. Они так же вероятно будут обмениваться этими файлами друг с другом.
В настоящий момент эта функциональность не поддерживает изменение размеров или объединение. Когда файл хеша загружен, текущий размер хеша изменяется чтобы соответствовать размеру файла. Объединение здесь не критическая операция, т.к. разные файлы должны содержаться для разных позиций.
Persistent Hash - Постоянный Хеш
Восходящее распространение имеет очень приятное свойство, что заключения, которые должны быть сохранены, имеют маленький размер. Фактически, для целей восходящего распространения, два часа анализа одной корневой позиции может теоритически быть полностью представленны одним элементом, для самой корневой позиции. Это даёт нам возможность быть более амбициозными: для восходящего распространения, мы хотим сохранить всё, автоматически и навсегда, и мы хотим иметь возможность объединять это со всем, что сделали другие пользователи. Для этого и есть постоянный хеш.
Операции постоянного хеша простые:
- Пользователь должен установить в параметре движка (Persistent Hash File) путь к файлу, где хранится постоянный хеш.
- Пользователь должен убедиться, что параметр движка (Persistent Hash Enabled) отмечен.
- Файл постоянного хеша всегда хранится на диске, и обращается к нему напрямую. Он может быть таким большим, как сам жёсткий диск. Производительность жёсткого диска не проблема, т.к. число доступов мелочь по сравнению с деревом поиска.
- Когда файл постоянного хеша существует в установленном пути при запуске движка, он используется. Когда он не существует, там автоматически создаётся пустой файл постоянного хеша.
- Чтобы оставить постоянный хеш отключённым, оставьте параметр (Persistent Hash Enabled) неотмеченным (как есть по умолчанию).
- Параметр движка (Persistent Hash Size) используется в двух случаях: 1) Когда движок загружен без файла постоянного хеша в установленном пути, создаваемый файл будет указанного размера 2) Когда нажата кнопка (Persistent Hash Resize), файл хеша будет изменён до установленного размера.
- Параметр движка (Persistent Hash Reset) очищает содержимое файла постоянного хеша.
- Чтобы объединить два файла постоянного хеша, установите параметр (Persistent Hash Merge File) ко второму файлу постоянного хеша и нажмите (Persistent Hash Do Merge). Эти два фала не обязательно должны иметь одинаковый размер. Объединённая информация будет содержаться в основном файле постоянного хеша, чей размер останется прежним.
- Параметр (Persistent Hash Write Depth) контролирует частоту записей в файл постоянного хеша во время поиска. Записи более высоких глубин ведут к более меньшей частоты записей.
- Параметр (Persistent Hash Play Depth) коммандует движку автоматически выполнить ход без дальнейшего обдумывания во время игры если позиция уже существует в файле постоянного хеша с как минимум указанной глубиной. Этот параметр вероятно должен приспосабливаться к контролю времени для лучшей работы.
Обслуживание Постоянного Хеша
Самый простой способ работы для пользователей с постоянным хешем, это установить его во время первого использования Рыбки, периодически объединять его с другими постоянными хешами как только появится возможность, и в остальном просто дать всему работать без каких-либо вмешательств.
Здесь, однако, будет высказан аргумент о ручном обслуживании постоянного хеша. Каждые несколько недель пользователь может архивировать его текущий постоянный хеш (это может быть сделано простым копированием файла) и после чего объединить его с предыдущим архивом. В некоторых случаях это улучшит производительность.
(сделать - объяснить, почему)
В дополнение, здесь будет высказан аргумент о содержании разных постоянных хешей для разных позиций. В отличии от случая с нисходящим распространением (т.е. сохранением и чтением хеша), где это по существу необходимо, для постоянного хеша этот тип обслуживания будет нести много меньшую пользу, возможно не стоящий усилий. Эта тема нуждается в дополнительном исследовании.
(сделать - объяснить больше)
http://www.rybkachess.com/index.php?auswahl=Persistent+hash Перевод: Scatman, 2008