多个带有易碎物品的背包

问题描述

我正在使用cp_model解决与多背包问题(https://developers.google.com/optimization/bin/multiple_knapsack)非常相似的问题。就像示例代码中一样,我使用一些布尔变量对成员资格进行编码:

# Variables
# x[i,j] = 1 if item i is packed in bin j.
x = {}
for i in data['items']:
    for j in data['bins']:
        x[(i,j)] = solver.IntVar(0,1,'x_%i_%i' % (i,j))

我的问题所特有的是,有很多可替代的物品。类型1可能有5个项目,类型2可能有10个项目。任何项目都可以与相同类型的项目互换。使用布尔变量对问题进行编码将隐式假设相同类型项目的分配顺序很重要。但是实际上,顺序并不重要,只占用不必要的计算时间。

我想知道是否有任何方法可以设计模型,以便它准确地表示我们是从可互换的项目池中分配以节省计算。

解决方法

与其在bin'b'中为5个类型为'i'的项创建5个布尔变量,不如在bin'b'中创建从0到5个项'i'的整数变量'count'。然后sum over b (count[i][b]) == #item b

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...