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

VRPTW 对 IBM ILOG CPLEX 中的货车类型有限制

如何解决VRPTW 对 IBM ILOG CPLEX 中的货车类型有限制

您好,感谢您的时间! (英语不是我的母语,所以希望你能理解)

我在 IBM ILOG CPLEX 中对以下 VRP 建模时遇到问题:

  1. 有一定数量的货车(约 1300 辆)和一定数量的订单(约 2500 辆)。
  2. 每个订单都有自己的时间窗口、完成时间和完成收入。
  3. 每辆货车可以完成 >= 0 个订单。
  4. 有些订单可能仍未完成。
  5. 空的转换(从订单到订单)有完成的时间和转换的成本。
  6. 禁止一些空的过渡(例如,从订单的加载点到订单的 5 点)
  7. 有些货车无法完成某些订单。

目标 -> 最大化收入(完成订单的收入 - 空转成本)

我已经针对 1-6 个条件解决了这个问题,但我无法处理条件 7。

两者:允许使用 CP 和 CPLEX 引擎。

下面我附上一个带有注释的源数据示例。

我很乐意获得完整模型,或此类模型的示例,或任何建议和参考, 提前致谢!

附言欢迎您更改数据结构和名称。也可以有成组的货车,这对于特定的顺序是不允许的,而不是每对都有一个矩阵。

// number of wagons
wagons = 3;

// number of orders
orders = 4;

// income of each order
orderIncome = [20000 10000 20000 2500];

// duration of each order
orderDuration = [55 70 65 110];

// end of time window for each order
orderWindowEnd = [100 250 100 300];

// matrix of size (orders x wagons),where 0 means wagon j can NOT take order i
WagonToOrderBan =  [
    [0 1 1]
    [0 1 0]
    [1 0 1]
    [1 1 0]
 ];

// matrix of size (orders x orders ),where 0 means empty transition between
// order i to order j is NOT allowed
OrderToOrderBan = [
    [1 1 1 0]
    [1 0 1 1]
    [1 1 0 1]
    [1 1 1 1]
];


// transition from order to order cost
emptyRate = [
    [550 1100 1100 300]
    [550 1150 500 900]
    [1200 600 800 350]
    [1200 600 750 300]
    [840 1200 200 350]
];

//  длительность порожнего рейса
emptyDuration= [
    [55 110 115 30 195]
    [55 115 50  95 160]
    [120 60 85 185 35]
];

解决方法

您说您不能对约束 7 进行建模,但它似乎并不是最难制定的。你的约束 1 到 6 的模型是什么? 如果您想使用 CP Optimizer 调度建模(如果货车和订单的数量不是太高),您可以查看 OPL sched_setup.mod 示例(不是路由,而是 machine=wagons 上的调度问题,设置时间和禁止过渡)……但是如果订单可以由几辆货车完成,这将完全改变问题。您还可以查看 sched_trolley2 以获取用于运输物品的手推车示例(在车间环境中)。而且,如果每辆货车只会执行几次移动(2 或 3,货车上的订单比例为 2500/1300),也许可以使用更好的模型来决定,从货车的角度来看,哪些是提供 2 或 3 个订单…… 干杯,

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