最优化读书笔记R(二)
线性规划
简单的线性规划(目标函数和约束都是线性函数)
R中常用lpSolve、Rglpk包来解决。lpSolve包的核心函数的lp(),lp.assign,lp.transport()依次解决简单线性规划、分配问题、生产计划和交通运输问题。用法:
简单线性规划
lp (direction = "min", objective.in, mat,dir,rhs, int.vec,binary.vec, all.int=FALSE, all.bin=FALSE)
# mat为系数矩阵 dir 约束的方向 rhs 约束的右端系数
#若为整数规划,可通过int.vec=c(i)制定序号来设定,若全是可通过all.int=TRUE实现。若为0-1规划,则可以通过all.bin=TRUE来实现。
Rglpk包的函数Rglpk_solve_LP()也可以实现上述简单线性规划。用法:
Rglpk_solve_LP(obj, mat, dir, rhs, types = NULL, max = FALSE,control = list(), ...)
#max为最大值的逻辑参数
#type 变量类型 B——0-1变量 I——正整数 C 正实数
分配问题
分配问题,此处以匈牙利问题为例,说明其在R中的实现
- lp.assign()的用法
lp.assign (mat, "min", presolve = 0, compute.sens = 0)#mat为系数矩阵#返回的是目标值,可以通过$solution来查看具体的方案
- clue包下的solve_LSAP()
solve_LSAP(mat, maximum = FALSE)
#其返回的是具体的方案,若想看目标值,可以通过以下代码实现,
y<-solve_LSAP(mat)
sum(mat[cbinds(seq_along(y),y)]
例:有一份中文说明书,需要译成日德俄英四种文字,分别有四个人来完成。每个翻译所需时间不同。问怎样分配任务可以使总的时间最小。
Mat<-matrix(c(6,7,11,2,4,5,9,8,3,1,10,4,5,9,8,2),ncol=4,byrow=TRUE)
lp.assign(Mat)#结果#Success: the objective function is 15
lp.assign(Mat)$solution#结果:[,1] [,2] [,3] [,4]
[1,] 0 0 0 1
[2,] 1 0 0 0
[3,] 0 1 0 0
[4,] 0 0 1 0#使用solve_LSAP解决问题
library(clue)
y<-solve_LSAP(Mat)
sum(Mat[cbinds(seq_along(y),y)])#结果:Optimal assignment:1 => 4, 2 => 1, 3 => 2, 4 => 3
线性约束的非线性规划问题
R中内置函数constrOptim函数专门求解约束的非线性规划。
constrOptim(theta, f, grad, ui, ci, mu = 1e-04, control = list(),method = if(is.null(grad)) "Nelder-Mead" else "BFGS", outer.eps = 1e-05, ..., hessian = FALSE)
#theta 为初始值 ui 系数矩阵 ci=rhs
#所有不等式默认是“》=”
如香蕉函数
**f(x1,x2)=(1-x1)^2+100*(x2-x1^2)^2**
s.t:
**-3x1-4x2>=12**
**-x1+2x2>=-2**
**x1>=0;x2>=0**
代码:
constrOptim(theta=c(2,1),obj.f,gr.f,Mat,rhs)
非线性约束的非线性规划
R中通过alabama包,Rsolnp(R_3.4.2上不能使用)。以下简单介绍alabama包,其核心函数为constrOptim.nl(),用法:
constrOptim.nl(par, fn, gr = NULL,hin = NULL,...)
#hin为不等式约束,所有的约束需要转化为“》=”
例:
min z=(1-x1^2)+100(x2-x1^2)^2
s.t: x1^2+x^2<=4
x1/x2>=2
library(alabama)
hin.f<-function(x){x1<-x[1]x2<-x[2]c(-x1^2-x2^2+4,x1/x2-2)
}
constrOptim.nl(par=c(1,0.3),obj.f,gr.f,hin.f)
整数约束的非线性规
可以通过优化算法,如:遗传算法,蚁群等。
参考文献:
数据科学中的R语言 李舰 肖凯(2015.3)
最优化读书笔记R(二)相关推荐
- 最优化读书笔记R(一)
人生是场穷游,偶尔需要暴走 R读书笔记(一) 无约束的线性规划 实质可以转化为求根问题 1.求单根时: uniroot(f,interval) 2.求多项式的根 f(x)=a0+a1*x....+an ...
- C++prime读书笔记(二)C++标准库:IO、容器、泛型算法、动态内存
layout: post title: C++prime读书笔记(二)C++标准库:IO.容器.泛型算法.动态内存 description: C++prime读书笔记(二)C++标准库:IO.容器.泛 ...
- 计算复杂性读书笔记(二): 论怎么把一个证明写得有意思
2019独角兽企业重金招聘Python工程师标准>>> 计算复杂性读书笔记(二): 论怎么把一个证明写得有意思 比特猪 quanzz1129@gmail.com 首先是版权声明,版权 ...
- Linux设备驱动程式之读书笔记(二) [转]
http://www.sudu.cn/info/html/edu/code/20070102/286543.html setlevel.c 非常实用 google 查找 #define _syscal ...
- 重构(Refactoring)技巧读书笔记 之二
重构(Refactoring)技巧读书笔记 之二<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:of ...
- 深入分析Java Web技术内幕读书笔记(二)浅析DNS域名解析过程
上一篇文章<浅析Web请求过程>讲述的是如何发起HTTP请求,对于请求发起过程中很重要的一个步骤--DNS解析过程的描述是一带而过,本篇文章将跟着DNS解析过程来分析域名是如何解析的. 一 ...
- cindy POSA2读书笔记(二)
POSA2读书笔记(二) 呵呵,距离第一篇已经过了半年了--这本书其实翻完已经很久了,但是实践中没有使用到的东西总是一知半解,写出来会误导大众,所以还是不写的好. 今天在为Cindy 3.0a1中并发 ...
- Effective Java读书笔记(二)
Effective Java 读书笔记 (二) 创建和销毁对象 遇到多个构造器参数时要考虑使用构建器 创建和销毁对象 何时以及如何创建对象? 何时以及如何避免创建对象? 如何确保它们能够适时地销毁? ...
- 《黑客与画家》读书笔记(二)
<黑客与画家>读书笔记(二) 软件的bug 在自己刚刚写好的代码中,找出bug往往会比较快.有时,你只要看到出错提示,就知道问题出在哪里,甚至都不用看源码,因为潜意识中你已经在担心那个地方 ...
最新文章
- Windows 95被做成了App,可玩扫雷和纸牌
- android 之多线程详解
- hdu 5055(贪心)
- jupyter lab文档位置默认system_九大神招,让Python里数据分析神器Jupyter,完美升华...
- Linux下boost库的安装
- 测试需要的的linux命令,(面试必备)软件测试人员必备Linux命令操做(初级基础)...
- SQL中STR()函数功能
- linux下如何添加一个用户并且让用户获得root权限
- 计算机思维导论在线测试题库,计算机导论题库有答案.docx
- SSCOM的模拟连接测试及服务器连接
- 强连通分量(Tarjan算法)
- 调查问卷或量表数据的一般处理与SPSS统计分析
- 宇视NVR设备接入EasyCVR平台,离线后无法上线该如何解决?
- 制作本地视频网站 苹果cms 超详细
- 黑群晖二合一安装不了套件_家庭NAS部署指南(二)——如何自己动手安装一台黑群晖主机...
- 相关性评估:皮尔逊相关系数,R2
- 用Snoop工具来探测WPF窗体的构成
- CSS3:3D环绕实现
- 微信公众号第三方登录,简单易懂
- linux网站如何添加swf支持,linux上查看swf文件.靠谱
热门文章
- 抖音电商“双11”:品质国货和地方农特产成亮点
- 首款Android 16旗舰敲定!谷歌Pixel 6系列将获5年Android更新
- 特斯拉三季度生产23.8万辆 交付超24万辆
- 马斯克终于承认售出比特币:卖了10%
- “万物互联”的时代来了!鸿蒙系统OS 2.0重磅发布:“朋友圈”逐渐扩大
- 让IT人早点下班?高效的vPro平台帮你忙
- “五一”档总票房破13亿 《你的婚礼》高居榜首
- 五一档票房超8.8亿元!张艺谋新片仅第二
- MSCI发布最新ESG评级 三七互娱位居A股游戏行业最高
- 中国移动咪咕公司:打造五新体验 做5G时代内容的聚合者与生产者