线性规划—钢管下料问题及MATLAB求解

  • 问题

零售商进货钢管都是19m长,现有客户购买50根4m长、20根6m长、15根8m长的钢管,问钢管如何切割?切割后的余料最少,能否写出模型.

  • 问题分析

因为切割目标是切割后余料最少,通常假设一个合理的切割模式的余料不应该大于或等于客户需要的钢管的最小尺寸。在这种合理性假设下,一根19米长的钢管的合理切割模式如下表所示:
钢管合理切割模式
在这里插入图片描述
问题化为在满足客户需要的条件下,按照哪些种合理的模式,切割多少根原料钢管,切割后的余料最少。

  • 模型建立

用x_i表示按照第i种模式(i=1 2…7)切割的原料钢管的根数,显然它们应当是非负整数。 以切割后剩余的总余料量最小为目标,则由上表可得决策目标为:
min z_1=3x_1+x_2+〖3x〗_3+3x_4+x_5+x_6+3x_7

按照上表,约束条件如下:
x_i为非负整数4x_1+〖3x〗_2+〖2x〗_3+x_4+x_5≥50x_2+〖2x〗_4+x_5+〖3x〗_6≥20x_3+x_5+2x_7≥15

  • 模型求解

使用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。

长方体钢材下料问题可以用线性规划进行求解,以下是一个简单的例子: 假设我们有一根长方体钢材,需要将其下料为若干个长度不同的零件,使得原材料的浪费最小化。 我们可以将原材料划分为若干个长度相同的小段,每个小段可以被下料为一个或多个零件。我们用变量 $x_i$ 表示第 $i$ 个小段被下料为零件的数量,$c_i$ 表示第 $i$ 个小段的长度,$w_i$ 表示第 $i$ 个小段被下料后的浪费。目标是最小化浪费,即 $$\min \sum_{i=1}^n w_i x_i$$ 同时需要满足约束条件: 1. 所有零件的长度之和不能超过原材料的长度,即 $$\sum_{i=1}^n c_i x_i \leq L$$ 其中 $L$ 表示原材料的长度。 2. 每个下料的小段被下料为的零件数量不能超过该小段的数量,即 $$x_i \leq m_i$$ 其中 $m_i$ 表示第 $i$ 个小段的数量。 3. 零件数量必须是非负整数,即 $$x_i \geq 0, \quad i=1,2,\ldots,n$$ 这是一个标准的线性规划问题,可以用 Matlab 中的 linprog 函数求解。具体代码如下: ```matlab c = [w; zeros(n, 1)]; % 目标函数系数 A = [c', zeros(1, n); % 长度约束 eye(n), -diag(m)]; % 数量约束 b = [L; zeros(n, 1)]; % 右侧约束向量 lb = zeros(n, 1); % 变量下界 ub = m; % 变量上界 [x, fval, exitflag] = linprog(c, A, b, [], [], lb, ub); ``` 其中,变量 x 是一个长度为 n 的向量,表示每个小段被下料为零件的数量。fval 是目标函数的最小值,即原材料的浪费量。exitflag 是线性规划求解器的返回值,表示求解的状态,如果 exitflag 等于 1,表示求解成功。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值