2016-01-13 67 views
0

我有希望在R.- [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 B)NOT 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.

+0

从'quadprog'包中的函数'solve.QP'用于常规颇为解决与这两个二次规划问题线性和非线性约束。在SO上搜索'solve.QP'将返回很多例子。要解决您的具体问题,您需要首先使用等式约束和不等式约束来构造约束矩阵“A”。参数'meq'用于告诉'solve.QP'A'中有多少个第一个方程是等式约束。 – WaltS

+0

谢谢你。不幸的是,它似乎解决了.QP不能处理一个二次方程系统,只有一个二次方程...我已经尝试过BB包中的各种函数,但似乎我可以优化一组没有约束的二次方程,或者一个带有约束的二次方程......仍然试图找到可以同时执行两个操作的东西。 – chrisjacques

+0

如果您可以通过一个小例子问题更新您的文章以帮助我们更好地理解您的问题,这将会很有帮助。 – WaltS

回答

0

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

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

注意quadprog只允许解决二次目标函数的意义“二次规划”线性约束。从quadprog文档:

此例程实现戈德法布和Idnani(1982, 1983)的双重方法用于解决形式分钟的二次规划问题(-dT b + 1/2BT DB)与约束条件AT b> = b0

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

+0

谢谢你。我试图使用NlcOptim,但我无法得到它的工作...我怀疑我没有在NlcOptim中正确指定我的问题,不幸的是,文档不是很有帮助,因为它只显示目标函数返回标量... – chrisjacques

+0

@chrisjacques Erwin在上面写道;对于非标量目标函数的回归,我们实质上是考虑多目标优化,在这种情况下,对什么是“最优解”没有唯一的解释。我建议你将你的问题减少到单一目标选择。问题以及作为功能约束的其他目标函数。假设你有两个你想研究的客观价值。将其中之一作为您程序中的一个约束条件:从一个相当松散的约束开始,并且使这种限制越来越严格(直到程序变得不可行)。 ... – dfri

+0

@chrisjacques ...这将产生一个[pareto front](https://en.wikipedia.org/wiki/Pareto_efficiency),这是一个有价值的研究方法,研究如何用两个目标来优化问题的帕累托最优性功能。 – dfri