- 问题
零售商进货钢管都是19m长,现有客户购买50根4m长、20根6m长、15根8m长的钢管,问钢管如何切割?切割后的余料最少,能否写出模型.
- 问题分析
因为切割目标是切割后余料最少,通常假设一个合理的切割模式的余料不应该大于或等于客户需要的钢管的最小尺寸。在这种合理性假设下,一根19米长的钢管的合理切割模式如下表所示:
钢管合理切割模式
问题化为在满足客户需要的条件下,按照哪些种合理的模式,切割多少根原料钢管,切割后的余料最少。
- 模型建立
用x_i表示按照第i种模式(i=1 2…7)切割的原料钢管的根数,显然它们应当是非负整数。 以切割后剩余的总余料量最小为目标,则由上表可得决策目标为:
按照上表,约束条件如下:
- 模型求解
使用MATLAB求解,代码如下:
f =[3 1 3 3 1 1 3]; % 目标函数的系数矩阵
intcon = [1,2,3,4,5,6,7]; % 整数所在位置
A = [-4,-3,-2,-1,-1,0,0;0,-1,0,-2,-1,-3,0;0,0,-1,0,-1,0,-2]; % 不等式约束的变量系数矩阵
b =[-50;-20;-15]; % 不等式约束的资源数
lb = zeros(7,1); % 生成7×1的 0 矩阵
[x,fval]=intlinprog(f,intcon,A,b,[],[],lb,[]) % fval代表最优解处的函数值
运行结果如下:
所以,按照模式2切割12根钢管,按照模式5切割15根钢管切割后余料最少,共切割27根钢管,余料为27m。