我目前正在学习或使用工具,所以我举了一个例子(The Bin Packing Problem)
现在,为了了解或工具的工作原理,我对代码进行了一些调整,首先,我对其进行了更改,以使每个容器具有唯一的容量,而不是普通大小的容器
我通过替换以下内容来实现:
data['bins'] = data['items']
data['bin_capacity'] = 100
...
for j in data['bins']:
solver.Add(
sum(x[(i, j)] * data['weights'][i] for i in data['items']) <= y[j] *
data['bin_capacities'])
与
capacities = [4, 5,15,4,4,6]
data['bins'] = list(range(len(capacities))) #data['items']
data['bin_capacities'] = capacities
...
for j in data['bins']:
solver.Add(
sum(x[(i, j)] * data['weights'][i]
for i in data['items']) <= y[j] * data['bin_capacities'][j])
它工作得很好,现在我希望模型不仅能够找到最少的垃圾桶,而且如果有多种方法可以得到最少的垃圾桶,它将返回所有垃圾桶中剩余的最小空间
例如,我们得到了这些箱子:20,8,9
这些项目:5,5,5,5,4,4
结果是: 储物箱20包含5个储物箱
垃圾箱9包含4个垃圾箱
这使得所有箱子中的剩余空间为1
而更好的结果是在8中包含4
我尝试向解算器添加附加值。最小化()公式如下
solver.Sum([solver.Sum([data['weights'][i] for i in data['items'] if x[(i,j)] == 1]) for j in data['bins']])
但它不起作用
目前没有回答
相关问题 更多 >
编程相关推荐