【发布时间】:2022-01-18 02:52:42
【问题描述】:
我正在尝试制定一种算法(可能使用 Python 中的 OR 工具)来解决似乎与背包问题有关的问题。
- 我在位置 A 有一组物品
- 我想把他们送到位置 B
- 每件商品都有重量和价值
- 我只能携带 X 个重量
- 我怕中途被抢,所以只想携带最多Y个值
如果我正在尝试计划我的第一次从位置 A 到位置 B 的旅行,我该如何选择这样的项目:
- 我将加载的重量最大化,最大限制为 X(最大程度地减少浪费的重量容量)
- 我将加载的价值最大化,直到 Y 的限制(最小化浪费的价值容量)
一个人为的例子:
- 我的限额是 5 公斤和 50 美元
- 我有 10 个 C 项(重量:0.1 公斤,价值:10 美元)
- 我有 10 件 D 项(重量:1 公斤,价值:1 美元)
“简单”的解决方案是进行 4 次旅行:
- 5x C 项(50 美元,0.5 公斤)
- 5x C 项(50 美元,0.5 公斤)
- 5x D 项(5 美元,5 公斤)
- 5x D 项(5 美元,5 公斤)
但更明智的解决方案是只进行 3 次旅行:
- 4x C 项 + 4x D 项(44 美元,4.4 公斤)
- 4x C 项 + 4x D 项(44 美元,4.4 公斤)
- 2x C 项 + 2x D 项(22 美元,2.2 公斤)
我使用过 OR Tools 线性求解器,但仅在具有多个约束的情况下最大化一个值。如何在多个约束条件下最大化多个值(加载重量和加载值)?
【问题讨论】:
-
目标不是尽量减少出行吗?这是一个单一的目标。 (就像装箱问题:尽量减少箱的数量)。
-
不完全。我们一次只能计划一次旅行,并且无法计划任何未来的旅行,因为位置 A 的物品集可能会在旅行完成时发生变化。
标签: python algorithm optimization knapsack-problem or-tools