[ADMB Users] Are parameters scaled for optimization.

dave fournier davef at otter-rsch.com
Tue Dec 31 10:02:42 PST 2013


For a random effects model
The relevant code appears to be

if the scalefactor has not been set (i.e. =0)

  409 df1b2variable boundp(const df1b2variable& x, double fmin, double fmax,
  410   const df1b2variable& _fpen)
  411 {
  412   ADUNCONST(df1b2variable,fpen)
  413   df1b2variable t;
  414   //df1b2variable y;
  415   //y=x;
  416   double diff=fmax-fmin;
  417   const double l4=log(4.0);
  418   df1b2variable 
ss=0.49999999999999999*sin(x*1.57079632679489661)+0.50;
  419   t=fmin + diff*ss;
  420

So the parameter is effectively scaled by diff.
Better would be

  418   df1b2variable 
ss=0.49999999999999999*sin(x/diff*1.57079632679489661)+0.50;

The only difficulty would be that the function minimizer report does not 
deal with large numbers well.

For parameters whose scalefactor has been set the code is


460 df1b2variable boundp(const df1b2variable& _x, double fmin, double fmax,
  461   const df1b2variable& _fpen,double s)
  462 {
  463   ADUNCONST(df1b2variable,fpen)
  464   df1b2variable t;
  465   df1b2variable x=_x/s;
  466   //df1b2variable y;
  467   //y=x;
  468   double diff=fmax-fmin;
  469   const double l4=log(4.0);
  470
  471   // ss is underlying varialbe on [0,1] and t lives in [fmin,fmax]
  472   df1b2variable 
ss=0.49999999999999999*sin(x*1.57079632679489661)+0.50;
  473   t=fmin + diff*ss;
  474

again

  472   df1b2variable 
ss=0.49999999999999999*sin(x/diff*1.57079632679489661)+0.50;

would be better.

I wrote a note about this earlier, but it did not generate much interest.











More information about the Users mailing list