微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ILP图循环检测

如何解决ILP图循环检测

我完全被这个(整数)线性规划公式化任务困住了:
输入:包含循环的有向边加权图。
目标:找到一组边,它们的权重之和最小,这样如果从图中删除这些边,图就会变成无环的。

编辑:对于任何感兴趣的人,我发现(在我朋友的帮助下),您可以使用拓扑排序来解决这个问题。你只需要为每条边引入一个约束,这样:
\r\n
其中 topologicalOrder[ edge.parent ] << topologicalOrder[ edge.child ] + ( M * edgeInactive[edge]) 是节点拓扑位置的整数数组,topologicalOrder[node] 是布尔数组,表示边缘在结果(非循环)图中是否处于活动状态。 edgeInactive 是用于在 M 时“关闭”约束的 Big M 方法
然后你只需要最小化非活动边的权重总和。

旧(较慢)解决方案:
我的想法是创建节点的拓扑排序(对于无环图,当拓扑排序时,所有边都将从左到右定向),但是因为我得到了带有循环的图,所以我将寻找这样的拓扑排序,总和从右到左的边数最少。

这种方法有效,但真的很慢...

(我正在尝试用 Gurobi 解决这个问题,但我认为它是非常普遍的线性规划公式问题。) 我的代码

edgeActive[edge] == true

非常感谢您的帮助...

解决方法

这看起来像一个(一般)NP-hard 问题:minimum feedback arc set。至少 this answer 表明了这一点。

您可能会使用此关键字找到更多资源。

我记得当我在 Kemeny–Young method

上做一些 ILP 工作时,我阅读了有关 above 问题的 ILP 公式

在 Google Scholar 上快速查找可以让我们:

Ali、Alnur 和 Marina Meil​​ă。 “凯门尼排名实验:什么时候有效?”数学社会科学 64.1 (2012): 28-40.

说的是:

“上述ILP公式在[10,28]之前已经给出。这个公式也可以解释为求解最小加权反馈弧 设置问题来自计算机科学 [10,19]"

我猜你可能会从这篇论文开始 (Link to pdf as referenced by Google Scholar)

,

我发现(在我朋友的帮助下),你可以使用拓扑排序来解决这个问题。你只需要为每条边引入一个约束,这样:
topologicalOrder[ edge.parent ] << topologicalOrder[ edge.child ] + ( M * edgeInactive[edge])
其中 topologicalOrder[node] 是节点拓扑位置的整数数组,edgeInactive 是布尔数组,表示边缘在结果(非循环)图中是否处于活动状态。 M 是用于在 edgeActive[edge] == true 时“关闭”约束的 Big M 方法。
然后你只需要最小化非活动边的权重总和。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。