docs: def findLocalOptimum(self,fast=False,scales0=None,fixed0=None,init_method=None,termx=0,n_times=10,perturb=True,pertSize=1e-3,verbose=True,lambd=None):
          """
          Train the model using the specified initialization strategy
          
          Args:
              fast:		    if true, fast gp is initialized
              scales0:        if not None init_method is set to manual
              fixed0:         initial fixed effects
              init_method:    initialization method \in {random,diagonal,manual} 
              termx:			term for diagonal diagonalisation
              n_times:        number of times the initialization
              perturb:        if true, the initial point is perturbed with gaussian noise
              perturbSize:    size of the perturbation
              verbose:        print if convergence is achieved
          """
  
          if init_method==None:
              if self.P==1:	init_method = 'random'
              else:           init_method = 'diagonal'
  
          if not self.init:		self.initGP(fast=fast)
  
          if scales0!=None and ~perturb: 	init_method = 'manual'
          
          if init_method=='diagonal':
              scales0 = self._getScalesDiag(termx=termx)
              
          if init_method=='diagonal' or init_method=='manual':
              if not perturb:		n_times = 1
  
          if fixed0==None:
              fixed0 = SP.zeros_like(self.gp.getParams()['dataTerm'])
  
          for i in range(n_times):
              if init_method=='random':
                  scales1 = self._getScalesRand()
                  fixed1  = pertSize*SP.randn(fixed0.shape[0],fixed0.shape[1])
              elif perturb:
                  scales1 = scales0+pertSize*self._perturbation()
                  fixed1  = fixed0+pertSize*SP.randn(fixed0.shape[0],fixed0.shape[1])
              else:
                  scales1 = scales0
                  fixed1  = fixed0
              conv = self.trainGP(scales0=scales1,fixed0=fixed1,lambd=lambd)
              if conv:    break
      
          if verbose:
              if conv==False:
                  print('No local minimum found for the tested initialization points')
              else:
                  print(('Local minimum found at iteration %d' % i))
   
          return conv