线性规划——钢管下料问题的R实现
线性规划是运筹学的一个重要分支,广泛应用于军事作战、经济分析、经营管理和工程技术等方面。为合理地利用有限的人力、物力、财力等资源作出的最优决策,提供科学的依据。
一、钢管下料问题
零售商进货钢管都是19m长,现有客户购买50根4m长、20根6m长、15根8m长的钢管,问钢管如何切割?切割后的余料最少?
问题分析
因为切割目标是切割后余料最少,通常假设一个合理的切割模式的余料不应该大于或等于客户需要的钢管的最小尺寸。在这种合理性假设下,一根19米长的钢管的合理切割模式如下表所示:
4m钢管数 | 6m钢管数 | 8m钢管数 | 余料/m | |
---|---|---|---|---|
模式一 | 4 | 0 | 0 | 3 |
模式二 | 3 | 1 | 0 | 1 |
模式三 | 2 | 0 | 1 | 3 |
模式四 | 1 | 2 | 0 | 3 |
模式五 | 1 | 1 | 1 | 1 |
模式六 | 0 | 3 | 0 | 1 |
模式七 | 0 | 0 | 2 | 3 |
数学建模
我们用\(x_i\)表示第\(i\)种模式切割的颜料钢管的根数,模型如下:
二、求解R程序
library(lpSolve)
a1 =matrix( c(-4,-3,-2,-1,-1,0,0,0,-1,0,-2,-1,-3,0,0,0,-1,0,-1,0,-2),ncol=7,byrow=T)
f.obj <- c(3, 1, 3, 3, 1, 1, 3)
f.con=(-1)*a1
f.dir <- c('>=','>=','>=')
f.rhs <- c(50,20,15)
jie=lp('min', f.obj, f.con,f.dir,f.rhs,all.int=TRUE)
jie$solution
#[ 0 12 0 0 15 0 0]
jie$objval
#27
按照模式2切割12根钢管,按照模式5切割15根钢管切割后余料最少,共切割27根钢管。
三、钢管下料问题的拓展
3.1 二种切割模式的约束
零售商如果采用的不同切割模式太多,将会导致生产过程的复杂化,从而增加生产和管理成本,所以零售商规定采取的切割模式不超过2种。此外,该客户除了需要上述提到的三种钢管外,还需要10根5m的钢管,问应如何下料最节省?
【问题解析】
根据上面模式的切割情况,建立不同的线性规划模型,筛选出最合理的两种下料模式组合,即知按模式三和模式六下料余料损失最小。
3.2 总量最少的约束
节省的两种标准;原料钢管剩余总余量最小;所用原料钢管总数量最少。
目标函数:
求解得:目标1: \(x_2=12, x_5=15\) 共 27 根,余 \(27 \mathrm{~m}\);目标2:\(x_2=15, x_5=5,x_7=5\) 共 25 根,余 \(35 \mathrm{~m}\)。
按照目标1切割需要多切割1根4m、7根6m,共46m,正好等于2根原料(38m)再加8m。若余料没有用处,通常以总根数最小为目标更好。
3.3 钢管下料思考题
思考题:某单位需加工制作100套钢架,每套需用长度为1m、2.1m、2.9m的圆钢各一根。已知原料长6.9m,如何下料,使用的原料最省?(选自司守奎,孙玺菁所著数学建模算法与应用)
考虑到没有限制下料方式,可用穷举法列举所有可能的下料方案,在列举时,应当注意到,较优的下料方案余料小于1m,采用“由长到短,由无到有”的原则列举。
第1种 | 第2种 | 第3种 | 第4种 | 第5种 | 第6种 | 第7种 | |
---|---|---|---|---|---|---|---|
2.9m | 0 | 0 | 0 | 0 | 1 | 1 | 2 |
2.1m | 0 | 1 | 2 | 3 | 0 | 1 | 0 |
1m | 6 | 4 | 2 | 0 | 4 | 1 | 1 |
合计 | 6 | 6.1 | 6.2 | 6.3 | 6.9 | 6 | 6.8 |
余料 | 0.9 | 0.8 | 0.7 | 0.6 | 0 | 0.9 | 0.1 |