【问题标题】:Algorithm for optimal packing with known inventory已知库存的最佳包装算法
【发布时间】:2016-12-26 07:23:37
【问题描述】:

医院正在改变对设备进行消毒的方式。以前,当地外科医生保留所有自己的设备并制作自己的手术托盘。现在他们必须限制在全国范围内的标准。他们想知道他们可以从现有库存中制造多少新托盘,以及需要购买多少新设备。

医疗设备库存如下:

http://pastebin.com/rstWSurU

每家医院都有各种医疗设备的代码,然后是相应项目的数量

本词典中显示了 3 个手术托盘及其对应的物品。

http://pastebin.com/bUAZhanK

共有144个不同的操作托盘

医院将被告知他们需要 25 个托盘 x,30 个托盘 y,等等......

他们希望最大限度地利用现有库存完成托盘的数量。他们还想知道他们需要购买什么设备才能完成剩余的托盘。

我考虑过两种可能的解决方案,一种是将问题表示为线性规划问题。另一个解决问题的方法是对前 90% 的问题进行循环蛮力求解,然后通过多次执行随机算法来解决剩余的 10%,然后从这些尝试中选择最佳解决方案。

我很想知道是否有人知道如何解决这个问题的聪明方法!

【问题讨论】:

  • 很酷的任务。你在哪里找到它?你已经做过什么了吗? minimal reproducible example?
  • 请提供一个问题实例的小例子。究竟要优化什么?目标是尽量减少必须购买的物品数量吗?
  • 问题是什么?输入是什么?预期的输出是什么?
  • 如果不够清楚,抱歉!目标是最终确定尽可能多的托盘,以便他们可以在医院使用它们。如果所需托盘数量超过可用设备数量,则应退回完成托盘所需的设备数量,以便购买。
  • 我没有看到任何 OR 条件。你只需把所有需要的东西都放好,然后看看缺少了什么。为什么它不起作用?

标签: algorithm dynamic-programming linear-programming


【解决方案1】:

如果我理解正确,我们可以分别针对每家医院进行优化。我的猜测是,对于 MIP(混合整数规划)模型,以下内容将是一个良好的开端:

我使用以下索引:i 是项目,t 是托盘。 x(t,i) 表示我们为每种托盘类型分配了多少物品。 y(t) 计算我们可以使用可用项目组合的每种类型的托盘数量。从解决方案中,我们可以计算出我们需要订购的短缺量。

当然,我们只是在最大限度地增加我们可以制作的托盘数量。没有考虑平衡(一种类型的托盘很多,另一种类型的托盘很少或为零)。我通过不允许创建比需要的更多的托盘来缓解一点(如果我们有更多的物品需要转到其他类型的托盘)。此要求被表述为y(t) 的上限。

对于大问题,我们可以将(t,i) 组合限制为可能的组合。这将使模型更小。使用精确的数学符号时:

进一步的优化是替换变量x(t,i)

将剩余物品运送到其他医院会使模型变得更加困难。在这种情况下,我们最终可能会得到一个需要同时查看所有医院的模型。对于某些分解方法来说,这可能是一个有趣的案例。

【讨论】:

  • 必须阅读 ILP 问题和 MILP 变体,这绝对是一个可行的解决方案。你有什么实施技巧吗?现在我正在考虑使用 R 或 Python。
  • 我最擅长使用 GAMS 和 AMPL 等高级建模语言。但是 R 和 Python 通常用于实现优化模型。由于单一医院模型不是很复杂,R 和 Python 应该可以正常工作。如果使用 Python,您可能需要考虑使用 Pulp 或 Pyomo 之类的工具(或者,您也可以直接在 Python 中针对求解器 API 编写模型)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
  • 2014-05-20
  • 2013-11-10
  • 2021-10-03
相关资源
最近更新 更多