在Google ORtools中为模型(装箱问题示例)添加其他目标

2024-05-08 19:02:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在学习或使用工具,所以我举了一个例子(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']])

但它不起作用


Tags: 工具inaddfordatabin空间items