search
Этот модуль предоставляет функцию для выполнения лучевого поиска и нахождения решений для заданного состояния.
Функция:
beam_search
: Выполняет лучевой поиск для нахождения решений в среде кубика Рубика.
MAX_BATCH_SIZE
Максимальное количество состояний, одновременно обрабатываемых нейронной сетью (DNN) за один проход.
beam_search
def beam_search(
env,
model,
beam_width,
ergonomic_bias=None,
extra_depths=0,
max_depth=100
)
Выполняет лучевой поиск для нахождения решений для заданного разобранного состояния.
Аргументы:
env
Cube3 - Среда кубика Рубика, представляющая разобранное состояние.model
torch.nn.Module - Нейронная сеть (DNN), используемая для предсказания распределения вероятностей следующих ходов для каждого состояния.beam_width
int - Максимальное количество кандидатов, сохраняемых на каждом шаге поиска.ergonomic_bias
dict или None - Словарь, задающий эргономическое смещение для ходов, если доступно.extra_depths
int - Количество дополнительных уровней глубины для поиска после нахождения первого решения.max_depth
int - Максимальная глубина поиска, должна быть равна или больше числа Бога (20 для кубика Рубика в метрике HTM).
Возвращает:
dict
|None
: При наличии хотя бы одного решения, возвращает словарь со следующими ключами:
"solutions"
: Список оптимальных или близких к оптимальным решений, найденных в ходе поиска."num_nodes"
: Общее количество узлов, развернутых в ходе поиска."time"
: Время, затраченное на поиск (в секундах).
В противном случае, None
.
_reflect_setup
def _reflect_setup(ergonomic_bias, env)
Инициализирует эргономическое смещение, если оно предоставлено.
Аргументы:
ergonomic_bias
dict или None - Словарь, задающий эргономическое смещение для ходов, если доступно.env
Cube3 - Среда кубика Рубика, представляющая разобранное состояние.
Возвращает:
ergonomic_bias
numpy.ndarray - Эргономическое смещение для ходов, если доступно.env
Cube3 - Среда кубика Рубика, представляющая разобранное состояние.
predict
@torch.inference_mode()
def predict(model, batch_x, ergonomic_bias, env)
Предсказывает распределение вероятностей следующих ходов для каждого состояния.
Аргументы:
model
torch.nn.Module - Нейронная сеть (DNN), используемая для предсказания распределения вероятностей следующих ходов для каждого состояния.batch_x
numpy.ndarray - Пакет состояний.ergonomic_bias
dict или None - Словарь, задающий эргономическое смещение для ходов, если доступно.env
Cube3 - Среда кубика Рубика, представляющая разобранное состояние.
Возвращает:
batch_logprob
numpy.ndarray - Логарифм вероятности каждого хода для каждого состояния.
Вывод (inference) с использованием Automatic Mixed Precision по некоторым причинам работает немного быстрее, чем
простой вывод с половинной точностью (с model.half()
).
update_candidates
def update_candidates(candidates, batch_logprob, env, depth, beam_width)
Расширяет пути кандидатов с использованием предсказанных вероятностей следующих ходов.
Аргументы:
candidates
dict - Словарь, содержащий пути кандидатов, накопленные вероятности и состояния.batch_logprob
numpy.ndarray - Логарифм вероятности каждого хода для каждого состояния.env
Cube3 - Среда кубика Рубика, представляющая разобранное состояние.depth
int - Текущая глубина поиска.beam_width
int - Максимальное количество кандидатов, сохраняемых на каждом шаге поиска.
Возвращает:
candidates
dict - Обновленный словарь, содержащий пути кандидатов, накопленные вероятности и состояния.