【问题标题】:constrOptim: Minimise a function subject to linear inequality constraints using an adaptive barrier algorithmconstrOptim:使用自适应障碍算法最小化受线性不等式约束的函数
【发布时间】:2021-01-04 17:03:04
【问题描述】:

我正在尝试使用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包含四个未知参数,我必须使用优化来校准它们,但我不太明白如何从constrOptim 设置约束矩阵ui 和约束向量ci

【问题讨论】:

    标签: r optimization constraints nonlinear-optimization


    【解决方案1】:

    从文档constrOptim 只接受 linear 不等式约束,您的约束是非线性的,所以这不起作用。这是使用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)
    

    【讨论】:

    • 当我使用更大的数据集运行它时,我得到“A(indxact, , drop = F) 中的错误:找不到函数“A”。我需要指定这个吗?
    • @rubwoer 如果不确切了解发生了什么,这很难回答。您不需要指定 A,它是可选的,用于线性不等式约束。
    • 我的最终目标是校准期权定价模型,即 Heston SV 模型。我使用来自NMOFcallHestoncf 像这样:for (i in 1:1374){ y[i] <- callHestoncf(S = S[i], X = K[i], tau = tau[i], r = r[i], q = q[i], v0 = 0.04, vT = x[1], rho = x[2], k = x[3], sigma = x[4], implVol = FALSE) 使用 for 循环生成依赖于四个未知数的模型价格。然后,如上所述,我从我的市场价格中减去目标函数。整个函数太大了,无法写成评论对不起,但我希望你能得到图片
    • 我也有估计的上限和下限:lb <- c(0.01, -1, 1, 0.01) & ub <- c(1, -0.2, 10, 1)
    • @rubwoer 不幸的是,我无法从您的描述中找出问题所在。最好发布一个带有最小可重复示例的新问题。
    猜你喜欢
    • 2019-08-27
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多