将所有项目分配到没有最佳解决方案的箱子



我希望将物品放入垃圾箱中,其中每个物品必须来自不同的类别,每个垃圾箱必须包含唯一的物品集合,并且对哪些物品可以放在同一个箱子中存在限制。我不知道这是哪种类型的问题。这似乎类似于多个背包问题,但没有"最佳"解决方案。可能有许多同样有效的解决方案,或者可能只有一个,或者可能没有。

问题的更详细描述:

考虑我有 5 类项目:["Fruit", "Vegetable", "Bread", "Meat", "Frozen"]

每个类别中有 100 个项目,其中每个项目都不是唯一的。例如,在水果中有20个苹果,50个橙子,10个梨,10个葡萄,10个香蕉。面包中有50个百吉饼,40个面包,10个法式长棍面包。其他类别相似,因为项目总数总计为 100,但每个项目都有重复项。

我正在尝试将每个类别中的一件物品放入垃圾箱。每个垃圾箱分别获得水果、蔬菜、面包、肉类、冷冻各 1 个。箱数将与每个类别中的项目数相同。因此,对于此示例,100 个箱。

约束条件包括:

每个
  • 箱从每个项目类别中获取一个项目
  • 每个箱必须是唯一的。任何箱子都不能与另一个箱具有相同的项目组合
  • 有些物品不能放在同一个箱子里。例如,百吉饼不能与苹果在同一个垃圾箱中

我不确定如何构建这个问题。我正在寻找一些关于这是什么类型的问题的指导,以及什么方法适合使用 OR-Tools 解决它。

你在这里描述的问题的大小不是很大;有 5 个类别和 5 个项目,每个类别只有 5^5 = 3125 个项目组合。

如果您的实际问题也是这种大小,那么最简单的建模方法是制作一个包含所有允许组合的表格:

Frozenstyle="文本对齐:居中;">1style="文本对齐:居中;">2style="文本对齐:居中;">3style="文本对齐:居中;">4style="文本对齐:居中;">5style="文本对齐:居中;">6style="文本对齐:居中;">7style="文本对齐:居中;">8style="文本对齐:居中;">9style="文本对齐:居中;">10style="文本对齐:居中;">3124style="文本对齐:居中;">3125
Id Fruit Bread 蔬菜 Meat
apple = 1 loaf = 1 carrot = 1 sausage = 1 icecream = 1
apple = 1loaf = 1carrot = 1sausage = 1brokolli = 2
apple = 1loaf = 1carrot = 1sausage = 1orangejuice = 3
apple = 1loaf = 1carrot = 1chicken = 2icecream = 1
apple = 1loaf = 1carrot = 1chicken = 2brokolli = 2
apple = 1loaf = 1carrot = 1chicken = 2orangejuice = 3
apple = 1loaf = 1carrot = 1steak = 3icecream = 1
apple = 1loaf = 1carrot = 1steak = 3brokolli = 2
apple = 1loaf = 1carrot = 1steak = 3orangejuice = 3
apple = 1loaf = 1carrot = 1fish = 1icecream = 1
..................
orange = 2bagel = 2carrot = 1sausage = 1brokolli = 1
orange = 2bagel = 2carrot = 1sausage = 1orangejuice = 2

最新更新