最优化读书笔记R(一)

来源:互联网 发布:怎么申请阿里云学生机 编辑:程序博客网 时间:2024/06/05 08:47

人生是场穷游,偶尔需要暴走


*# R读书笔记(一)*


无约束的线性规划

实质可以转化为求根问题

1.求单根时:

uniroot(f,interval)

2.求多项式的根

**f(x)=a0+a1*x....+an*x^n**
polyroot(y)#y=(an,...a1,a0)

3.一般方程

library(rootSolve)uniroot.all(f, interval, lower = min(interval), upper = max(interval))# 可以求出指定区间的所有根

4.方程组

multiroot(f, start, ...)#start 初始值

例:

x1^2+x2^2-4=0
x1^2+x2^2-1=0
library(rootSolve)f<-function(x){    x1<-x[1]    x2<-x[2]    c(x1^2+x^2-4,x1^2-x2^2+1)}multiroot(f,start=c(1,1)) 结果: $root[1] 1.224745 1.581139$f.root[1]  4.357128e-10 -4.362963e-10$iter[1] 5$estim.precis[1] 4.360046e-10

无约束的线性规划

优化算法的思路:此类问题一般都难以直接求解,可以通过数值计算的方法来求极值,最常见的算法就是设计迭代。一般选定某个初始点,沿着某个方向出发,然后确定新的点,再次确定搜索方向,以此循环。如果目标函数的值不断下降,称其为下降算法;如果目标函数的值会收敛,就说明会找到极值。

1.一维搜索

R中自带的函数optimize。例如:
f<-function(x,y,z) (x-y+z)^2optimize(f,c(-1,1),tol=0.0001,y=1,z=1)# fx轴(-1,1)上极值的搜索#tol 代表容忍度,是搜索停止的标记

注:对于凸函数来说,局部极小值就是全局极小值,这样的情况并不多,通常都是非凸函数,若初始点附近的极值不是全局极小值,搜索就会变得很困难。

R中的optim可以通过接纳梯度函数来优化求解过程。

关于梯度函数求解可以借助(Deriv包来实现)。一下以香蕉函数为例,做出说明。

**f(x1,x2)=(1-x1)^2+100*(x2-x1^2)^2**
library(Deriv)f<-expression((1-x1)^2+100*(x2-x1^2)^2)**Simplify(D(f,"x1"))Simplify(D(f,"x2"))# 构造梯度函数gr.f<-function(x){    x1<-x[1]    x2<-x[2]    c(-(2 * (1 - x1) + 400 * (x1 * (x2 - x1^2))),200 * (x2 - x1^2))}#构造目标函数gr.f<-function(x){    x1<-x[1]    x2<-x[2]   (1-x1)^2+100*(x2-x1^2)^2}optim(par(0,3),obj.f,gr.f)# optim 求出极值,par为初始值

2.多维搜索

optim的用法

optim(par, fn, gr = NULL, ...,      method = c("Nelder-Mead", "BFGS", "CG", "L-BFGS-B", "SANN", "Brent"), lower = ,upper = Inf,      control = list(), hessian = FALSE)
#par 为初始值,fn为目标函数,gr为梯度函数,method 为优化方法;lower/upper为method为L-BFFG_B的约束;
#control 参数为list(maxit——最大迭代数,abtol/retol);hession 表示是否返回海塞矩阵,默认是FALSE
method方法依次是:
  • 单纯型法:没有用到许多函数特征(比如梯度)比较稳健,效率也不低,常被当作默认算法
  • 拟牛顿法(变尺度法)改进的牛顿法容易初始点的影响,又不需每一步精确地计算海塞矩阵及其逆矩阵,
  • L_BFGS_B是对变尺度法的优化
  • SANN是一种模拟退火算法(概率算法):可以针对不可微函数,找出最优解
  • Brent是算法是一种简单的以为搜索方法
convergence代码的含义:
  • 0:表示成功的执行了上述优化任务
  • 1:表示达到了迭代上限而退出
  • 10:表示退化(单纯性无法移动)
  • 51:52:专指L_BFGS_B出现的警告信息/错误信息

原创粉丝点击