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的主要内容,如果未能解决你的问题,请参考以下文章

中国移动手机用户缓慢增长,但努力争取高利润的5G套餐用户

// 62.是否有利润奖--lrj private boolean isProfitsAward; // 63.利润奖--lrj_price private String profitsAward;

戈润的清洁技术水处理业务在疫情期间实现强劲增长

OR-Tools:获取每一个最优解

如何在 or-tools 中定义复杂的目标函数?

OR-Tools:向最小成本流类添加约束?