汪文娟,王江平,郝 歡
(國網(wǎng)電力科學(xué)研究院武漢南瑞有限責(zé)任公司,湖北 武漢 430070)
近年來,隨著人工智能技術(shù)和機(jī)器人技術(shù)的飛速發(fā)展,智能機(jī)器人開始被研究并應(yīng)用于倉儲領(lǐng)域。智能機(jī)器人自動完成貨物的分揀,取代人工分揀。亞馬遜使用Kiva機(jī)器人取代人在倉庫中行走和存取貨物,極大提高了倉儲工作的效率[1]。
智能倉儲系統(tǒng)采用自動存取方式,在配送流程中,貨物被自動存取,取代了人工在巷道內(nèi)行走和存取貨物,大大提高了貨物的存取效率,節(jié)省了人工費(fèi)用,減少了人工干預(yù)可能帶來的錯誤。自動取存需要考慮幾個技術(shù)要素:待命位策略、出入庫策略、堆垛機(jī)的作業(yè)方式等。待命位點(diǎn)是智能機(jī)器人或者堆垛機(jī)處于空閑狀態(tài)時等待的位置。國內(nèi)外對于待命位點(diǎn)策略有大量的研究,Bozer和White提出了四種靜態(tài)堆垛機(jī)待命位策略[2]。劉田建立了停留在原地的待命位點(diǎn)策略下的雙指令循環(huán)行走時間模型,并驗(yàn)證了雙指令循環(huán)行走時間模型的有效性。徐賢浩采用統(tǒng)計(jì)建模的方法研究了三種常見的倉儲機(jī)器人待命位策略[3]。
出入庫策略的好壞直接影響智能倉儲系統(tǒng)的效率,因此出入庫策略是整個智能倉儲系統(tǒng)的關(guān)鍵要素之一?;趥}儲系統(tǒng)的出入庫作業(yè)流程,結(jié)合物聯(lián)網(wǎng)、大數(shù)據(jù)的時代背景及客戶需求,文中研究了停留在原地的待命位點(diǎn)下的出入庫策略,并闡述了每種算法的應(yīng)用場景,同時,對出入庫作業(yè)所導(dǎo)致的碎片進(jìn)行了研究,提出了碎片優(yōu)化算法,并驗(yàn)證了碎片優(yōu)化算法的有效性。
儲位分區(qū)是將貨柜里的儲位進(jìn)行分區(qū),每個儲位都有存放區(qū)類型這個屬性,貨物的類型與存放區(qū)類型進(jìn)行匹配存放。一般情況下,設(shè)置一個貨柜放一種或兩種類型的貨物。目的是減少機(jī)械手抓取次數(shù),縮短出入庫作業(yè)時間,提高出入庫效率。在進(jìn)行儲位分區(qū)時,需要考慮幾個指標(biāo):客戶需求、庫容量、物品種類量。其中,客戶需求指客戶對各物品種類的需求量;庫容量表示庫房的最大容量;物品種類量表示庫房需存放的最大種類量[4]。
圖1 儲位分區(qū)
該系統(tǒng)的應(yīng)用場景是電力系統(tǒng)內(nèi)電表的出入庫作業(yè),首先,應(yīng)明確會存放到智能倉庫的電表類型,遵守的原則是每種貨物按照客戶需求比例或庫存比例安排在貨柜里。在此原則下,還需考慮電表的物化性質(zhì),如互感器重量較大,與其他電表存放在同一貨柜應(yīng)存儲在低層;終端的周轉(zhuǎn)率較低,應(yīng)存放在離機(jī)械手相對較遠(yuǎn)的貨柜;電能表的周轉(zhuǎn)率較高,應(yīng)存放在離機(jī)械手相對較近的貨柜,如圖1所示。
2.1.1 就近入庫
就近入庫,是倉儲系統(tǒng)使用最普遍的一種入庫策略(見圖2)。就近入庫遵循的原則是:入庫時優(yōu)先使用靠近出入庫輸送口的貨柜,以減少機(jī)械手x軸(貨柜排列縱向)方向行駛距離。若Pr表示最大的貨柜數(shù)量,Qt表示最大列數(shù),Ta表示最大行數(shù),則S表示入庫儲位的排列[5-6]。
圖2 就近入庫
2.1.2 低層滿裝
低層滿裝策略適合使用的條件是承重大、體積大的設(shè)備入庫,例如互感器、終端等,有利于減少突發(fā)事故帶來的安全隱患。文中設(shè)計(jì)的智能倉儲系統(tǒng)在任務(wù)開始執(zhí)行前,各對入庫策略按需進(jìn)行切換,提高執(zhí)行效率。低層滿裝遵循的原則是:入庫時優(yōu)先使用貨柜低層的儲位,以減少機(jī)械手z軸方向行駛距離。一般情況下,優(yōu)先裝滿每個貨柜的底層和二層。如圖3所示,機(jī)械手優(yōu)先往貨柜的第一層存放貨物,如果定義每個柜子的第一層和第二層存放互感器類型的箱子,則當(dāng)前貨柜第一層和第二層存放滿時,剩余需要入庫的互感器往其他貨柜的第一二層存放[7-9]。
(2)
圖3 低層滿裝
2.2.1 先進(jìn)先出
先進(jìn)先出,是使用最多的一種出庫策略。在電力系統(tǒng)中,通常按照入庫時間或者設(shè)備檢定時間,先進(jìn)入的先出。INSTORETIME是入庫時間,S代表出庫儲位按照入庫時間由小到大進(jìn)行的排列,則:
S=rang{N(i,j,m)}INSTORETIME(min→max)
(3)
2.2.2 散盤優(yōu)先
散盤指的是未滿裝的箱子,倉儲系統(tǒng)中貨物的出入庫都是以一箱或一垛為單位進(jìn)行出入庫的。當(dāng)任務(wù)數(shù)量不是滿箱數(shù)量的整數(shù)倍時,就存在多出的情況,此時需要生成一個回庫工單。若采用散盤優(yōu)先出庫策略,將未滿裝的箱子先出,能夠盡可能減少多出后回庫的情況,減少作業(yè)時間,提高出庫效率。STORENUM是指每個儲位存儲的貨物數(shù)量,S代表出庫儲位按照存儲數(shù)量由小到大進(jìn)行的排列[10-11],則:
S=rang{N(i,j,m)}STORENUM(min→max)
(4)
2.2.3 最多周轉(zhuǎn)箱優(yōu)先
最多周轉(zhuǎn)箱優(yōu)先指的是選擇從滿足出庫條件的存儲周轉(zhuǎn)箱數(shù)量最多的貨柜出庫。目的是減少貨柜開合次數(shù)以及貨柜來回移動的次數(shù),盡可能一個貨柜里的數(shù)量滿足一次出庫任務(wù)。
S=rang{N(i,j,m)}BOXNUM(max→min)
(5)
經(jīng)過長時間的出入庫作業(yè),由于每次出入庫貨物的類型、型號、數(shù)量可能不一致,貨柜會出現(xiàn)不連續(xù)的存儲空間即碎片。如圖4所示,不連續(xù)的存儲空間會導(dǎo)致機(jī)械手多次抓取,降低機(jī)械手的工作效率。比如出60只單相表,機(jī)械手進(jìn)行一次抓取就能完成,由于碎片,機(jī)械手需要進(jìn)行三次抓取才能完成,出庫時間大大增加。當(dāng)存儲區(qū)出現(xiàn)大量碎片時,進(jìn)行一次碎片整理是非常有必要的。碎片整理的思想是采用遞歸方式,從指定貨柜正向開始遍歷,記錄第一個滿儲位存放的貨物類型,并找出第一個與當(dāng)前標(biāo)記的貨物類型不一致的儲位或第一個空儲位。然后,反向遍歷,找到第一個與標(biāo)記的貨物類型一致的滿儲位。最后把該滿儲位的貨物放到正向的空儲位或者與不匹配標(biāo)記的貨物類型的儲位的貨物進(jìn)行交換[12-13]。圖4原始儲位中存在21個碎片,按照圖5進(jìn)行碎片整理,經(jīng)過16次的儲位交換,得到整理后的儲位圖,見圖6。
圖4 原始儲位
圖5 碎片整理過程
圖6 碎片整理后儲位
以下是碎片整理算法的代碼描述[14-15]。
//貨柜碎片整理函數(shù)采用遞歸方式
private void Defrag(List
{
Store curEmptyCell=null; //當(dāng)前可用空儲位,從頭開始的第一個
string curEqipType=null; //當(dāng)前正在整理的貨物類型
Store preCell=null;//前序位置
Store lastCell=null; //后序位置
//正向?qū)ふ业谝粋€滿儲位
for (int i=proFlag;i {if(listStore[i].State==State.full) {curEqipType=listStore[i].EqipType; break;} } //正向?qū)ふ业谝粋€空儲位 for (int i=proFlag;i {if(listStore[i].State==State.empty) {curEmptyCell=listStore[i]; break; } } //如果沒有一個空儲位(全滿)或者沒有一個滿儲位(全空),則整理結(jié)束 if(curEmptyCell==null||curEqipType==null) {return;} //正向?qū)ふ业谝粋€與當(dāng)前整理貨物類型curBox不同的儲位或空儲位和逆向?qū)ふ业谝粋€與當(dāng)前整理貨物類型相同且非空的儲位并交換 for (int j=listStore.Count-1;proFlag {//正向?qū)ふ业谝粋€空儲位或者裝有與curBox屬性不同貨物的儲位 if((listStore[proFlag].State==State.full&&listStore[proFlag].EqipType.Equals(curEqipType))||listStore[proFlag].State==State.disabled) {proFlag++; continue; } //反向?qū)ふ业谝粋€裝有與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開始遞歸調(diào)用 } 入庫算法:就近入庫和底層滿裝。當(dāng)入庫貨物較少時,采用就近入庫算法效率較高。入庫貨物數(shù)量較多,采用兩種入庫算法差別不大。當(dāng)入互感器這類重量較大的貨物時,采用底層滿裝能減少安全隱患。 出庫算法:先進(jìn)先出、散盤優(yōu)先、最多周轉(zhuǎn)箱優(yōu)先。先進(jìn)先出和散盤優(yōu)先是基于客戶需求而定制的出庫算法,先進(jìn)先出能對舊表進(jìn)行優(yōu)先出庫,散盤優(yōu)先出庫算法優(yōu)先從不滿箱的儲位出,可以將貨物規(guī)范化存儲。最多周轉(zhuǎn)箱優(yōu)先算法是盡可能用一個貨柜來滿足任務(wù)需求,減少貨柜的開和關(guān)所花費(fèi)的時間和堆垛機(jī)在巷道間移走花費(fèi)的時間。 從圖6可以看出,碎片優(yōu)化的效果是很明顯的。消除了圖4中的21個碎片,使得貨柜里存放的貨物連續(xù)。從圖4到圖6,碎片整理前出完整個貨柜里的貨物需17次取貨,而碎片整理后僅需要8次,效率提高了一倍多。 介紹了就近入庫、底層滿裝兩種入庫策略,先進(jìn)先出、散盤優(yōu)先、最多周轉(zhuǎn)箱優(yōu)先三種出庫策略,并闡述了每種策略的優(yōu)劣勢及適用場景。由于長時間出入庫作業(yè)產(chǎn)生的碎片,出入庫效率變低。針對這種情況,文中設(shè)計(jì)了碎片整理算法。從整理效果上看,能100%消除碎片,極大提高了作業(yè)效率。3 出入庫算法的比較及碎片優(yōu)化的效果驗(yàn)證
4 結(jié)束語