Fwd: Quadratic programming, for loop

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Fwd: Quadratic programming, for loop

Maija Sirkjärvi
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-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: Fwd: Quadratic programming, for loop

Boris Steipe
Q[j-2] gives you Q[0] 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-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: Fwd: Quadratic programming, for loop

Boris Steipe
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[0]
numeric(0)
R > Q[1]
[1] 3
R > Q[2]
[1] 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
[1] 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[0] 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-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.