def METHOD_NAME(self):
    self.slam_heur_prep()
    slam_iter = 1
    while not self.got_kill_signal():
        if (slam_iter-1) % 10000 == 0:
            logger.debug(f'   {self.__class__.__name__} loop iter={slam_iter} on rank {self.global_rank}')
            logger.debug(f'   {self.__class__.__name__} got from opt on rank {self.global_rank}')
        if self.new_nonants:
            local_candidate = self.extract_local_candidate_soln()
            global_candidate = np.empty_like(local_candidate)
            self.cylinder_comm.Allreduce(local_candidate, global_candidate, op=self.mpi_op)
            '''
            ## round the candidate
            candidate = global_candidate.round()
            '''
            # Everyone has the candidate solution at this point
            for s in self.opt.local_scenarios.values():
                is_pers = sputils.is_persistent(s._solver_plugin)
                solver = s._solver_plugin if is_pers else None
                for ix, var in enumerate(s._mpisppy_data.nonant_indices.values()):
                    var.fix(global_candidate[ix])
                    if (is_pers):
                        solver.update_var(var)
            obj = self.opt.calculate_incumbent(fix_nonants=False)
            self.update_if_improving(obj)
        slam_iter += 1