1.背包问题与装箱问题
背包问题(Knapsack problem):容器数量是固定的,每个容器有自己的最大容量,而需要分配的物件有各自的价值,我们的目标是让装入容器的物体的总价值最大,并不要求所有物体都装入。背包问题有如下分类:
问题分类 | 容器数量 | 约束条件 |
---|---|---|
0-1背包问题 | 1个 | 1个 |
多背包问题 | 多个 | 1个但每个背包对应不同的约束 |
多维背包问题 | 1个 | 多个 |
装箱问题( Bin-packing problem):容器数量不固定,每个容器容量是相同的,有自己的最大容量,我们的目标是用最少的容器来存放所有的物件。装箱问题也可以分为多种情况,如完全装箱问题、不完全装箱问题、一维装箱问题和二维装箱问题等。
2.背包问题建模
2.1 0-1背包问题建模
实例:见OR-Tools官网题目
50个物品被装入一个箱子。每个物品都有一个值(物品上的数字)和一个重量(与物品的面积大致成比例)。背包的容量被为850,目标是找到一组能使总价值最大化而又不超过容量的物品。
python调用ortools求解:
from ortools.linear_solver import pywraplp
values = [
360, 83, 59, 130, 431, 67, 230, 52, 93, 125, 670, 892, 600, 38, 48, 147,
78, 256, 63, 17, 120, 164,