[R] Can R solve this optimization problem?
Gabor Grothendieck
ggrothendieck at gmail.com
Wed Jan 9 14:53:43 CET 2008
If its too large the the primary portion of the objective basically
just looks like roundoff error. By the way there is also rdonlp2
which can handle constraints. Not on CRAN -- try google.
On Jan 9, 2008 6:45 AM, Paul Smith <phhs80 at gmail.com> wrote:
>
> On Jan 8, 2008 2:58 AM, Gabor Grothendieck <ggrothendieck at gmail.com> wrote:
> > > Thanks again, Gabor. Apparently, something is missing in your
> > > approach, as I tried to apply it to the original problem (without sin)
> > > and the result seems not being correct::
> > >
> > > f <- function(z) {
> > > a <- sum(-(999:1)*z)
> > > return(a)
> > > }
> > >
> > > result <- optim(rep(0,999), f,
> > > NULL,lower=rep(-1/1000,999),upper=rep(1/1000,999),method="L-BFGS-B")
> > > b <- result$par
> > >
> > > x <- 0
> > >
> > > for (i in 1:999) {
> > > x[i+1] <- b[i] + x[i]
> > > }
> > >
> > > The vector x contains the solution, but it does not correspond to the
> > > analytical solution. The analytical solution is
> > >
> > > x(t) = t, if t <= 1/2 and
> > >
> > > x(t) = 1 - t, if t >= 1/2.
> > >
> > > Am I missing something?
> > >
> >
> > No, but I was -- the x[n] = 0 constraint. Add it through
> > a penalty term and try this:
> >
> > theta <- 1000
> > n <- 100
> > x <- rep(1/n, n)
> > f <- function(x) sum(n:1 * x) - theta * sum(x)^2
> > optim(x, f, lower = rep(-1, n), upper = rep(1, n), method = "L-BFGS-B",
> > control = list(maxit = 1000, fnscale = -1, lmm = 25))
> > plot(cumsum(res$par))
>
> Thanks, Gabor. Inspired by your code, I have written the following:
>
> theta <- 50000000
> n <- 1000
> x <- rep(1/n, n)
> f <- function(x) sum(n:1 * x) - theta * sum(x)^2
> res <- optim(x, f, lower = rep(-1/n, n), upper = rep(1/n, n), method =
> "L-BFGS-B",control = list(maxit = 2000, fnscale = -1))
>
> b <- res$par
>
> x <- 0
>
> for (i in 1:n) {
> x[i+1] <- b[i] + x[i]
> }
>
> plot(seq(0,1,by=1/n),x,type="l")
>
> to solve the same problem. It works fine unless one replaces
>
> theta <- 50000000
>
> by
>
> theta <- 1e100
>
> According to a book that I consulted meanwhile, the larger the value
> of theta the better the solution should be. Why does not it happen
> with my example? Any clues?
>
> Paul
>
>
> ______________________________________________
> R-help at r-project.org mailing list
> 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.
>
More information about the R-help
mailing list