後車箱擺放計算

Friday, January 18, 2019

11:56 AM

問題:

車箱擺放大小不同行李箱的狀況(:XXL, XL, L, M, S)

 

 

 

思考:

1.     擬人法 : 模擬人的擺法,長邊先擺,靠邊擺,大的箱子先擺…

2.     貪心法: 優先擺大箱子(事實上擺小箱子可得最大填充率),箱子最長設為X方向,其次Y,其次Z

3.     可放置點: 放置點上測試箱子的每個方向是否可放入(考慮放入最省空間位置由基線控制?)

4.     靠邊置放

5.     砌磚法: 强制X方向擺完才能擺Y方向,整個'平面'擺完才能昇高Z擺放

6.     模擬退火法: 最佳化(目前未考慮)

7.     改變順序: XXL->XL->L… => L->XXL->S…

8.     改變方向: L.W.H -> W.H.L…

 

程式:

Gui_BP.py

DrawBox.py

Packing3D.py

MyMath.py

 

說明:

1.     可放置點:

如何增加/減少點

 

 

 

        Z->X->Y 優先

       

 

2.     箱子所有可能擺放方向(考濾24)

def set_box_dir(self,i): # 箱子不同擺放方向

if i==0:

self.r=[self.l,self.w,self.h]

if i==1:

self.r=[self.l,self.h,self.w]

if i==2:

self.r=[self.w,self.l,self.h]

if i==3:

self.r=[self.w,self.h,self.l]

if i==4:

self.r=[self.h,self.l,self.w]

if i==5:

self.r=[self.h,self.w,self.l]

if i==6:

self.r=[self.l,-self.w,self.h]

if i==7:

self.r=[self.l,-self.h,self.w]

if i==8:

self.r=[self.w,-self.l,self.h]

if i==9:

self.r=[self.w,-self.h,self.l]

if i==10:

self.r=[self.h,-self.l,self.w]

if i==11:

self.r=[self.h,-self.w,self.l]

if i==12:

self.r=[-self.l,self.w,self.h]

if i==13:

self.r=[-self.l,self.h,self.w]

if i==14:

self.r=[-self.w,self.l,self.h]

if i==15:

self.r=[-self.w,self.h,self.l]

if i==16:

self.r=[-self.h,self.l,self.w]

if i==17:

self.r=[-self.h,self.w,self.l]

if i==18:

self.r=[-self.l,-self.w,self.h]

if i==19:

self.r=[-self.l,-self.h,self.w]

if i==20:

self.r=[-self.w,-self.l,self.h]

if i==21:

self.r=[-self.w,-self.h,self.l]

if i==22:

self.r=[-self.h,-self.l,self.w]

if i==23:

self.r=[-self.h,-self.w,self.l]

 

3.     基線: 確保箱子->X->Y->Z放置

 

 

4.     干涉檢查:

排除長方體所有不相交的狀況後,其他即為干涉