1. 程式人生 > >Matlab 窮舉法應用 切割問題 (筆記)

Matlab 窮舉法應用 切割問題 (筆記)

窮舉法應用例項

(切割問題)

matble 將一根長為350cm的條材切割成 72cm 55 cm 43 cm 的三種型號,有多種切割方式
求每種型號至少有一根,請找出餘料最少的切割方式?

問題分析:

對長度為X的成品,條材最多能切割【350]根,
列出所有組合:

for k1=1:350/72
    for k2=1:350/55
        for k3=1:350/43

問題: 1、演算法效率低,組合k1=k2=k3=1 ,但餘料任然能切割

     2、沒有滿足要求要求迴圈結束後,餘料不足以切割任何一個成品

完整程式碼

tot_len=350;len1=72;len2=55
;len3=43; mat=[]; % 儲存所有切割組合 n1=tot_len/len1; for k1=1:n1 n2=fix((tot_len-k1*len1)/len2); % 切完後,最多能切多少根55cmd for k2=1:n2 k3=fix((tot_len-k1*len1-k2*len2)/len3); if k3>0 %要求每種成品至少有1根 remain=tot_len-k1*len1-k2*len2-k3*len3; %不能再切割的餘料長 mat=[mat;k1,k2,k3,remain]
; end end end [min_remain,index]=min(mat(:,4)); %尋找切割組合中餘料最少的 qiege_solu=[len1,len2,len3;mat(index,1:3)],min_remain

思考

1) 為何從最長的成品開始切? 如果交換次序會怎樣?
2) 如果要求成品至少切一根,其他不限,如何調整程式?

變體:

已有350的條材

一更,現在收到10個成品切割要求如下:
cm: 72 55 43 87 91 70 67 90

請從中選出5個成品,每個成品切割一個,要求條材足夠切割且餘料最少?

問題分析

從10個選5個,有152種組合

關鍵
給這152種組合排序,使得沒有遺漏

-