# [R] Fine tunning rgenoud

Patrick Burns pburns at pburns.seanet.com
Wed Jul 4 10:20:19 CEST 2007

```I think fine tuning the function might be in order.

The function has just a single penalty for not meeting
the constraints no matter how close it is to meeting
them.  A better approach is to have a penalty that
depends on the amount by which all of the constraints
are breached.

Patrick Burns
patrick at burns-stat.com
+44 (0)20 8525 0696
http://www.burns-stat.com
(home of S Poetry and "A Guide for the Unwilling S User")

Paul Smith wrote:

>Dear All,
>
>I am trying to solve the following maximization problem, but I cannot
>have rgenoud giving me a reliable solution.
>
>Any ideas?
>
>
>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.generations=150,max.generations=300,boundary.enforcement=2)
>
>______________________________________________
>R-help at stat.math.ethz.ch mailing list
>https://stat.ethz.ch/mailman/listinfo/r-help