微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

constrOptim:使用自适应屏障算法最小化受线性不等式约束的函数

如何解决constrOptim:使用自适应屏障算法最小化受线性不等式约束的函数

我正在尝试使用 constrOptim 最小化损失函数。我的约束是形式为 2θκ ≥ σ² 的 Feller 条件,它对应于 2*x1*x2 ≥ x4^2,例如x4^2- 2*x1*x2 在我的代码中。我的起始值为 x0 <- c(0.05,-0.85,3.00,0.32),损失函数的形式为 1/N * sum(w_i * (market_price - model_price)^2),简称为 loss_functionmodel_price 包含四个未知参数,我必须使用优化对其进行校准,但我不太明白如何从 ui 设置约束矩阵 ci 和约束向量 constrOptim .

解决方法

从文档中 constrOptim 只接受 线性 不等式约束,你的约束是非线性的,所以这行不通。这是使用 NlcOptim 包解决此问题的一种方法。

library(NlcOptim)

w_i=runif(4)
model_price=rnorm(4)
x0=c(0.05,-0.85,3.00,0.32)

objfun=function(x){
  sum(w_i*(x-model_price)^2)/length(x)
}

confun=function(x){
  f=NULL
  f=rbind(f,x[4]^2-2*x[1]*x[2])
  list(ceq=NULL,c=f)
}

solnl(x0,objfun=objfun,confun=confun)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。