docs: def solve(self, graph, savings_solution, timeout, debug=False, anim=None):
          """Improve initial savings solution using local search
  
          Parameters
          ----------
          graph: :networkx:`NetworkX Graph Obj< >`
              Graph instance
          savings_solution: SavingsSolution
              initial solution of CVRP problem (instance of `SavingsSolution` class)
          timeout: int
              max processing time in seconds
          debug: bool, defaults to False
              If True, information is printed while routing
          anim: AnimationDing0
              AnimationDing0 object
          
          Returns
          -------
          LocalSearchSolution
             A solution (LocalSearchSolution class)
  
          """
          # TODO: If necessary, use timeout to set max processing time of local search
  
          # load threshold for operator (see exchange or relocate operator's description for more information)
          op_diff_round_digits = int(cfg_ding0.get('mv_routing', 'operator_diff_round_digits'))
  
          solution = LocalSearchSolution(graph, savings_solution)
  
          # FOR BENCHMARKING OF OPERATOR'S ORDER:
          #self.benchmark_operator_order(graph, savings_solution, op_diff_round_digits)
  
          for run in range(10):
              start = time.time()
              solution = self.operator_exchange(graph, solution, op_diff_round_digits, anim)
              time1 = time.time()
              if debug:
                  logger.debug('Elapsed time (exchange, run {1}): {0}, '
                               'Solution\'s length: {2}'.format(
                      time1 - start, str(run), solution.length()))
  
              solution = self.operator_relocate(graph, solution, op_diff_round_digits, anim)
              time2 = time.time()
              if debug:
                  logger.debug('Elapsed time (relocate, run {1}): {0}, '
                               'Solution\'s length: {2}'.format(
                      time2 - time1, str(run), solution.length()))
  
              solution = self.operator_oropt(graph, solution, op_diff_round_digits, anim)
              time3 = time.time()
              if debug:
                  logger.debug('Elapsed time (oropt, run {1}): {0}, '
                               'Solution\'s length: {2}'.format(
                      time3 - time2, str(run), solution.length()))
  
          return solution