本篇介绍stats包中三个与数学规划相关的函数,分别如下:

  • optimize:解决非限制的单变量数学规划问题;

  • optim:解决非限制的多变量数学规划问题;

  • constrOptim:解决限制性的线性规划问题。

1 optimize()函数

该函数的语法结构如下:

optimize(f, interval, ...,lower = min(interval),upper = max(interval),maximum = FALSE,tol = .Machine$double.eps^0.25)
  • f:目标函数;其中第一个参数为优化参数;

  • interval:变量的取值区间;

  • ...:目标函数f的其他参数;

  • lower、upper:取值区间的下限和上限;

  • maximum:优化方向;逻辑变量,TRUE表示求最大值,FALSE表示求最小值(默认项);

  • tol:误差允许范围。

例如,对于函数,其中。

  • (1),求的最小值

fun1 = function(x,a) (x-a)^2
optimize(fun1, interval = c(-1,1),a = -2)## $minimum
## [1] -0.999959
##
## $objective
## [1] 1.000082
  • 优化结果表明:当取-0.999959时,目标函数取得最小值1.000082(存在误差)。

  • (2) ,求的最大值

optimize(fun1, c(-1,1),a = 0.7,maximum = T)## $maximum
## [1] -0.999959
##
## $objective
## [1] 2.889861

2 optim()函数

该函数的语法结构如下:

optim(par, fn, gr = NULL, ...,method = c("Nelder-Mead", "BFGS", "CG","L-BFGS-B", "SANN", "Brent"),lower = -Inf, upper = Inf,control = list(), hessian = FALSE)
  • par:优化参数的初始值;

  • fn:目标函数,其中第一个参数为优化参数,一般为向量形式;

  • optim()函数默认求最小值,若要求最大值,需将control参数的元素fnscale定义为负数。

例如,,其中、为优化参数,为已知参数。在定义目标函数时,可以使用c(x,y)作为目标函数的第一个参数。

fun2 = function(x0,a) {x = x0[1]; y = x0[2](x^2 - y)^2 + (x - a)^2
}
  • (1)当时,求函数的最小值

optim(c(0.5,0.5), fn = fun2,a = 1)## $par
## [1] 0.9999655 1.0000206
##
## $value
## [1] 9.223486e-09
##
## $counts
## function gradient
##       65       NA
##
## $convergence
## [1] 0
##
## $message
## NULL
  • (2)当时,求函数在,内的最大值

optim(c(0.5,0.5), fn = fun2,lower = c(-0.5, 0.2), upper = 0.5,a = 1, control = list(fnscale = -1))## $par
## [1] -0.5  0.5
##
## $value
## [1] 2.3125
##
## $counts
## function gradient
##        2        2
##
## $convergence
## [1] 0
##
## $message
## [1] "CONVERGENCE: NORM OF PROJECTED GRADIENT <= PGTOL"

3 constrOptim()函数

该函数的语法结构如下:

constrOptim(theta, f, grad,ui, ci, mu = 1e-04,control = list(),method = if(is.null(grad)) "Nelder-Mead" else "BFGS",outer.iterations = 100,outer.eps = 1e-05, ...,hessian = FALSE)
  • theta:优化参数的起始值;

  • f:目标函数;

  • ui、ci:限制条件;见案例。

例如,有如下线性规划问题:

先将限制条件统一改写成大于号的形式,如改写成,则ui即为大于号左侧的系数矩阵,ci为大于号右侧的常数向量。

fun3 <- function(x) {x1 = x[1]; x2 = x[2]2*x1+3*x2
}
constrOptim(theta = c(1,1),f = fun3, grad = NULL,ui = rbind(c(-1,-2), c(-4,0),c(0,-4), c(1,0), c(0,1)),ci = c(-8, -16, -12, 0, 0),control = list(fnscale = -1))## $par
## [1] 3.999998 2.000001
##
## $value
## [1] 14
##
## $counts
## function gradient
##      298       NA
##
## $convergence
## [1] 0
##
## $message
## NULL
##
## $outer.iterations
## [1] 3
##
## $barrier.value
## [1] 0.003847654

