01问题的提出
托盘码垛问题,是物流系统设计和数据分析的基础问题。虽然可以通过一些应用软件去计算单一SKU的码垛结果,但对于动则成千上万的SKU,计算工作量实在太大。本文探索托盘码垛计算的数学原理,以便给读者提供快捷方便的计算公式。
假设:
1)托盘码垛尺寸:x*y*z(长*宽*高),其中x>=y
2)箱子尺寸:a*b*c(长*宽*高),其中a>=b
为了简单起见,以下忽略高度方向的计算。
02关于码垛的原理和方法
关于托盘码垛,有两点是需要考虑的:1)码放的数量越多越好;2)码垛要符合行业要求。例如,行业有一个具体要求是:上面一层要与下面一层纵横交错,以便垛型保持稳定,不至于在输送和搬运过程中散垛。
码垛分析的意义在于,不同的码垛方式,其码垛数量是不同的。找出最理想的码垛方式,是设计的重要目标。例如对于1200mm*1000mm的标准托盘,如果箱型是450mm*350mm,码垛方式至少有以下几种:
实际上,以上3种码垛方式都存在瑕疵,实际码垛采用的是更加符合标准的式样,如下图:
两种式样分别表示奇数层和偶数层。
托盘码垛虽然变幻多端,但其实是有规律可循的。抛开美观不说,对每个箱子而言,其摆放方向只有两种情形:长边朝X方向或朝Y方向。这样使得分析计算变得相对简单。例如,350mm*250mm箱子,最简单的码垛方法是箱子长边始终沿一个方向排列,如下图所示:
第一种(左图)是长边朝X方向,第二种(右图)是朝Y方向。显然,左边好好于右边。第二种方法实际只能码放8个箱子,远低于第一种的12个。
如果改变这种单一方向的策略,还会看到更多的结果(忽略对称的部分):
显然,每种码放格式,其数量发生了变化,分别是12,13,11。这一结果显示,采用纵横交错的方式,有时会得到较好的结果,但有时的结果甚至不如简单的策略。最典型的例子莫过于对于1000*1000的托盘,箱子的尺寸为600*400时,简单的方法结果都不好。如下图所示:
左图是按照单一方式排布的,中图考虑了一些变化,右图才是正确的结果。上述的结果给了我们一种启示:尽管有时简单的布置方式就是最好的方式,但在有些情况下,四个角尝试按照顺时针方向(逆时针也是一样的)不断变换箱子方向的排列策略,将有可能获得最好结果。
如果从数学上描述,码盘问题实际上是求取(a,b)组合在(x,y)空间的最大值。即:
方程式1:nx*a+mx*b<=x (1)
方程式2:ny*b+my*a<=y (2)
求解max(nx*ny+mx*my) (3)
下图是方程式的基本示意:
很显然,上图右边的排列才是最优的,因为完全排满了。但这种最优解在很多情况下并非只有一个,这会给计算带来困难。
关于如何判断最大码垛数,下面给出一个计算公式:
N=int((x*y)/(a*b)) (4)
int()为取整函数,则N就是最大的码垛数。需要注意的是,很多情况下,实际排列的数要比这个少,所以,上述公式需要进行一些修正。应该看到,如果箱子尺寸越小,误差就越小,反之,误差就会增大。
03计算公式
需要注意的是,作为数据分析用的计算公式,并非一定要非常准确,只是要控制误差,避免给设计带来重大影响。举一个例子,设托盘尺寸为1100*1100,箱子尺寸是600*400,实际码放如下图所示:
实际码放是4个箱子,如果按照公式(4)计算,N=5,所以误差是20%,由此,也可以看出修正的必要性。
根据以上的分析,修正采用以下基本策略;
从左下角开始,箱子长边a沿托盘长边x开始进行简单排列,然后在右边的最后一列,考虑箱子旋转90°方向排列,在y方向,左上最后一排的箱子旋转90°排列,最后,右上角箱子再旋转90°排列。
沿长边布置的列数:na=int(x/a),int()为取整函数;
沿宽边布置的行数:nb=int(y/b);
数据修正如下:
x方向:至少要在右边增加一列,宽度为b;
设δ=x-na*a,若δ>=b,则增加k列b方向的箱子,k=int(δ/b),否则:检验一下(a+δ)/b>=2是否成立,如果不成立,就不予处理,因为int((a+δ)/b)=1毫无意义;
y方向:σ=y-nb*b,若b+σ>=a,则nb减少一行,否则,就不予处理。
此外,设β= y-a*int(y/a),若β>=b,则可以增加k列横向箱子。
计算公式:
N0=na*nb ...........................................(5)
修正公式1:
设δ=x-na*a,若k1=int(δ/b)>=1,且y>=a+b(至少可以进行一次组合排列):
设σ=y-nb*b,β= y-a*int(y/a),若b+σ>=a,则计算结果为:
N1=na*(nb-1)+k1*int(y/a)+int((b+σ)/a)*int(na*a/b)+int(β/b) ..........(6)
修正公式2:
设δ=x-na*a,若δ<b,且y>=a+b(至少可以进行一次组合排列):
若(a+δ)/b>=2,设k2=int((a+δ)/b),σ=y-nb*b,β= y-a*int(y/a),若b+σ>=a,则计算结果为:
N2=(na-1)*(nb-1)+k2*int(y/a)+int((b+σ)/a)*int(na*a/b)+int(β/b) ......(7)
附注:也可以按照旋转90°重新计算,如果x>=y,事实上结果是一致的。
需要注意的是,在极端情况下,上述公式还会出现误差,但对于数据分析,已经具备足够的精度了。
04经验公式
以上推导的计算公式(4)~(7),虽然精度很高,但在实际应用中还是太麻烦,有必要进一步简化。
事实上,如果不存在以下两种情况:
1)按一个方向码放,x方向剩余的部分δ=x-na*a已经不足一个b时;
2)按一个方向码放,y方向剩余的部分σ=y-nb*b-b已经不足一个a时;
其实误差已经很小,可按公式(5)计算结果。
反之,则需要修正。公式如下:
N3=na*nb+int((x-na*a)/b)*int(y/a)+int((y-int(y/a)/b) (8)
这个公式在特殊情况下当然会有误差,比如对特别细长的箱子,计算往往会出现问题,但基本可以满足设计的需要。试举一例如下:
x*y=1000*1000,a*b=600*400
na=1
nb=2
N3=4
实际结果N3=4,符合预期。但这一结果并未验算长度方向是否够的问题,在更为复杂的场合下,可能会有误差。
在实际数据分析中,还有更为简单的方法,即按照公式(4)和公式(5)分别计算码垛结果,然后取一个中间值,也是可以达到要求的。
关于伍强智能科技
北京伍强智能科技有限公司是国内知名的物流系统集成商,主要为全球客户提供专业的一站式智能物流系统整体解决方案,并提供高品质的AS/RS系统、MINILOAD系统、箱输送分拣系统、穿梭车系统、A字分拣机等物流装备,以及WMS、蜂鸟中台等核心软件系统。总部位于北京信息技术产业基地,在广州、苏州、台州、保定、贵阳、西安等多地设有分支机构或办事处。公司用户遍布全国、产品远销海外。先后承接了650多项形式各异的物流系统,行业覆盖医药、服装、机械、电商、快销品、图书、烟草、零售、教育实训等。