optimization - 具有边缘投资成本的最小成本流
问题描述
我想使用 python Min-Cost Flow 求解器来构建新的网络。这意味着我有一个初始完整图,顶点是供应商或有需求。使用该算法应该告诉我,根据他们的成本,将使用哪些边来解决所有需求。与现有问题不同的是,一条边在使用时的成本不仅用单位成本来描述,而且还有与流量无关的这条边的投资。我一直在研究 networkx 和 or-tools 的源代码,但无法弄清楚如何调整它们以实现边缘的投资成本。有人有更好的主意或可以帮助我调整代码吗?
最好的问候贾斯图斯
解决方案
您无法使用标准图形算法(例如:MinCostFlow)解决此问题。相反,您需要将其制定为混合整数程序。你可以从这个例子开始:
https://developers.google.com/optimization/assignment/assignment_mip
但是你需要稍微调整一下:你需要两类决策变量:(invest_var
二元)和flow_var
(连续)。目标将如下所示:
min: sum(flow_cost[i,j]*flow_var[i,j]) + sum(invest_cost[i,j]*invest_var[i,j])
And you need to add an additional constraint for each link:
flow_var[i,j] <= BIG_INT * invest_var[i,j]
这些限制flow_var
为0
if的目的invest_var
是0
。需求和供应约束将与示例中的类似。
BIG_INT
是一个常数。您可以将其设置为:
BIG_INT=max(flow_upper_bound[i,j])
其中 flow_upper_bound 是 flow_var 变量的上限。
请注意,问题现在变成了一个混合整数线性程序,而不仅仅是一个线性程序。
推荐阅读
- kubernetes - Rabbitmq-ha helm chart,管理插件抛出错误
- oracle - 杀死 Oracle 中的所有会话会解决我的问题吗?
- xml - 用于 BizTalk 2016 的 Edifact D16 XML 架构
- bash - 通过 for 循环在 ssh 连接中转义命令
- angular - “时刻”没有导出成员“默认”
- wikidata - 有没有办法从官方网页查询 Wikidata 以获取公司详细信息?
- angular - 在角度应用程序中绑定到 kendo UI datepicker 控件时未选择日期
- docker - 轮询成功,但出现错误:操作正在进行中 (29)。当 Xdebug 尝试从 docker 容器连接到 PhpStorm
- mysql - Mysql - 如果同一表的其他行中不存在值,则更新行
- android - Android Firebase 远程配置:未设置应用程序名称。调用 Builder#setApplicationName