# Fwd: Quadratic programming, for loop Classic List Threaded 12 messages Open this post in threaded view
|

## Fwd: Quadratic programming, for loop

 Hi! I have a quadratic optimization problem and I have some difficulties coding it with R. The math version of the problem looks like this: min sum(mj -mj^)^2 which goes from 1 to J st. mj-1 <= mj - delta1 1/(Qj-1 -Qj-2)(mj-2 -mj-1) <= 1/(Qj -Qj-1 ) (mj-1 - mj) -delta2 And I'm coding it like this: Dmat <- matrix(0, J,J) diag(Dmat) <- 1 dvec <- -hsmooth Aeq <- 0 beq <- 0 Amat <- matrix(0,2*J-3,J) bvec <- rep(0,2*J-3) for(j in 1:J) {   Amat[j-1,j-1] = -1   Amat[j-1,j]   = 1   bvec[j-1]     = Delta1 } for(j in 2:J)   {   Amat[J-1+j-2,j] = -1/ (Q[j] - Q[j-1])   Amat[J-1+j-2,j-1]= 1/(Q[j] - Q[j-1]) + 1/(Q[j-1] - Q[j-2])   Amat[J-1+j-2,j-2]= -1/(Q[j-1] - Q[j-2])   bvec[J-1+j-1]= Delta2 } solution <- solve.QP(Dmat, dvec, Amat, bvec) I get errors: Error in Amat[J - 1 + j - 2, j - 1] <- 1/(Q[j] - Q[j - 1]) + 1/(Q[j -  :   replacement has length zero And Error in solve.QP(Dmat, dvec, Amat, bvec) :   Amat and dvec are incompatible! I'm not sure what I'm doing wrong here, and I really could use some help with this. Thanks in advance!         [[alternative HTML version deleted]] ______________________________________________ [hidden email] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: Fwd: Quadratic programming, for loop

 Q[j-2] gives you Q in your first inner loop iteration. R arrays start at one. B. > On 2018-06-13, at 07:21, Maija Sirkjärvi <[hidden email]> wrote: > >  Amat[J-1+j-2,j-1]= 1/(Q[j] - Q[j-1]) + 1/(Q[j-1] - Q[j-2]) ______________________________________________ [hidden email] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: Fwd: Quadratic programming, for loop

 Keep replies on list please. You are not accessing a value from vector Q if you access the zero'th element! R > Q <- c(3, 5, 8) R > Q numeric(0) R > Q  3 R > Q  5 In the first iteration of the loop j is 2 thus j-2 is 0 and that's the reason for the error message: you are trying to replace a matrix element with a zero-length (i.e. unassigned) numeric value. Perhaps, in your mind, you are mixing up the index of a vector element and its value? If you need two zeros to start your vector, do something like R > Q <- c(0, 0, Q) R > Q  0 0 3 5 8 Clear now? B. > On 2018-06-14, at 01:22, Maija Sirkjärvi <[hidden email]> wrote: > > Many thanks for your message! > > The thing is that I need  Q[j-2] to be zero for the first two iterations because I don't have those values (J starts from 1). Do you have any idea how to do it? > > Thanks again! > > Maija > > 2018-06-13 15:52 GMT+03:00 Boris Steipe <[hidden email]>: > Q[j-2] gives you Q in your first inner loop iteration. > R arrays start at one. > > B. > > > > On 2018-06-13, at 07:21, Maija Sirkjärvi <[hidden email]> wrote: > > > >  Amat[J-1+j-2,j-1]= 1/(Q[j] - Q[j-1]) + 1/(Q[j-1] - Q[j-2]) > > ______________________________________________ [hidden email] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: Fwd: Quadratic programming, for loop

 Thanks for the reply! I got that figured out, but still have some problems with the quadratic programming. It seems that my Amat and dvec are incompatible. Amat is a matrix of zeros size: *2*J-3,J* and dvec is a vector of length *J*. There should be no problem, but apparently there is. The piece of code looks like this: Dmat <- matrix(0,nrow= J, ncol=J) diag(Dmat) <- 1 dvec <- rep(0,J) dvec dvec <- -hsmooth Aeq <- 0 beq <- 0 Amat <- matrix(0,2*J-3,J) bvec <- rep(0,2*J-3) for(j in 2:J) { Amat[j-1,j-1] = -1 Amat[j-1,j] = 1 bvec[j-1] = Delta1 } for(j in 3:J) { Amat[J-1+j-2,j] = -1/(Q[j] - Q[j-1]) Amat[J-1+j-2,j-1]= 1/(Q[j] - Q[j-1]) + 1/(Q[j-1] - Q[j-2]) Amat[J-1+j-2,j-2]= -1/(Q[j-1] - Q[j-2]) bvec[J-1+j-2]= Delta2 } solution <- solve.QP(Dmat, dvec, Amat, bvec) 2018-06-14 15:52 GMT+03:00 Boris Steipe <[hidden email]>: > Keep replies on list please. > > You are not accessing a value from vector Q if you access the zero'th > element! > R > Q <- c(3, 5, 8) > R > Q > numeric(0) > R > Q >  3 > R > Q >  5 > > In the first iteration of the loop j is 2 thus j-2 is 0 and that's the > reason for the error message: you are trying to replace a matrix element > with a zero-length (i.e. unassigned) numeric value. Perhaps, in your mind, > you are mixing up the index of a vector element and its value? If you need > two zeros to start your vector, do something like > > R > Q <- c(0, 0, Q) > R > Q >  0 0 3 5 8 > > > Clear now? > B. > > > > > On 2018-06-14, at 01:22, Maija Sirkjärvi <[hidden email]> > wrote: > > > > Many thanks for your message! > > > > The thing is that I need  Q[j-2] to be zero for the first two iterations > because I don't have those values (J starts from 1). Do you have any idea > how to do it? > > > > Thanks again! > > > > Maija > > > > 2018-06-13 15:52 GMT+03:00 Boris Steipe <[hidden email]>: > > Q[j-2] gives you Q in your first inner loop iteration. > > R arrays start at one. > > > > B. > > > > > > > On 2018-06-13, at 07:21, Maija Sirkjärvi <[hidden email]> > wrote: > > > > > >  Amat[J-1+j-2,j-1]= 1/(Q[j] - Q[j-1]) + 1/(Q[j-1] - Q[j-2]) > > > > > >         [[alternative HTML version deleted]] ______________________________________________ [hidden email] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: Fwd: Quadratic programming, for loop

