Интересная задача оптимизации обхода графа - PullRequest
0 голосов
/ 25 июня 2010

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

Вы можете пройти только по дереву, начиная с корневого узла или с вашеготекущая позиция по прямым связям.То есть, нет произвольного доступа к определенному узлу, но структура графа уже известна и помещается в память.

Каждый узел имеет время обязательного пересмотра , которое вам не раскрывается,Время, необходимое для пересмотра, рассчитывается [где i = интервал времени с момента последнего посещения] как (сейчас + a + i * b + ( i )* в) ^ 2) .Параметры a, b и c имеют разные значения для каждого узла, но каждый из них, как правило, всегда будет в пределах одного и того же порядка величины для разных узлов.

Если вы повторно посещаете узел после того, как его время обязательного пересмотра прошло егобудет сброшен таким образом, чтобы время, необходимое для повторного посещения, было рассчитано как (теперь + a) согласно приведенной выше формуле.Если вы перейдете к узлу, вам сообщат, прошло ли время обязательного пересмотра или нет, но вы не будете знать, что это было или каковы значения или a, b или c.

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

1 Ответ

0 голосов
/ 03 февраля 2011

Я не понимаю, почему a, b и c неизвестны. Если они неизвестны, то кажется, что лучшая эвристика - это проблема коммивояжера, то есть NP-Complete. Так что, может быть, я что-то неправильно понимаю.

...