0

我有一个想在 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 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。

4

1 回答 1

0

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

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

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

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

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

于 2016-01-13T17:31:21.970 回答