【问题标题】:Maximizing minimum edge+node value in a directed graph最大化有向图中的最小边+节点值
【发布时间】:2019-11-22 00:00:33
【问题描述】:

我有一个有向图。每条边都有一个固有的“权重”w_ij,它是固定的。每个节点都有一个可以配置的值v_i,除了“根节点”(没有传入边)和“叶节点”(没有传出边),它们的值是固定的。

每条边的“按节点调整”边值由下式给出: s_ij = w_ij + v_j - v_i 即我们通过其相邻节点的值的差异来调整边缘的值。当然,改变节点的值会影响s_ij的值。

我对@9​​87654326@的值很感兴趣,想找到最优的值分配给节点,让这个“瓶颈”值最大化。

你有什么想法吗?

注意:从根到叶的循环和“固定路径”提供最小值的上限(例如,在循环中,节点差的总和始终为 0,所以最好的可以得到的是边缘固有权重的平均值)。但是由于循环和“固定路径”可能重叠,因此尚不清楚是否可以达到最小上限。该解决方案很可能首先涉及找到此类路径/循环。

【问题讨论】:

  • 听起来像是一个经典的流程问题。看看 Edmonds-Karp 和总体流程。我会详细说明,但我在移动设备上。 en.m.wikipedia.org/wiki/Flow_network
  • 谢谢。我最初想到了流程问题,但想不出直观的减少 - 我会看看你的建议。只是为了提供一些上下文,问题出现在调度/同步问题中,s_ij 值是松弛时间或类似的东西

标签: algorithm optimization graph graph-theory directed-graph


【解决方案1】:

如果我理解正确,这个问题可以表述为这个线性程序。调整输入,使v_i = 0 对应每个顶点i,即源或汇。

maximize z

subject to
for every ij,
    z + v_i - v_j <= w_ij  (i.e., z <= w_ij + v_j - v_i = s_ij)

variables
z unbounded
for every vertex i not a source or sink,
    v_i unbounded

这是双重程序。

minimize sum_ij of w_ij y_ij

subject to
sum_ij y_ij >= 1
for every vertex i not a source or sink,
    sum_j y_ij - sum_j y_ji = 0

variables
for every ij,
    y_ij >= 0

如果我们不从守恒约束中排除源和汇,这将是最小平均成本周期的线性规划。就目前情况而言,我们仍然可以使用流分解技术来证明存在最优值,即源-汇路径或循环,我相信对寻找最小平均成本循环的简单算法稍作修改是适用于此。

一旦你得到最优值z*,你可以通过运行带有权重w_ij - z* 的Bellman-Ford 来找到潜力v_i。很抱歉没有提供更多细节,但我有一种烦人的感觉,我正在做你的功课。

【讨论】:

  • 请放心,您没有做我的功课,我很欣赏您的回答 - 简化为线性规划问题是我没有考虑过的。我很高兴我把它表述为一个“图论”问题,我朝那个方向看。正如我在另一条评论中所写,问题出现在同步/调度问题中,我制定了一个我试图在现实世界中解决的问题的简化版本。
【解决方案2】:

我可以立即想到两种不同的方法:

首先,您可以对答案进行二分搜索。 检查你可以获得给定的最小边权重与最短路径问题密切相关——你有一堆关于节点权重差异的约束,每个约束的形式为wi - wj >= lij,其中 w 是固定的。

其次,您可以使用subgradient optimisation。您想要最大化边缘权重的最小值。在这里计算次梯度真的很容易。

这个问题可能有很多有用的结构,我在这里没有利用。您可以尝试写下线性编程放松并尝试一下。这样做——更深入地分析问题——几乎肯定会产生比上述任何一种方法更快的算法。

【讨论】:

  • 实际上,我不会反对一个好的次梯度下降方法。
  • @DavidEisenstat:我也不会。感觉就像你可以做一些快速组合的事情。
猜你喜欢
  • 2015-03-17
  • 2021-10-19
  • 1970-01-01
  • 2011-06-30
  • 1970-01-01
  • 2020-03-13
  • 1970-01-01
  • 1970-01-01
  • 2017-09-21
相关资源
最近更新 更多