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
> >
> >
>
Reasonably Related 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?