繁体   English   中英

R二次编程

[英]R quadratic programming

我有一个想在R中解决的问题。

我看到我可以在软件包limSolve使用函数lsei来最小化以矩阵形式写为Ax = b的线性方程组,但要遵守等式约束Ex = f和不等式约束Gx> = h。

但是,我现在不是一个线性方程组,而是一个可以写成t(x)Ax = b的二次方程组。

我看到有用于二次情况的quadprog程序包,但似乎不允许二次方程组,仅允许一个方程组。

有谁知道我可以在等式和不等式约束下最小化二次方程组的方法?

这是我的例子。 我正在尝试合并3个概率P(A),P(B),P(C)-这将创建7个段v1至v7,其中v1是P(A solus)等... v4是P((A AND B)不是C)等。并且v7是P(A AND B AND C)。

我要最小化的功能是:

obj.fc<-function(x){
  f<-rep(NA,4)
  v1<-x[1]
  v2<-x[2]
  v3<-x[3]
  v4<-x[4]
  v5<-x[5]
  v6<-x[6]
  v7<-x[7]
  f[1]<-(v4+v7)*(1-(v1+v2+v4+v5+v6+v7))-2*(v1+v6)*(v2+v5)
  f[2]<-(v5+v7)*(1-(v2+v3+v4+v5+v6+v7))-13*(v2+v4)*(v3+v6)
  f[3]<-(v6+v7)*(1-(v1+v3+v4+v5+v6+v7))-11*(v1+v4)*(v3+v5)
  f[4]<-(v4+v5+v6)*(1-(v1+v2+v3+v4+v5+v6+v7))-4*(v1+v2+v3)*v7
  return(f)
}

我的平等约束是:

v1+v4+v6+v7=0.14
v2+v4+v5+v7=0.01
v3+v5+v6+v7=0.08

我的不等式约束是,Vi必须在0到1之间,并且它们的总和不能超过1。

您可以将每个等式约束表示为两个不等式约束,例如

Ax = b <=> Ax <= b, and
           Ax >= b

但是请注意,在具有线性约束的二次目标函数的意义上, quadprog仅允许求解“二次程序” quadprog文档中:

该例程实现了Goldfarb和Idnani(1982,1983)的对偶方法,用于求解形式为min(-dT b + 1 / 2bT Db)且约束为AT b> = b0的二次编程问题。

因此,在您的情况下,您可能应该考虑其他软件包。 我建议使用[NlcOptim][2] ,或者从这里找到最适合您的求解器:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM