markleeds at verizon.net
2007-Dec-22 01:38 UTC
[R] using solve.qp without a quadratic term
I was playing around with a simple example using solve.qp ( function is in the quadprog package ) and the code is below. ( I'm not even sure there if there is a reasonable solution because I made the problem up ). But, when I try to use solve.QP to solve it, I get the error that D in the quadratic function is not positive definite. This is because Dmat is zero because I don't have a quadratic term in my objective function. So, I was wondering if it was possible to use solve.QP when there isn't a quadratic term in the objective function. I imagine that there are other functions in R that can be used but I would like to use solve.QP because, in my real problem, I will have a lot of fairly complex constraints and solve.QP provides a very nice way for implementing them. Maybe there is another linear solver that allows you to implement hundreds of constraints just solve.QP that I am unaware of ? Thanks for any suggestions. # IN THE CODE BELOW, WE MINIMIZE # -3*b1 + 4*b2 + 6*b3 # SUBJECT TO # b1 + b2 + b3 >=0 # -(b1 b2 + b3) >= 0 # IE : b1 + b2 + b3 = 0. Dmat <- matrix(0,3,3) # QUADRATIC TERM dvec <- c(-3,4,6) # LINEAR TERM Amat <- matrix(c(1,-1,0,1,-1,0,1,-1,0),3,3) #print(Amat) bvec = c(0,0,0) # THIRD ZERO IS SAME AS NO CONSTRAINT result <- solve.QP(Dmat, dvec, Amat)
>>>>> "ML" == Mark Leeds <markleeds at verizon.net> >>>>> on Fri, 21 Dec 2007 19:38:19 -0600 (CST) writes:ML> I was playing around with a simple example using solve.qp ( function is in the quadprog package ) and the code is below. ( I'm not even sure there if there is a reasonable solution because I made the problem up ). ML> But, when I try to use solve.QP to solve it, I get the error that D in the quadratic function is not positive ML> definite. This is because Dmat is zero ML> because I don't have a quadratic term in my ML> objective function. So, I was wondering if ML> it was possible to use solve.QP when there isn't ML> a quadratic term in the objective function. ML> I imagine that there are other functions in R that can be used but I would like to use solve.QP because, in my real problem, ML> I will have a lot of fairly complex constraints ML> and solve.QP provides a very nice way for implementing ML> them. Maybe there is another linear solver that allows you to implement hundreds of constraints just solve.QP that I am unaware of ? Thanks for any suggestions. ML> # IN THE CODE BELOW, WE MINIMIZE ML> # -3*b1 + 4*b2 + 6*b3 ML> # SUBJECT TO ML> # b1 + b2 + b3 >=0 ML> # -(b1 b2 + b3) >= 0 ML> # IE : b1 + b2 + b3 = 0. So you want to solve a *linear* programming problem, not a quadratic. Linear is typically considerably easier. The recommended (and hence always installed) package 'boot' has function simplex() to do this and I see two other CRAN packages 'linprog' and 'lpSolve' also for the same problem; since ?simplex says that it may not be very efficient for large problems, you would e.g. lpSolve instead. Regards, Martin ML> Dmat <- matrix(0,3,3) # QUADRATIC TERM ML> dvec <- c(-3,4,6) # LINEAR TERM ML> Amat <- matrix(c(1,-1,0,1,-1,0,1,-1,0),3,3) ML> #print(Amat) ML> bvec = c(0,0,0) # THIRD ZERO IS SAME AS NO CONSTRAINT ML> result <- solve.QP(Dmat, dvec, Amat) ML> ______________________________________________ ML> R-help at r-project.org mailing list ML> https://stat.ethz.ch/mailman/listinfo/r-help ML> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html ML> and provide commented, minimal, self-contained, reproducible code.