Commit b0b61691 authored by Viktor Reshniak's avatar Viktor Reshniak
Browse files

update loss.minimize

parent 19569cae
Loading
Loading
Loading
Loading
+9 −6
Original line number Diff line number Diff line
@@ -1341,7 +1341,7 @@ class MLELoss(Loss):
	def d2loss_dfit2(self):
		return self.data / self._fit**2

	def minimize(self, solver, tol, maxiter, maxfun, params_init, params_lbnd, params_ubnd, disp=_debug):
	def minimize(self, solver, tol, maxiter, maxfun, params_init, params_lbnd=None, params_ubnd=None, disp=_debug):
		# from scipy.optimize import BFGS
		# class myBFGS(BFGS):
		# 	def initialize(self, n, approx_type):
@@ -1350,17 +1350,20 @@ class MLELoss(Loss):
		# 			self.B = loss_fun.hessian(params_init)
		# 		else:
		# 			self.H = np.linalg.inv(loss_fun.hessian(params_init))

		if solver=='Newton-CG':
			options = {'maxiter':maxiter, 'xtol':tol, 'disp':disp}
			hess = self.hessian
			# hess = myBFGS(),
		elif solver=='BFGS':
			options = {'maxiter':maxiter, 'gtol':tol, 'disp':disp}
			hess = None
		elif solver=='L-BFGS-B':
			options = {'maxiter':maxiter, 'maxfun':maxfun, 'maxls':100, 'maxcor':100, 'ftol':1.e-10, 'gtol':tol, 'xtol':1.e-10, 'disp':disp}
			hess = None

		return scipy_minimize(self,
			jac  = self.gradient,
			hess = self.hessian,
			# hess = myBFGS(),
			x0=params_init, bounds=tuple(zip(params_lbnd,params_ubnd)),
			jac = self.gradient, hess = hess,
			x0=params_init, bounds=tuple(zip(params_lbnd,params_ubnd)) if params_lbnd is not None and params_ubnd is not None else None,
			method=solver, options=options,
			# method='L-BFGS-B', options={'maxiter':1000, 'maxfun':1000, 'maxls':20, 'maxcor':100, 'ftol':1.e-6, 'gtol':1.e-6, 'disp':True}
			# method='BFGS', options={'maxiter':1000, 'gtol':1.e-6, 'norm':np.inf, 'disp':True}