[英]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.