[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