我正在寻找一个R求解器来最小化约束Ax< = B和x> = 0
下的函数f(x)其中A是矩阵,x和B是向量。
你知道吗?
谢谢!
答案 0 :(得分:1)
由于你的程序是二次目标函数,而是线性约束,它是凸的。因此,您不需要求助于高级非线性库。
查看quadprog包。从其文档中,第一个示例应该作为
的良好模板INSERT INTO TABLENAME (Id) VALUES ('41,32,31,293,877');
在这种情况下,注释描述了## First example from documentation of `quadprog`:
##
## Assume we want to minimize: -(0 5 0) %*% b + 1/2 b^T b
## under the constraints: A^T b >= b0
## with b0 = (-8,2,0)^T
## and
##
##
## we can use solve.QP as follows:
##
Dmat <- matrix(0,3,3)
diag(Dmat) <- 1
dvec <- c(0,5,0)
Amat <- matrix(c(-4,-3,0,2,1,0,0,-2,1),3,3)
bvec <- c(-8,2,0)
solve.QP(Dmat,dvec,Amat,bvec=bvec)
向量包含决策变量的程序。约束的形式为b
(A ^ Tb> = b0),而您有Ax >= b
形式的约束;后者很容易转化为前者,E = -A和f = -b,产生Ax <= b
。请注意,在此示例中,二次项的系数矩阵Ex >= f
是单位矩阵,而在您的情况下,您必须根据您的目标设置Dmat
(和Dmat
)功能
从dvec
程序的文档中澄清(甚至进一步):
这个例程实现了Goldfarb和Idnani的双重方法(1982, 1983)用于求解min形式的二次规划问题(-dT b + 1 / 2bT Db)具有约束AT b> = b0。
因此,表达你的目标函数(这里使用x而不是b作为决策变量向量)
quadprog
在上面的例子中,d和D分别表示为dvec和Dmat。