根据订单,模具优化组合和打印数量

问题描述

我正在写这本书是因为我有一个必须解决的离散优化问题,而且我认为可能已经有一些理论上的结果,甚至在Python中实现它的库(例如Google的OR-Tool)。

问题如下:我有使用不同模具印刷的不同对象。您可以认为物体是小兵或其他任何东西。每种物体都有不同的模具。总共我有3个不同的打印机,其中2个可以同时使用8个模具,另外1个可以使用10个模具。当收到不同对象的订单时,我必须将它们全部打印出来,以尽量减少打印数量。还有另一个副作用,这很重要,但不必直接输入问题的理论表述:每次更换模具时,我都会蒙受巨大的印刷损失 ial。因此,最小化模具更换数量比最小化印刷数量更为重要(换句话说,如果我可以少更换一次模具,则可以多次打印多于所需相同对象的次数)。

下面是一个可能有助于理解的示例:

  • 订单:
    • 对象A:80
    • 对象B:95
    • 对象C:101
    • ....
    • 对象Z:71
  • 模具:
    • A:1
    • B:2
    • C:3
    • ....
    • Z:1
  • 可用的打印机(它们处理的模具数量):
    • P1:8
    • P2:8
    • P3 10

注意:打印机始终需要完全装入模具。

我想到了一种简单的算法,可以利用单个对象的解决方案,即利用每个对象的order / number_of_molds比率来达到单个打印机的解决方案,但是我相信,即使同时考虑使用多个“打印机”,也有更好的选择。从某种意义上讲,它类似于装箱问题,但条件更复杂一点。

解决方法

我对此的想法如下。如果对于安装在打印机上的任何蜕皮(但不是全部),都超过了订购的对象数量,那么将浪费(部分)打印件。如果安装在同一台打印机上的蜕皮的订购对象数量不相等,则会发生这种情况。

因此,优化的第一步是用相似数量的有序物体构建8或10摩尔的群体。首先让我们保持简单,只考虑8组,而忽略第三台打印机。 打印浪费的总和是每组中最大订单数与最小订单数之差。

我们可以通过将订单数量划分为可用的蜕皮(如果有多个)来优化此数量。为简单起见,我们暂时忘记通过在不同的设置中再次使用相同的蜕皮也可以拆分数字。这为每种类型的蜕皮提供了M-1的自由度,可用来最大程度地减少印刷品浪费的数量(M是可用的蜕皮数量)。

这不是一个完整的解决方案,但可能是一个起点。