Excel,R求解最优解问题

1. Excel最优化

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

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

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

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

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

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

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

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

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

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

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

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

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

 

2. R最优化

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

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

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

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

\\max(500x_{1} + 600x_{2}) \\ x_{1}\leq 5\\ x_{1}\geq 0\\x_{2}\leq 10\\ x_{2}\geq 0\\300x1+400x2\leq 5000\\

代码如下:

//导入包
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代表无

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值