[Rd] optim "CG" bug w/patch proposal (PR#8786)

From: <westfeld_at_inf.tu-dresden.de>
Date: Fri 21 Apr 2006 - 18:32:22 GMT


Dear R team,

when using optim with method "CG" I got the wrong $value for the reported $par.

Example:

f<-function(p) {
        if (!all(p>-.7)) return(2)
        if (!all(p<.7)) return(2)
        sin((p[1])^2)*sin(p[2])

}
optim(c(0.1,-0.1),f,method="CG",control=list(trace=0,type=1))
$par 19280.68 -10622.32
$value -0.2346207 # should be 2!
optim(c(0.1,-0.1),f,method="CG",control=list(trace=0,type=2))

$par 3834.021 -2718.958
$value -0.0009983175 # should be 2!

Fix:

--- optim.c     (Revision 37878)
+++ optim.c     (Arbeitskopie)
@@ -970,7 +970,8 @@
                            if (!accpoint) {
                                steplength *= stepredn;
                                if (trace) Rprintf("*");
-                           }
+                           } else
+                               *Fmin = f;
                        }
                    } while (!(count == n || accpoint));
                    if (count < n) {

After fix:
optim(c(0.1,-0.1),f,method="CG",control=list(trace=0,type=1))
$par 0.6993467 -0.4900145
$value -0.2211150

optim(c(0.1,-0.1),f,method="CG",control=list(trace=0,type=2))
$par 3834.021 -2718.958
$value 2

Wishlist:

  1. Please make type=3 the default in optim (it is more robust).
  2. The $par reported for type=2 is still not satisfactory. I found out that this can be improved by limiting G3 to a maximum of about 2000 (maybe even smaller). However, I'm not a "CG" expert and can live with a suboptimal result.
    • optim.c (Revision 37878) +++ optim.c (Arbeitskopie) @@ -946,6 +946,8 @@ G3 = G1 / G2; else G3 = 1.0; + if (G3 > 2e3) + G3 = 2e3; gradproj = 0.0; for (i = 0; i < n; i++) { t[i] = t[i] * G3 - g[i];

Andreas

-- 
Andreas Westfeld, 0432 01CC F511 9E2B 0B57 5993 0B22 98F8 4AD8 EEEA
<westfeld_at_inf.tu-dresden.de> http://www.inf.tu-dresden.de/~aw4
TU Dresden Fakultät Informatik, Institut für Systemarchitektur
Datenschutz und Datensicherheit, Tel. +49-351-463-37918

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Received on Sat Apr 22 04:35:38 2006

This archive was generated by hypermail 2.1.8 : Mon 24 Apr 2006 - 02:17:49 GMT