У меня есть DAG с N узлами, т.е. 1, 2, ..., N
, и каждый node имеет вес (мы можем назвать это время) x_1, x_2, ..., x_N
. Я хочу сделать топологическую сортировку, но сложность в том, что у меня есть объективная функция при сортировке. Моя целевая функция заключается в минимизации общего времени между несколькими парами узлов.
Например, у меня есть DAG с 6 узлами, и я хочу определенную топологическую сортировку, такую, что (1,3) + (2,4)
минимизируется, где (A,B)
обозначает время между двумя узлами A и B. Например, если у нас есть sort [1, 6, 3, 2, 5, 4, 7]
, (1,3) = x_6
и (2,4) = x_5
. Основываясь на DAG, я хочу найти сортировку, которая минимизирует (1,3) + (2,4)
.
Я думал об этой проблеме некоторое время. Сгенерировать все возможные топологические типы (ссылка ссылка) и вычислять целевую функцию по одному всегда можно, но требуется слишком много времени, если N велико. Мне также предлагалось использовать обрезку, связанную с веткой, при создании всех возможных видов (я не очень хорошо знаком с веткой, но я думаю, что это не приведет к значительному снижению сложности).
Любой (оптимальный или эвристический) алгоритм для такого рода задач? Было бы идеально, если бы алгоритм можно было применить и к другим объективным функциям, таким как минимизация общего времени начала для некоторых узлов. Любое предложение оценивается.
PS: Или, альтернативно, можно ли сформулировать эту проблему как проблему линейной цельной оптимизации?