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种组合排序,使得没有遗漏

-

你可能感兴趣的:(MATLAB,数学实验)