def __call__(self, fcn, x0, xmin, xmax, tol=EPSILON, maxnfev=None, step=None, finalsimplex=[0, 1, 1], verbose=0): x0 = np.asarray(x0) n = len(x0) if step is None: step = abs(x0) + 1.2 maxnfev = self.get_maxnfev(maxnfev, n) init = 0 x0, fval, nfev, err = \ _saoopt.neldermead(verbose, maxnfev, init, finalsimplex, tol, step, xmin, xmax, x0, fcn) iquad = 1 simp = 1.0e-2 * tol step = n * [0.4] self.par, self.fmin, tmpnfev, ifault = \ _saoopt.minim(verbose, maxnfev - nfev, init, iquad, simp, tol*10, step, xmin, xmax, x0, fcn) self.nfev = nfev + tmpnfev return self.nfev, self.fmin, self.par
def test_mccormick(self): from sherpa.optmethods.opt import McCormick init = 0 iquad = 1 ftol = 1.0e-7 simp = 1.0e-2 * ftol xmin = [-1.5, -3.0] xmax = [4.0, 4.0] x = np.asarray([0, 0]) step = 0.4 * np.ones(x.shape, np.float_) x, fval, neval, ifalut = _saoopt.minim(0, 1000, init, iquad, simp, ftol, step, xmin, xmax, x, McCormick) fmin = -1.9132229549810362 self.assertEqualWithinTol(fval, fmin, self.tolerance)
def __call__(self, fcn, x0, xmin, xmax, tol=1.0e-6, maxnfev=None, step=None, finalsimplex=1, verbose=0): init = 0 iquad = 1 simp = 1.0e-2 * tol x0 = np.asarray(x0) n = len(x0) if step is None: step = n * [0.4] maxnfev = self.get_maxnfev(maxnfev, n) par, fmin, nfev, ifault = \ _saoopt.minim(verbose, maxnfev, init, iquad, simp, tol*10, step, xmin, xmax, x0, fcn) return nfev, fmin, par