Matlab 窮舉法應用 切割問題 (筆記)
阿新 • • 發佈:2019-01-05
窮舉法應用例項
(切割問題)
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種組合排序,使得沒有遺漏