首先要安装线性规划扩展包
install.packages("lpSolve")
例1:
某工厂甲、乙两种产品,每件甲产品要耗钢材2kg、煤2kg、产值为120元;每件乙产品要耗钢材3kg,煤1kg,产值为100元。现钢厂有钢材600kg,煤400kg,试确定甲、乙两种产品各生产多少件,才能使该厂的总产值最大?
解:
# 优化方向: # maximize # 目标函数: # f(X1,X2)=120X1+100X2 # 约束条件: # 2X1+3X2<=600 # X1+X2<=400 #引用lpSolve library (lpSolve) #求解 f.obj <- c (120, 100) f.con <- matrix ( c (2, 3, 1, 1), nrow = 2, byrow = TRUE ) f.dir <- c ( "<=" , "<=" ) f.rhs <- c (600, 400) lp.result <- lp ( "max" , f.obj, f.con, f.dir, f.rhs) #输出结果 lp.result #Success: the objective function is 36000 #输出解 lp.result$solution #[1] 300 0
例2:
某工厂要做100套钢架,每套用长为2.9m,2.1m,1.5m的圆钢各一根。已知原料每根长7.4m,问:应如何下料,可使所用原料最省?(可选方案如下)
可选方案 | 方案1 | 方案2 | 方案3 | 方案4 | 方案5 |
2.9m | 1 | 2 | 0 | 1 | 0 |
2.1m | 0 | 0 | 2 | 2 | 1 |
1.5m | 3 | 1 | 2 | 0 | 3 |
合计 | 7.4 | 7.3 | 7.2 | 7.1 | 6.6 |
剩余料头 | 0 | 0.1 | 0.2 | 0.3 | 0.8 |
解:
# 优化方向: # minimize # 目标函数: # f(X1,X2,X3,X4,X5)=0X1+0.1X2+0.2X3+0.3X4+0.8X5 # 约束条件: # X1+2X2 + 0X3 + X4 + 0X5>=100 # 0X1+0X2 + 2X3 + 2X4 + 1X5>=100 # 3X1+X2 + 2X3 + 0X4 + 3X5>=100 #引用lpSolve library (lpSolve) #求解 f.obj <- c (0, 0.1, 0.2, 0.3, 0.8) f.con <- matrix ( c (1, 2, 0, 1, 0, 0, 0, 2, 2, 1, 3, 1, 2, 0, 3), nrow = 3, byrow = TRUE ) f.dir <- c ( ">=", ">=", ">=" ) f.rhs <- c (100, 100, 100) lp.result <- lp ( "min" , f.obj, f.con, f.dir, f.rhs) #输出结果 lp.result #Success: the objective function is 10 #输出解 lp.result$solution #[1] 100 0 50 0 0