智能仓储系统的出入库策略及碎片优化研究
2019-10-11汪文娟王江平
汪文娟,王江平,郝 欢
(国网电力科学研究院武汉南瑞有限责任公司,湖北 武汉 430070)
0 引 言
近年来,随着人工智能技术和机器人技术的飞速发展,智能机器人开始被研究并应用于仓储领域。智能机器人自动完成货物的分拣,取代人工分拣。亚马逊使用Kiva机器人取代人在仓库中行走和存取货物,极大提高了仓储工作的效率[1]。
智能仓储系统采用自动存取方式,在配送流程中,货物被自动存取,取代了人工在巷道内行走和存取货物,大大提高了货物的存取效率,节省了人工费用,减少了人工干预可能带来的错误。自动取存需要考虑几个技术要素:待命位策略、出入库策略、堆垛机的作业方式等。待命位点是智能机器人或者堆垛机处于空闲状态时等待的位置。国内外对于待命位点策略有大量的研究,Bozer和White提出了四种静态堆垛机待命位策略[2]。刘田建立了停留在原地的待命位点策略下的双指令循环行走时间模型,并验证了双指令循环行走时间模型的有效性。徐贤浩采用统计建模的方法研究了三种常见的仓储机器人待命位策略[3]。
出入库策略的好坏直接影响智能仓储系统的效率,因此出入库策略是整个智能仓储系统的关键要素之一。基于仓储系统的出入库作业流程,结合物联网、大数据的时代背景及客户需求,文中研究了停留在原地的待命位点下的出入库策略,并阐述了每种算法的应用场景,同时,对出入库作业所导致的碎片进行了研究,提出了碎片优化算法,并验证了碎片优化算法的有效性。
1 储位分区
储位分区是将货柜里的储位进行分区,每个储位都有存放区类型这个属性,货物的类型与存放区类型进行匹配存放。一般情况下,设置一个货柜放一种或两种类型的货物。目的是减少机械手抓取次数,缩短出入库作业时间,提高出入库效率。在进行储位分区时,需要考虑几个指标:客户需求、库容量、物品种类量。其中,客户需求指客户对各物品种类的需求量;库容量表示库房的最大容量;物品种类量表示库房需存放的最大种类量[4]。
图1 储位分区
该系统的应用场景是电力系统内电表的出入库作业,首先,应明确会存放到智能仓库的电表类型,遵守的原则是每种货物按照客户需求比例或库存比例安排在货柜里。在此原则下,还需考虑电表的物化性质,如互感器重量较大,与其他电表存放在同一货柜应存储在低层;终端的周转率较低,应存放在离机械手相对较远的货柜;电能表的周转率较高,应存放在离机械手相对较近的货柜,如图1所示。
2 出入库算法及碎片整理
2.1 入库算法
2.1.1 就近入库
就近入库,是仓储系统使用最普遍的一种入库策略(见图2)。就近入库遵循的原则是:入库时优先使用靠近出入库输送口的货柜,以减少机械手x轴(货柜排列纵向)方向行驶距离。若Pr表示最大的货柜数量,Qt表示最大列数,Ta表示最大行数,则S表示入库储位的排列[5-6]。
图2 就近入库
2.1.2 低层满装
低层满装策略适合使用的条件是承重大、体积大的设备入库,例如互感器、终端等,有利于减少突发事故带来的安全隐患。文中设计的智能仓储系统在任务开始执行前,各对入库策略按需进行切换,提高执行效率。低层满装遵循的原则是:入库时优先使用货柜低层的储位,以减少机械手z轴方向行驶距离。一般情况下,优先装满每个货柜的底层和二层。如图3所示,机械手优先往货柜的第一层存放货物,如果定义每个柜子的第一层和第二层存放互感器类型的箱子,则当前货柜第一层和第二层存放满时,剩余需要入库的互感器往其他货柜的第一二层存放[7-9]。
(2)
图3 低层满装
2.2 出库算法
2.2.1 先进先出
先进先出,是使用最多的一种出库策略。在电力系统中,通常按照入库时间或者设备检定时间,先进入的先出。INSTORETIME是入库时间,S代表出库储位按照入库时间由小到大进行的排列,则:
S=rang{N(i,j,m)}INSTORETIME(min→max)
(3)
2.2.2 散盘优先
散盘指的是未满装的箱子,仓储系统中货物的出入库都是以一箱或一垛为单位进行出入库的。当任务数量不是满箱数量的整数倍时,就存在多出的情况,此时需要生成一个回库工单。若采用散盘优先出库策略,将未满装的箱子先出,能够尽可能减少多出后回库的情况,减少作业时间,提高出库效率。STORENUM是指每个储位存储的货物数量,S代表出库储位按照存储数量由小到大进行的排列[10-11],则:
S=rang{N(i,j,m)}STORENUM(min→max)
(4)
2.2.3 最多周转箱优先
最多周转箱优先指的是选择从满足出库条件的存储周转箱数量最多的货柜出库。目的是减少货柜开合次数以及货柜来回移动的次数,尽可能一个货柜里的数量满足一次出库任务。
S=rang{N(i,j,m)}BOXNUM(max→min)
(5)
2.3 碎片整理
经过长时间的出入库作业,由于每次出入库货物的类型、型号、数量可能不一致,货柜会出现不连续的存储空间即碎片。如图4所示,不连续的存储空间会导致机械手多次抓取,降低机械手的工作效率。比如出60只单相表,机械手进行一次抓取就能完成,由于碎片,机械手需要进行三次抓取才能完成,出库时间大大增加。当存储区出现大量碎片时,进行一次碎片整理是非常有必要的。碎片整理的思想是采用递归方式,从指定货柜正向开始遍历,记录第一个满储位存放的货物类型,并找出第一个与当前标记的货物类型不一致的储位或第一个空储位。然后,反向遍历,找到第一个与标记的货物类型一致的满储位。最后把该满储位的货物放到正向的空储位或者与不匹配标记的货物类型的储位的货物进行交换[12-13]。图4原始储位中存在21个碎片,按照图5进行碎片整理,经过16次的储位交换,得到整理后的储位图,见图6。
图4 原始储位
图5 碎片整理过程
图6 碎片整理后储位
以下是碎片整理算法的代码描述[14-15]。
//货柜碎片整理函数采用递归方式
private void Defrag(List
{
Store curEmptyCell=null; //当前可用空储位,从头开始的第一个
string curEqipType=null; //当前正在整理的货物类型
Store preCell=null;//前序位置
Store lastCell=null; //后序位置
//正向寻找第一个满储位
for (int i=proFlag;i {if(listStore[i].State==State.full) {curEqipType=listStore[i].EqipType; break;} } //正向寻找第一个空储位 for (int i=proFlag;i {if(listStore[i].State==State.empty) {curEmptyCell=listStore[i]; break; } } //如果没有一个空储位(全满)或者没有一个满储位(全空),则整理结束 if(curEmptyCell==null||curEqipType==null) {return;} //正向寻找第一个与当前整理货物类型curBox不同的储位或空储位和逆向寻找第一个与当前整理货物类型相同且非空的储位并交换 for (int j=listStore.Count-1;proFlag {//正向寻找第一个空储位或者装有与curBox属性不同货物的储位 if((listStore[proFlag].State==State.full&&listStore[proFlag].EqipType.Equals(curEqipType))||listStore[proFlag].State==State.disabled) {proFlag++; continue; } //反向寻找第一个装有与curBox属性相同货物的储位 if(!(listStore[j].State==State.full&&listStore[j].EqipType.Equals(curEqipType))) {j--; continue; } preCell=listStore[proFlag]; lastCell=listStore[j]; MoveByEmpty(lastCell,preCell,curEmptyCell,listOprStep); //借助空储位移动 curEmptyCell=lastCell; //curEmptyCell指向 最后被移空的储位 proFlag++; j--; } Defrag(listStore,proFlag,listOprStep); //从proFlag开始递归调用 } 入库算法:就近入库和底层满装。当入库货物较少时,采用就近入库算法效率较高。入库货物数量较多,采用两种入库算法差别不大。当入互感器这类重量较大的货物时,采用底层满装能减少安全隐患。 出库算法:先进先出、散盘优先、最多周转箱优先。先进先出和散盘优先是基于客户需求而定制的出库算法,先进先出能对旧表进行优先出库,散盘优先出库算法优先从不满箱的储位出,可以将货物规范化存储。最多周转箱优先算法是尽可能用一个货柜来满足任务需求,减少货柜的开和关所花费的时间和堆垛机在巷道间移走花费的时间。 从图6可以看出,碎片优化的效果是很明显的。消除了图4中的21个碎片,使得货柜里存放的货物连续。从图4到图6,碎片整理前出完整个货柜里的货物需17次取货,而碎片整理后仅需要8次,效率提高了一倍多。 介绍了就近入库、底层满装两种入库策略,先进先出、散盘优先、最多周转箱优先三种出库策略,并阐述了每种策略的优劣势及适用场景。由于长时间出入库作业产生的碎片,出入库效率变低。针对这种情况,文中设计了碎片整理算法。从整理效果上看,能100%消除碎片,极大提高了作业效率。3 出入库算法的比较及碎片优化的效果验证
4 结束语