R语言-条件约束最优化_非线性规划求解(Rdonlp2)

网络上关于R语言的条件约束最优化求解的例子不多,而且较为杂乱无章。自己总结一篇文章,方便自己以后查阅,回顾。主要通过一个案例说明,如何在R中如何描述目标问题。使用的包是 Rdonlp2。

  • 有如下的条件约束最优化问题:
    min(z=x2siny+y2cosx)100<x<100100<y<1002x+y13xy3xy=2sin(x)cos(y)3

R语言对问题进行描述

  • 对求解问题进行描述
    min(z=x2siny+y2cosx)
fn = function(x){
   x[1]^2*sin(x[2])+x[2]^2*cos(x[1])
}
  • 对x,y值域描述
    {100<x<100100<y<100
## par.l和par.u分别为约束的左边和右边
par.l = c(-100,-100); par.u = c(100,100) ## 目标值域
  • 对线性约束进行描述
    {2x+y13xy3
A = matrix(c(1,1,3,-1),2,byrow=TRUE) ##线性约束系数
lin.l = c(2,1); lin.u = c(+Inf,3)  ## 分别为约束的左边和右边
  • 对非线性约束进行描述
    {xy=2sin(x)cos(y)3
nlcon1 = function(x){ 
  x[1]*x[2]  ##公式 x*y
} 
nlcon2 = function(x){
  sin(x[1])*cos(x[2])  ##公式 sin(x)*cos(y)
}
## 两个非线性约束的左右边
## x*y=2 等价于 2<=x*y<=2
nlin.l = c(2,-Inf) ; nlin.u = c(2,0.6)  

R语言条件约束最优化求解

将参数输入donlp2函数中进行求解

## 输入参数第一行: x,y值域及目标函数
## 输入参数第二行: 线性约束条件
## 输入参数第三,四行: 非线性约束条件
ret = donlp2(p, fn, par.u=par.u, par.l=par.l,
        A, lin.l=lin.l,lin.u=lin.u,  
             nlin=list(nlcon1,nlcon2), 
             nlin.u=nlin.u, nlin.l=nlin.l)
## 输出结果
ret$par
#  1.403076 1.425440

完整代码

付Rdonlp2下载地址,有可能在R中不能直接使用 install.package()直接下载安装。
https://r-forge.r-project.org/R/?group_id=156

library(Rdonlp2)
p = c(10,10)    #迭代初始值
par.l = c(-100,-100); par.u = c(100,100) ## 目标值域
# 目标
fn = function(x){
   x[1]^2*sin(x[2])+x[2]^2*cos(x[1])
}
# 行构成线性约束
A = matrix(c(1,1,3,-1),2,byrow=TRUE)
lin.l = c(2,1); lin.u = c(+Inf,3)  
# 构成非线性约束 
nlcon1 = function(x){
  x[1]*x[2]
} 
nlcon2 = function(x){
  sin(x[1])*cos(x[2])
}
nlin.l = c(2,-Inf)
nlin.u = c(2,0.6)  
# 求解
ret = donlp2(p, fn, par.u=par.u, par.l=par.l, 
         A, lin.l=lin.l, lin.u=lin.u, 
       nlin = list(nlcon1,nlcon2), 
       nlin.u = nlin.u, nlin.l = nlin.l)
# 输出结果
ret$par
# [1] 1.403076 1.425440

作用

在数据挖掘比赛或者研究理论时会常遇到带约束的目标最优化求解,例如,

  • 挖掘竞赛进行模型组合,如长时间时间序列预测,想将多个不同的预测模型进行线性组合,使得结果综合考虑各个模型优缺,那么如何确定不同模型的权重,可以以最小化 RMSE 为目标,就是将不同模型预测值线性组合后达到训练集中的 RMSE 达到最小值。即构建如下问题:

    Min(RMSEg(w1forecast1+w2forecast2))st.w1+w2=1

    其中 g() RMSE 的计算公式。

  • 理论方面,如SVM算法的学习策略构建的函数便是软间隔最大的约束最优化问题(即凸优化问题)。课本或者是书本上进行的求解方式,是现将问题转换为对偶问题,在对其进行求解。

  • 26
    点赞
  • 118
    收藏
    觉得还不错? 一键收藏
  • 23
    评论
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值