Excel,R求解最优解问题

1. Excel最优化

本人使用的是2016版Excel,一开始是没有Solver这个求解最优解的包的按钮的。MS Excel在装载时会下载该包,但是不予激活。所以如果在“数据”这一栏没有找到“Solver/规划求解”按钮,需要自行激活,方法如下:

(1)点开“选项”按钮,选中“加载项”,点击“转到”。

Excel,R求解最优解问题_第1张图片

(2)“跳转”后会显示如下弹窗,选中“分析工具库”和“规划求解加载项”,点击“确定”。

Excel,R求解最优解问题_第2张图片

(3)Excel工具栏就会多出右下方“分析”这一栏

Excel,R求解最优解问题_第3张图片

然后我们就可以使用Excel求解最优化问题啦~

假设李皮皮要进行一个增重计划,以下为约束条件和决策变量信息:

变量:每个月分别吃烤肉的次数x1和吃火锅的次数x2(B3和B4),目前设定为1次和2次;x1不能超过5次,x2不能超过10次(会破产)。

每次吃烤肉会消耗掉300g肉;每次吃火锅会消耗掉400g肉;一个月总耗肉量不能超过5000g;

李皮皮每吃一次烤肉增重500g,每吃一次火锅增重600g;

那么李皮皮一个月依靠吃火锅和烤肉的净增重就是:y=500x1+600x2;

目标就是在约束条件下,求解y最大值。

针对这个数学问题,我们做了如下输入。将目标函数公式所在处选中,然后点击“规划求解参数”,设定条件,求解。

Excel,R求解最优解问题_第4张图片

得到的结果可以看出,在给定条件下,我们得到的最优解为每个月吃3次烤肉,10次火锅,就能长最大胖7500g。这么一算我就想去吃饭了。

Excel,R求解最优解问题_第5张图片

 

2. R最优化

同样的问题,我们用R再来一次:

看了下好像包不少,这里使用Rsymphony包里的Rsymphony_solve_LP()函数。

https://www.rdocumentation.org/packages/Rglpk/versions/0.6-3/topics/Rglpk_solve_LP

整理一下上述应用题的公式,有:

Excel,R求解最优解问题_第6张图片

代码如下:

//导入包
require(Rsymphony)
//目标函数
obj <- c(500,600)
//各个值
mat <- matrix(c(1,1,0,0,300,0,0,1,1,400),nrow = 5)
//显示矩阵
mat
     [,1] [,2]
[1,]    1    0
[2,]    1    0
[3,]    0    1
[4,]    0    1
[5,]  300  400
//确定约束条件符号
> dir <- c("<=",">=","<=",">=","<=")
//约束条件符号右边值
> rhs <- c(5,0,10,0,5000)
//求最大解
> max <- TRUE
//两个变量类型均为int
> types <- c("I","I")
//求解
> Rsymphony_solve_LP(obj,mat,dir,rhs,types = types, max = max)
$solution
[1]  3 10 //解分别为3和10

$objval
[1] 7500 //最优解为7500

$status
TM_OPTIMAL_SOLUTION_FOUND 
                        0 //0代表有最优解,1代表无

 

你可能感兴趣的:(data,analysis)