[R] Fine tunning rgenoud

Ravi Varadhan rvaradhan at jhmi.edu
Tue Jul 3 22:50:03 CEST 2007


Paul,

You had indicated in your previous email that you are having trouble finding
a feasible starting value for constrOptim().  So, you basically need to
solve a system of linear inequalities to obtain a starting point.  Have you
considered using linear programming? Either simplex() in the "boot" package
or solveLP() in "linprog" would work.  It seems to me that you could use any
linear objective function in solveLP to obtain a feasible starting point.
This is not the most efficient solution, but it might be worth a try. 

I am aware of other methods for generating n-tuples that satisfy linear
inequality constraints, but AFAIK those are not available in R.

Best,
Ravi.


----------------------------------------------------------------------------
-------

Ravi Varadhan, Ph.D.

Assistant Professor, The Center on Aging and Health

Division of Geriatric Medicine and Gerontology 

Johns Hopkins University

Ph: (410) 502-2619

Fax: (410) 614-9625

Email: rvaradhan at jhmi.edu

Webpage:  http://www.jhsph.edu/agingandhealth/People/Faculty/Varadhan.html

 

----------------------------------------------------------------------------
--------

-----Original Message-----
From: r-help-bounces at stat.math.ethz.ch
[mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Paul Smith
Sent: Tuesday, July 03, 2007 4:10 PM
To: R-help
Subject: [R] Fine tunning rgenoud

Dear All,

I am trying to solve the following maximization problem, but I cannot
have rgenoud giving me a reliable solution.

Any ideas?

Thanks in advance,

Paul

----------------------------
library(rgenoud)

v <- 0.90
O1 <- 10
O2 <- 20
O0 <- v*O1+(1-v)*O2

myfunc <- function(x) {
  U0 <- x[1]
  U1 <- x[2]
  U2 <- x[3]
  q0 <- x[4]
  q1 <- x[5]
  q2 <- x[6]
  p <- x[7]

  if (U0 < 0)
    return(-1e+200)
  else if (U1 < 0)
    return(-1e+200)
  else if (U2 < 0)
    return(-1e+200)
  else if ((U0-(U1+(O1-O0)*q1)) < 0)
    return(-1e+200)
  else if ((U0-(U2+(O2-O0)*q2)) < 0)
    return(-1e+200)
  else if ((U1-(U0+(O0-O1)*q0)) < 0)
    return(-1e+200)
  else if ((U1-(U2+(O2-O1)*q2)) < 0)
    return(-1e+200)
  else if((U2-(U0+(O0-O2)*q0)) < 0)
    return(-1e+200)
  else if((U2-(U1+(O1-O2)*q1)) < 0)
    return(-1e+200)
  else if(p < 0)
    return(-1e+200)
  else if(p > 1)
    return(-1e+200)
  else if(q0 < 0)
    return(-1e+200)
  else if(q1 < 0)
    return(-1e+200)
  else if(q2 < 0)
    return(-1e+200)
  else
return(p*(sqrt(q0)-(O0*q0+U0))+(1-p)*(v*(sqrt(q1)-(O1*q1+U1))+(1-v)*(sqrt(q2
)-(O2*q2+U2))))

}
genoud(myfunc,nvars=7,max=T,pop.size=6000,starting.values=runif(7),wait.gene
rations=150,max.generations=300,boundary.enforcement=2)

______________________________________________
R-help at stat.math.ethz.ch 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