Dear All I am using rgenoud to solve the following maximization problem: myfunc <- function(x) { x1 <- x[1] x2 <- x[2] if (x1^2+x2^2 > 1) return(-9999999) else x1+x2 } genoud(myfunc, nvars=2, Domains=rbind(c(0,1),c(0,1)),max=TRUE,boundary.enforcement=2,solution.tolerance=0.000001) How can one increase the precision of the solution $par [1] 0.7072442 0.7069694 ? I have tried solution.tolerance but without a significant improvement. Any ideas? Thanks in advance, Paul
Hi Paul, Solution.tolerance is the right way to increase precision. In your example, extra precision *is* being obtained, but it is just not displayed because the number of digits which get printed is controlled by the options("digits") variable. But the requested solution precision is in the object returned by genoud(). For example, if I run a <- genoud(myfunc, nvars=2, Domains=rbind(c(0,1),c(0,1)),max=TRUE,boundary.enforcement=2,solution.tolerance=0.000001) I get> a$par[1] 0.7062930 0.7079196 But if I set options("digits"=12), and without rerunning anything I check a$par again, I observe that:> a$par[1] 0.706293049455 0.707919577559 Cheers, Jas. ======================================Jasjeet S. Sekhon Associate Professor Survey Research Center UC Berkeley http://sekhon.berkeley.edu/ V: 510-642-9974 F: 617-507-5524 ====================================== Paul Smith writes: > Dear All > > I am using rgenoud to solve the following maximization problem: > > myfunc <- function(x) { > x1 <- x[1] > x2 <- x[2] > if (x1^2+x2^2 > 1) > return(-9999999) > else x1+x2 > } > > genoud(myfunc, nvars=2, > Domains=rbind(c(0,1),c(0,1)),max=TRUE,boundary.enforcement=2,solution.tolerance=0.000001) > > How can one increase the precision of the solution > > $par > [1] 0.7072442 0.7069694 > > ? > > I have tried solution.tolerance but without a significant improvement. > > Any ideas? > > Thanks in advance, > > Paul > >
Thanks, Jasjeet, for your reply, but maybe I was not enough clear. The analytical solution for the optimization problem is the pair (sqrt(2)/2,sqrt(2)/2), which, approximately, is (0.707106781186548,0.707106781186548). The solution provided by rgenoud, with solution.tolerance=0.000000001 was $par [1] 0.7090278 0.7051806 which is not very precise comparing with the values of the (analytical) solution. Is it possible to increase the degree of closeness of the rgenoud solutions with the analytical ones? Paul On 5/10/07, Jasjeet Singh Sekhon <sekhon at berkeley.edu> wrote:> > Hi Paul, > > Solution.tolerance is the right way to increase precision. In your > example, extra precision *is* being obtained, but it is just not > displayed because the number of digits which get printed is controlled > by the options("digits") variable. But the requested solution > precision is in the object returned by genoud(). > > For example, if I run > > a <- genoud(myfunc, nvars=2, > Domains=rbind(c(0,1),c(0,1)),max=TRUE,boundary.enforcement=2,solution.tolerance=0.000001) > > I get > > > a$par > [1] 0.7062930 0.7079196 > > But if I set options("digits"=12), and without rerunning anything I check > a$par again, I observe that: > > > a$par > [1] 0.706293049455 0.707919577559 > > Cheers, > Jas. > > ======================================> Jasjeet S. Sekhon > > Associate Professor > Survey Research Center > UC Berkeley > > http://sekhon.berkeley.edu/ > V: 510-642-9974 F: 617-507-5524 > ======================================> > > Paul Smith writes: > > Dear All > > > > I am using rgenoud to solve the following maximization problem: > > > > myfunc <- function(x) { > > x1 <- x[1] > > x2 <- x[2] > > if (x1^2+x2^2 > 1) > > return(-9999999) > > else x1+x2 > > } > > > > genoud(myfunc, nvars=2, > > Domains=rbind(c(0,1),c(0,1)),max=TRUE,boundary.enforcement=2,solution.tolerance=0.000001) > > > > How can one increase the precision of the solution > > > > $par > > [1] 0.7072442 0.7069694 > > > > ? > > > > I have tried solution.tolerance but without a significant improvement. > > > > Any ideas? > > > > Thanks in advance, > > > > Paul > > > > >
Hi Paul, I see. You want to increase the population size (pop.size) option---of lesser importance are the max.generations, wait.generations and P9 options. For more details, see http://sekhon.berkeley.edu/papers/rgenoudJSS.pdf. For example, if I run a <- genoud(myfunc, nvars=2, Domains=rbind(c(0,1),c(0,1)),max=TRUE,boundary.enforcement=2,solution.tolerance=0.0000001, pop.size=6000, P9=50) options("digits"=12) I obtain: #approx analytical solution sum(c(0.707106781186548,0.707106781186548)) [1] 1.41421356237 #genoud solution #a$value [1] 1.41421344205 #difference a$value-sum(c(0.707106781186548,0.707106781186548)) [1] -2.91195978441e-09 If that's not enough precision, increase the options (and the run-time). This would be faster with analytical derivatives. Cheers, Jas. ======================================Jasjeet S. Sekhon Associate Professor Travers Department of Political Science Survey Research Center UC Berkeley http://sekhon.berkeley.edu/ V: 510-642-9974 F: 617-507-5524 ====================================== Paul Smith writes:>Thanks, Jasjeet, for your reply, but maybe I was not enough clear. > >The analytical solution for the optimization problem is the pair > >(sqrt(2)/2,sqrt(2)/2), > >which, approximately, is > >(0.707106781186548,0.707106781186548). > >The solution provided by rgenoud, with > >solution.tolerance=0.000000001 > >was > >$par >[1] 0.7090278 0.7051806 > >which is not very precise comparing with the values of the >(analytical) solution. Is it possible to increase the degree of >closeness of the rgenoud solutions with the analytical ones? > >Paul > >Paul Smith writes: > > Dear All > > > > I am using rgenoud to solve the following maximization problem: > > > > myfunc <- function(x) { > > x1 <- x[1] > > x2 <- x[2] > > if (x1^2+x2^2 > 1) > > return(-9999999) > > else x1+x2 > > } > > > > genoud(myfunc, nvars=2, > > Domains=rbind(c(0,1),c(0,1)),max=TRUE,boundary.enforcement=2,solution.tolerance=0.000001) > > > > How can one increase the precision of the solution > > > > $par > > [1] 0.7072442 0.7069694 > > > > ? > > > > I have tried solution.tolerance but without a significant improvement. > > > > Any ideas? > > > > Thanks in advance, > > > > Paul > > > > >
Possibly Parallel Threads
- Rounding parameter values in genoud(), Rgenoud package
- rgenoud for multiple chips: does a more recent special version of "snow" exist?
- How to fix error in the package 'rgenoud'
- genoud problem
- Parallel computing in R for dummies--how to optimize an external model?