R二次规划

时间:2016-01-13 17:24:24

标签: r quadratic nonlinear-optimization quadprog

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

我看到我可以使用包lsei中的函数limSolve来最小化以矩阵形式写成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和B和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。

1 个答案:

答案 0 :(得分:0)

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

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

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

  

这个例程实现了Goldfarb和Idnani的双重方法(1982,   1983)用于求解 min形式的二次规划问题(-dT b   + 1 / 2bT Db)约束 AT b> = b0

所以在你的情况下,你应该看看另一个包。我建议例如[NlcOptim][2],或者,从这里找到最合适的求解器: