Рассмотрим дерево глубины B
(т. Е. Все пути имеют длину B
), узлы которых представляют состояния системы, а ребра представляют собой действия.Равенство двух алгоритмов
Каждое действие a in ActionSet
имеет коэффициент усиления и переводит систему из состояния в другое. Выполнение последовательности действий A-B-C
или C-B-A
(или любая другая перестановка этих действий) приводит к одинаковому усилению. Более того:
- тем выше число действий, выполняемых перед тем
a
, тем меньше увеличение общего коэффициента усиления, когдаa
просят - прирост от каждого пути не может быть больше, чем количество
H
, а именно: некоторые пути может получить выигрыш, который ниже, чемH
, но всякий раз, когда выполнение действия делает общее усиление, равноеH
, все остальные действия выполняются с этого момента получит0
- , что достигается с помощью последовательности действий
#b,h,j, ..., a#
являетсяg(a)
() - раз действие было выполнено на пути от корня к листу, оно не может быть выполнено во второй раз на том же пути
Применение Algorithm1. Я применяю следующий алгоритм (A * -like):
- Начать с корня.
- Разверните первый уровень дерева, который будет содержать все действия в
ActionSet
. Каждый расширил действиеa
имеет получитьf(a) = g(a) + h(a)
, гдеg(a)
определяется как указано выше, иh(a)
является оценка того, что будут заработаны путем выполнения другихB-1
действий - Выберите действие
a*
, который максимизируетf(a)
- Расширьте детей
a*
- Итерация 2-3 до тех пор, пока не будет пройден весь путь от
B
посещений от корня до листа, который гарантирует самое высокое значениеf(n)
. Обратите внимание, что новое выбранное действие можно также выбрать из узлов, которые были оставлены на предыдущих уровнях. Например, если после расширенияa*
узел максимальногоf(a)
является дети корня, он выбран в качестве нового лучшего узла
Применение Algorithm2. Теперь предположим, что у меня есть жадный алгоритм, который смотрит только на компонент полезности-эвристики f(n)
, т. Е.Этот алгоритм выбирает действия в соответствии с выигрышем, который уже заработали:
- на первом этапе я выбираю действие
a
максимального усилениеg(a)
- на второй шаге я выбрать действие
b
максимизируя прибыльg(b)
Претензия. Экспериментальные доказательства показали мне, что два алгоритма приводят к одному и тому же результату, который может быть смешанным (например, первый предлагает последовательность A-B-C
, а вторая предлагает B-C-A
). Однако мне не удалось понять, почему.
Мой вопрос: существует ли формальный способ доказать, что оба алгоритма возвращают один и тот же результат, хотя в некоторых случаях они смешиваются?
спасибо.
Как вы решаете, какой узел следует развернуть дальше? –
В случае A * я построил классическую функцию с плюсом-эвристикой (f (n) = g (n) + h (n)), и, таким образом, следующее состояние, которое нужно посетить, - это тот, который в лучшем случае имеет самая низкая стоимость. В жадном алгоритме, как я упоминал в тексте, если доступны N действий, и я уже выбрал M-действия, я выбираю в качестве следующего действия действие a, которое минимизирует стоимость C (a | A_1, ..., A_M) , – Eleanore
То, что вы описываете, в основном [Алгоритм Дейкстры] (http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm), хотя ваше описание очень неудобно (например, вы бы не выбрали действие 'B' минимизируя стоимость 'C (B | A)' "для определенного' B', вы найдете самый низкий среди всех действий в очереди приоритетов). –