Open this post in threaded view
|

## Re: Fwd: Quadratic programming, for loop

Open this post in threaded view
|

## Re: Fwd: Quadratic programming, for loop

 In reply to this post by Maija Sirkjärvi G'day all, On Tue, 26 Jun 2018 11:16:55 +0300 Maija Sirkjärvi <[hidden email]> wrote: > It seems that my Amat and dvec are incompatible. Amat is a matrix of > zeros size: *2*J-3,J* and dvec is a vector of length *J*. There > should be no problem, but apparently there is. [...] solve.QP solves the quadratic program:          min(-d^T b + 1/2 b^T D b)    where A^T b >= b_0. Note the transpose. :) If dvec is of length *J*, then b will be of length J too, and Amat should be Jx(2J-3) so that its transpose is (2j-3)xJ, making it compatible for matrix multiplication with b. Cheers,         Berwin --- This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus______________________________________________ [hidden email] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: Fwd: Quadratic programming, for loop

Open this post in threaded view
|

## Re: Fwd: Quadratic programming, for loop

Open this post in threaded view
|

## Re: Fwd: Quadratic programming, for loop

 In reply to this post by Berwin A Turlach-3 Thanks for your reply! Unfortunately something is still wrong. After the transpose, dvec and Amat are still incompatible. > d <- -hsmooth > dvec <- t(d) > c <- dvec*Amat Error in dvec * Amat : non-conformable arrays Moreover, I don't understand the following: > If dvec is of length *J*, then b will be of length J too. I believe the length of dvec comes from the number of variables and the length of b from the number of constraints. In this case they are not equal. 2018-06-26 15:01 GMT+03:00 Berwin A Turlach <[hidden email]>: > G'day all, > > On Tue, 26 Jun 2018 11:16:55 +0300 > Maija Sirkjärvi <[hidden email]> wrote: > > > It seems that my Amat and dvec are incompatible. Amat is a matrix of > > zeros size: *2*J-3,J* and dvec is a vector of length *J*. There > > should be no problem, but apparently there is. [...] > > solve.QP solves the quadratic program: >          min(-d^T b + 1/2 b^T D b) >    where A^T b >= b_0. > > Note the transpose. :) > If dvec is of length *J*, then b will be of length J too, and Amat > should be Jx(2J-3) so that its transpose is (2j-3)xJ, making it > compatible for matrix multiplication with b. > > Cheers, > >         Berwin > > --- > This email has been checked for viruses by Avast antivirus software. > https://www.avast.com/antivirus> >         [[alternative HTML version deleted]] ______________________________________________ [hidden email] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.