朱仁貴 賀勝暉 劉加強 黃永慧
項目課題名稱:船體分段智能車間制造執行管控技術研究(項目編號:MC-201720-Z02);項目類別:工業和信息化部高技術船舶科研項目
摘要:合理的平面布局是充分利用人力資源、提高設備利用率、實現安全高效生產活動的基礎。針對船廠車間布局優化問題,提出一種基于Levy飛行灰狼尋優算法的車間布局優化模型。該方法綜合考慮車間生產計劃、產品加工路線和不同工位的生產能力,以車間總物流距離最短為目標構建車間布局優化函數,利用能夠有效開展全局搜索、具有較優收斂精度的Levy飛行灰狼尋優算法求解函數最優值。實現基于生產實際情況建立模型,切實的提高生產效率、降低物流強度、減少工序間停工帶料時間,促進船舶企業的數字化生產管理水平的提供,提升船舶企業的生產能力。
關鍵詞:車間布局優化;levy飛行;灰狼尋優算法;群智能優化算法
中圖分類號:TP18文獻標識碼:A文章編號:1672-9129(2020)14-0047-02
引言:平面布局優化能夠使制造企業生產過程物流更加順暢,充分利用人力資源,提高設備利用率,實現安全高效的生產活動,進一步提高市場競爭力。國內外學者在車間平面布局優化方面展開了大量的研究,其中分別從不同的角度和目標開展物流優化研究形成一些實用的傳統算法。
張屹等以物料搬運費用最小和車間設備占地面積利用率最大為目標,建立了車間設備布局多目標優化設計模型。李郝林等根據中小批量生產方式的特點 ,提出了車間內設備布局的優化設計方法。胡廣華對優化建模、模型求解算法,以及可視化輔助設計等方面分別進行了研究。李建榮等以典型加工工藝為主要參考,構建車間設備最優布局數學模型。但以上車間布局優化均基于傳統的優化算法,并且忽略船舶車間環境的復雜性和船舶生產存在調整等問題。
本文構建了基于車間生產力的車間布局優化模型,并且利用基于萊維飛行的灰狼優化算法(Grey Wolf Optimization Algorithm based on Levy flight,LGWO)尋求最優車間布局,最后基于實際船舶企業中主要生產車間進行驗證,驗證了算法的有效性。
1基于萊維飛行的灰狼優化算法
levy飛行作為一種全局搜索能力極強的飛行機制常用來與群智能優化算法進行混合來提高原算法的優化能力。在標準的灰狼優化算法(GWO)中,由于受到適應度值最高的狼的牽引和領導,在算法迭代運行的后半階段,局部尋優能力增強,使得算法在搜索時易陷入局部最優,喪失了種群的主動性,出現早熟收斂現象。目前已經有很多研究者們對灰狼優化算法做了很多改進,但均是增加擾動、異動等運算,此類方法雖然可以在某種程度上提升算法的收斂速度,但是難以解決GWO算法易于陷入局部極值的缺點。針對這些弊端,本文在原始的GWO算法中引入了levy飛行,提出了一種新的算法:基于萊維飛行的灰狼優化算法(Grey Wolf Optimization Algorithm based on Levy flight,LGWO)。LGWO算法在搜索的后半階段能有效地抑制其局部搜索能力,增加其全局搜索能力,既保留了標準 GWO 算法原來的優勢,又靈活地運用了levy飛行機制的優點。LGWO算法的基本思想是通過levy飛行機制使得灰狼群體中的頭狼能更加靈活移動,增加其搜索范圍,有利于開展全局搜索、提升算法的收斂精度,滿足深度精細搜索。
狼群搜索獵物的行為可以定義為如式(1)和式(2)所示。
其中Xpt為獵物在第t次迭代時的方位;Xt為灰狼個體在t次迭代式的方位;C是常數,表示擺動因子,由式(3)決定,A表示收斂因子,由式(4)決定。
素用pop()移除。pop的含義為:list.pop(obj=list[-1])
snakeBody.insert(0, list(snakePosition))
設定當蛇頭與食物相重合時,為食物被成功吃下,即蛇頭與食物的xy相等,寫出下列語句
if snakePosition[0] == targetposition[0] and snakePosition[1] == targetposition[1]:
如果吃到了食物,則蛇尾不用去除
eatenFlag = 0
如果沒有吃到食物,則需要去除蛇尾
else:
snakeBody.pop()
食物被吃掉后,會在新的地方重新生成新的食物
if eatenFlag == 0:
x = random.randrange(1, 32)
y = random.randrange(1, 24)
targetposition = [int(x * 20), int(y * 20)]
eatenFlag = 1
接下來再給背景板填充顏色,用一開始定義的黑色
playSurface.fill(blackColor)
然后定義蛇為白色
for position in snakeBody:
pygame.draw.rect(playSurface, whiteColor, Rect(position[0], position[1], 20, 20))
食物為紅色
pygame.draw.rect(playSurface, redColor, Rect(targetposition[0], targetposition[1], 20, 20))
pygame.display.flip()
如果撞墻了,也就是當x軸大于620或者小于0時,y軸大于460或小于0時,意為游戲結束,以此寫出下面的語句
if snakePosition[0] > 620 or snakePosition[0] < 0:
gameOver()
elif snakePosition[1] > 460 or snakePosition[1] < 0:
gameOver()
下面這句話用于控制蛇移動的速度,不同計算機有不同的速度,如果不寫這句話,蛇的移動速度將會很快。
fps.tick(2)
最后寫上這句代碼,代表如果這個循環等于循環本身,則繼續循環。如果沒有這句話,這個循環將不會成立。
ifname== 'main':
main()
5結語
Pygame非常利于新手開發游戲,本文討論了關于使用pygame來研發貪吃蛇小游戲的核心算法。
參考文獻:
[1]杜蘭 基于 Pygame 的壁球游戲的設計與開發 南京理工大學紫金學院計算機學院2018(000)022
[2]瞿蘇 基于python的飛機大戰游戲設計 揚州職業大學學報 2019(23)1