Найти минимальный путь в дереве с многозначными узлами - PullRequest
0 голосов
/ 08 января 2009

Мои классы по математике далеко позади, и в настоящее время я изо всех сил пытаюсь найти достойное решение проблемы, с которой я сталкиваюсь: у меня есть дерево, в котором узлы являются действиями и «взвешены» по нескольким критериям: стоимость указанного действия, время, которое потребуется, необходимые ресурсы, нарушение и т. д. ...

И я хочу найти в этом дереве путь, который минимизирует как стоимость, так и время, например, или помехи, стоимость и время, и т. Д. Моя проблема в том, что я понятия не имею, как это сделать, кроме придумав глобальную функцию стоимости F (стоимость, время, ресурсы, ...) и применив алгоритм регулярного обхода дерева, используя результат из F (...) в качестве единственного веса. Но тогда как мне придумать F? Что-то вроде "F (стоимость, время, ресурсы) = a * cost + b * time + c * resources" выглядит очень "непрофессионально" ...

Редактировать:

Я хотел избежать слова «суммирование», так как не был уверен, что это действительно путь, но по сути это то, что я делаю: вычисление общей стоимости для каждого «пути» или «ветви» это идет от того верхнего узла к одному из листьев, и выбирая "путь" или "ветвь", которая минимизирует стоимость. Проблема в том, что каждый узел имеет вес, основанный на необходимом времени, финансовых затратах, использовании ресурсов и т. Д.

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

Так что я думаю, мой вопрос действительно заключается в том, есть ли методология, чтобы выбрать эту функцию?

Спасибо за ваши ответы и комментарии, теперь у меня в голове стало немного яснее.

Ответы [ 3 ]

1 голос
/ 08 января 2009

Допустим, у нас есть четыре пары (x, y), такие как (1, 4), (1, 5), (2, 3), (3, 3). Теперь вы хотите свести к минимуму «и х и у». Что вы имеете в виду? Если вы минимизируете сначала x, а затем y, вы получите (1, 4). Если вы минимизируете сначала y, а затем x, вы найдете (2, 3).

Если вы не выберете глобальную функцию стоимости F (x, y), как в вашем наблюдении, я не вижу никакого значения "обоих". (В любом случае, после выбора F все равно может быть несколько минимальных точек.) Кстати, на мой взгляд, линейная комбинация (положительные множители a, b, c, понимаемые как «веса») вовсе не является «непрофессиональной» По крайней мере, если вы не знаете, какой может быть более подходящая функция стоимости.

Edit:

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

Внимание. Действительно, эта стратегия имеет смысл, только если F линейный. Конечно, стоимость, время, ресурсы и т. Д. Являются аддитивными функциями в том смысле, что время (узел1 -> узел2 -> узел3) = время (узел1) + время (узел2) + время (узел3), но в целом это не так для F, если он не является линейным. (то есть F (стоимость (узел1 -> узел2)) = F (стоимость (узел1) + стоимость (узел2))! = F (стоимость (узел1)) + F (стоимость (узел2)).)

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

1 голос
/ 08 января 2009

Придумать F - самая важная вещь. Если я могу дать вам 6 затрат и 5 раз или 5 раз и 6 затрат, что вы предпочитаете? Ваша функция стоимости должна принять это во внимание. К сожалению, нет алгоритма, который решит эту проблему для вас. Я отрицал это в течение недели, прежде чем сел и написал F для приложения оптимизации, над которым я работал. В худшем случае оставьте параметры, с которыми пользователь может повозиться.

0 голосов
/ 08 января 2009

Почему не работает обычный алгоритм поиска в графе, такой как A *?

Для функции путь-стоимость вы можете использовать промежуточную сумму соответствующих критериев. Расстояние до цели сложнее ...

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

...