【发布时间】:2019-12-06 09:33:14
【问题描述】:
我正在尝试使用 OR-Tools 中的 MinCostFlow 解决工程问题。有一个带有管道和一些供应阀的机械分配系统。这些阀门需要连接到消费者。本来我是想用匈牙利算法解决这个问题的,但后来我意识到这个路径没有考虑到流过。
节点 0-4 是消费者,节点 4-7 是供应阀,节点 8 和 9 是管道。我在每个消费者身上放置了一个“供应”,以显示它期望的流量。我在最后放了一个水槽,以便将供应从系统中取出。并非所有消费者都有相同的需求。我们可以看到节点 0 需要 10,并且我专门设计了一条路径(以红色突出显示),可以将它带到那里。我现在已将所有价格设置为 0。
然而,它实际上是这样解决的:
出于某种原因,它决定将节点 0 拆分为 2 个节点(6 和 7),然后让更大的节点 7 从 3 和 0 接收 5。从系统角度来看,这并不理想,我也不理解为什么它会以这种方式解决它。在匈牙利算法中,它不允许一个工人接受一个以上的工作。在该算法中,节点 4-7 将是工人,而 0-3 将是工作。
我可以通过增加从节点 1-3 到节点 7 的弧的成本来获得所需的结果,但我不想操纵成本字段来获得所需的结果。这似乎需要做很多额外的工作来帮助优化工具选择正确的路径。
我如何使用 OR-Tools 来完成这项工作?
【问题讨论】:
-
“拆分不理想”是否意味着您需要 1-1 映射,或者是否意味着拆分应该花费更多?另外,真的只有两个管道还是只是一个例子?
-
@MattTimmermans 是的 - 我需要 1-1 映射。一个阀门只能供应一个消费者。因此,如果只有一个阀门可以供应 10 个,如果不将其分配给需要 10 个的消费者,那将是一种浪费(并且是一个不太完整的解决方案)。在生产中,将有 10,000 个阀门和 10,000 个具有不同需求的消费者,并且最大流量。我先小试一下。
标签: c# algorithm linear-programming or-tools