【发布时间】:2016-07-13 07:56:07
【问题描述】:
我有一个有 N 个节点的 DAG,即1, 2, ..., N,每个节点都有一个权重(我们可以称之为时间)x_1, x_2, ..., x_N。我想做一个拓扑排序,但困难在于排序时我有一个目标函数。我的目标函数是最小化几对节点之间的总时间。
例如,我有一个有 6 个节点的 DAG,我想要一个特定的拓扑排序,使得 (1,3) + (2,4) 最小化,其中 (A,B) 表示两个节点 A 和 B 之间的时间。例如,如果我们有一个对[1, 6, 3, 2, 5, 4, 7]、(1,3) = x_6 和(2,4) = x_5 进行排序。基于 DAG,我想找到一个最小化(1,3) + (2,4) 的排序。
我一直在思考这个问题。生成所有可能的拓扑排序(参考link)并逐个计算目标函数始终是可能的解决方案,但是如果N很大,则需要太多时间。还建议我在生成所有可能的排序时使用分支绑定修剪(我不是很熟悉分支绑定,但我认为这不会显着降低复杂性)。
针对此类问题的任何(最优或启发式)算法?如果该算法也可以应用于其他目标函数,例如最小化某些节点的总启动时间,那将是完美的。任何建议表示赞赏。
PS:或者,是否可以将这个问题表述为线性整数优化问题?
【问题讨论】:
-
我怀疑这个问题很难,因为它的 2 个小的变化肯定是:(1)如果距离的 sum 被替换为 maximum 的距离,那么你可以将 NP-hard Bandwidth Minimization 问题减少到这个问题(从输入图 G 开始,删除所有边,并添加一个根顶点和一个出边到每个其他顶点 - 这意味着 任何原始n个顶点的排序都是有效的拓扑顺序——对于G中的每条边(u,v)(你删除的),在目标函数中添加一个术语
(u,v)以最小化); ... -
... (2) 如果您改为保留对之间距离的总和(而不是最大值),但稍微概括目标函数以允许每个术语(例如
(1,3)或(2,4)in你的例子)乘以一个单独的权重,那么你可以以同样的方式将 NP-hard 二次分配问题减少到这个问题。可能即使每个权重为 1 的 QAP 的特殊情况仍然是 NP 难的——这意味着你的问题也是如此——但我无法用几个谷歌确认这一点。 -
@j_random_hacker。感谢您的回复。我也相信这个问题是NP难的。我意识到我的问题类似于旅行推销员问题。我不知道二次分配问题和带宽最小化问题。感谢您带来连接。我已经为这个问题设计了一种启发式方法。但是,我正在寻找一种组合优化公式,以便可以应用分支定界来获得最佳解决方案,以比较我的启发式方法。
-
请记住,要显示 NP-hardness,我们需要能够获取某个已知 NP-hard 问题(如 QAP)的任意实例,并将其机械地转换为您的问题的实例。对于我给出的简化,我们创建了一个您的问题的实例,其中唯一的优先约束是根顶点必须在前:这是您的问题的一个有效的可能实例,因此解决您的问题的算法必须能够解决它.查找(例如使用 Google)如果您感到困惑,如何使用 NP-hard 问题的归约来显示问题的 NP-hardness。
-
(为了清楚起见:我们需要的不仅仅是证明 NP-hard 问题的实例可以转换为您的问题的实例——但这里的关键是,如果您的问题允许我们在减少中未使用或未充分使用的其他约束。)
标签: algorithm graph topological-sort