OR-Tools:有利润的 TSP
Posted
技术标签:
【中文标题】OR-Tools:有利润的 TSP【英文标题】:OR-Tools: TSP with Profits 【发布时间】:2021-08-08 11:31:11 【问题描述】:是否有使用 OR-Tools 计算 TSP 和利润的选项? 我尝试为每个端节点实现收入
data['revenue'] = (1, 0): 0,
(1, 2): 100,
(1, 3): 10,
(1, 4): 10000000000,
(2, 0): 0,
(2, 1): 1000,
(2, 3): 10,
(2, 4): 10000000000,
(3, 0): 0,
(3, 1): 1000,
(3, 2): 100,
(3, 4): 10000000000,
(4, 0): 0,
(4, 1): 1000,
(4, 2): 100,
(4, 3): 10
然后我从这个问题中添加:Maximize profit with disregard to number of pickup-delivery done OR tools
for node, revenue in data["revenue"].items():
start, end = node
routing.AddDisjunction(
[manager.NodeToIndex(end)], revenue
)
routing.AddDisjunction(
[manager.NodeToIndex(start)], 0
)
不幸的是,这不起作用。我总是得到解决方案,这是没有意义的。 有人可以帮助或给我一个建议,如何使用 OR-Tools 将利润实现到 TSP 中?
【问题讨论】:
【参考方案1】:在析取中添加开始或结束节点没有意义......
AddDisjunction 必须应用于每个节点(或对)但开始和结束节点。
for node, revenue in data["revenue"].items():
pickup, delivery = node
pickup_index = manager.NodeToIndex(pickup)
delivery_index = manager.NodeToIndex(delivery)
routing.AddDisjunction(
[pickup_index, delivery_index], revenue, 2 # cardinality
)
-
你的字典中的键值是一对节点吗?对我来说似乎是协调的......
【讨论】:
以上是关于OR-Tools:有利润的 TSP的主要内容,如果未能解决你的问题,请参考以下文章
// 62.是否有利润奖--lrj private boolean isProfitsAward; // 63.利润奖--lrj_price private String profitsAward;