【发布时间】:2019-10-11 11:36:28
【问题描述】:
我正在使用 OR-Tools CP Solver 实施包裹整合解决方案(基于护士问题解决方案)。
有一家工厂生产一些需要邮寄给客户的小包裹。 将一些 mini_Package 合并为更大的 Package 是最佳选择(例如,如果我们遵守总重量限制,我们可以将 3 个轻 mini_Package 合并为一个 Package,并支付一次而不是 3 次的运输费用)。
Mini_Packages 在数据源中有一些重要的属性(固定目的地、重量、可接受的交货日期范围)。
我的主要 0-1 整数变量如下所示:
x[mini_package_source_number, destination, optimal_shipment_date, package_number]
如果 mini_package 应该在某一天到达某个目的地,合并到某个 Package_number,则它 == 1。
我已经成功构建了大部分模型,除了:
1.主要挑战
如何进行约束以确保当求解器分配最佳包裹编号时,它不能与任何其他目的地或 shipping_date 一起使用? (它的意思是物理上是一个统一的包裹去某个地方)
潜在代码:
for package_number in range(Packages):
model.Add(sum(x[mini_package_source_number, destination, optimal_shipment_date, package_number] for ...) <= 1)
会错,因为分配的Package_number可以存在很多次,合并几个mini_Packages。 它可以存在多次,但必须始终分配到相同的目的地和日期。
潜在的求解器解决方案:
x[1, Place67, 2019-01-01, 8] = 1
x[2, Place124, 2019-01-04, 119] = 1
x[3, Place124, 2019-01-04, 119] = 1
还可以,mini_Packages 2 和 3 被合并到 Package 119 到相同的目的地(和日期)。
x[4, Place55, 2019-01-05, 119] = 1
可能是错误的,因为 mini_Package 4 也被合并到 Package 119 中,之前由求解器决定前往另一个目的地(并且在另一个日期)。
它是如何编码的?我非常感谢任何解决方案的建议。
2。加法
@Stradivari 的感觉(下面的答案)是准确的。我很可能使用了过多的变量。
3.冲突产品挑战
【问题讨论】:
-
你能把原来的问题留在这里,把建模问题移到or.stackexchange.com吗?
-
好的。点 2-3 移至:or.stackexchange.com/questions/2786/…
标签: python scheduling knapsack-problem cp or-tools