stats | 介绍三个与数学规划函数相关推荐

  1. Horseshoe prior的R package介绍:HS.normal.mean函数

    Horseshoe prior的R package介绍:HS.normal.mean函数 最近做的一些事情需要和Horseshoe prior对比,所以一直在看Horseshoe的一些资料.上周做了一 ...

  2. OpenCV学习笔记(三十六)——Kalman滤波做运动目标跟踪 OpenCV学习笔记(三十七)——实用函数、系统函数、宏core OpenCV学习笔记(三十八)——显示当前FPS OpenC

    OpenCV学习笔记(三十六)--Kalman滤波做运动目标跟踪 kalman滤波大家都很熟悉,其基本思想就是先不考虑输入信号和观测噪声的影响,得到状态变量和输出信号的估计值,再用输出信号的估计误差加 ...

  3. 介绍了如何取成员函数的地址以及调用该地址

     摘要:介绍了如何取成员函数的地址以及调用该地址. 关键字:C++成员函数 this指针 调用约定 一.成员函数指针的用法 在C++中,成员函数的指针是个比较特殊的东西.对普通的函数指针来说,可以 ...

  4. {Django基础九之中间件} 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证...

    Django基础九之中间件 本节目录 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证 六 xxx 七 xxx 八 xxx 一 前戏 我们在前面的课程中已经学会了 ...

  5. C语言实现OOP——轻量级的面向对象 C 语言编程框架 LW_OOPC 介绍(三)

    文章目录 C 语言编程框架 LW_OOPC 介绍(三) 方案的可扩展性如何? LW_OOPC最佳实践 LW_OOPC的优点: LW_OOPC的缺点: 总结: 幕后花絮: 参考资料: C 语言编程框架 ...

  6. NoSQL介绍(三)

    NoSQL介绍(三) Redis数据类型-string string为最简单的类型,与Memcached一样的类型,一个key对应一个value,其支持的操作与Memcached的操作类似,它的功能更 ...

  7. 三种睡眠时间函数的区别:linux 的sleep()、usleep()、nanosleep()函数

    三种睡眠时间函数的区别:linux 的sleep().usleep().nanosleep()函数 (1)sleep()-------以秒为单位 unsigned int sleep(unsigned ...

  8. 云桌面VOI计算存储在服务器端,介绍三种云桌面:VDI、IDV、VOI

    介绍三种云桌面:VDI.IDV.VOI 云桌面应场景而变,没有一种云桌面可以适用所有场景.市场上的云桌面一般分为VDI.IDV和VOI三种架构.下面我们就来看下,它们各有哪些优劣,又分别适用哪些场景. ...

  9. python中len用法_简单介绍Python中的len()函数的使用

    简单介绍Python中的len()函数的使用 函数:len() 1:作用:返回字符串.列表.字典.元组等长度 2:语法:len(str) 3:参数:str:要计算的字符串.列表.字典.元组等 4:返回 ...

最新文章

  1. 启动targetcli时遭遇ImportError: cannot import name ALUATargetPortGroup故障
  2. Google Chrome —— 离线安装/安装包下载解决方案
  3. 使用线程池有以下几个目的
  4. java weblogic反序列化_Weblogic JAVA反序列化漏洞攻防搭建(3)
  5. 嵌入式电路设计(工具准备)
  6. Vuforia开发完全指南
  7. 重定向程序中的系统输入输出
  8. Java的throws Exception
  9. ppt变成了图片不能编辑文字怎么办_解决PPT字体缺失这个问题,这个技巧你一定要掌握...
  10. python朋友圈头像_Python之微信-微信好友头像合成
  11. 【知识图谱】OpenKG 发布多个新冠病毒相关开放知识图谱
  12. 判断矩形相似C语言,C++判断矩形相交的方法
  13. 如何认识宇宙场存在的六种基本作用力
  14. 如何修改wamp5的端口号,默认页。
  15. 微大夫感冒舒缓仪亮相“2018健康陕西发展大会”回顾
  16. Python eval() 函数看这里就够了
  17. 行列式的3种计算方法技巧和一点注意
  18. JAVA转义字符详解
  19. d3d纹理过滤器配置
  20. 其实性格决定命运,细节决定成败,知识改变命运,学习成就未来,观念决定行动,思维决定出路,态度决定一切

热门文章

  1. Linux操作系统各版本ISO镜像下载(包括oracle linux\redhat\centos\u
  2. Java基础学习总结(79)——Java本地接口JNI详解
  3. anaconda哪个版本是 python3.6_windows10(64位)Anaconda3+Python3.6搭建Tensorflow(cpu版本)及keras...
  4. codesmith 模板 html5,js-template-art【二】语法(示例代码)
  5. 兰州中考计算机考试,宜昌、兰州发布中考新政新消息:增加口语考试,采取人机对话形式...
  6. GitChat · 前端 | Vue 组件库实践和设计
  7. tornado异步客户端(Future)
  8. Hadoop入门进阶步步高(四)-测试Hadoop
  9. cratedb导入json文件
  10. VueJS样式绑定:v-bind