docs: def best_model(self):
          """Rebuilds the top scoring model from an optimisation.
  
          Returns
          -------
          model: AMPAL
              Returns an AMPAL model of the top scoring parameters.
  
          Raises
          ------
          NameError:
              Raises a name error if the optimiser has not been run.
          """
          if hasattr(self, 'halloffame'):
              model = self._params['specification'](
                  *self.parse_individual(self.halloffame[0]))
              model.pack_new_sequences(self._params['sequence'])
              return model
          else:
              raise NameError('No best model found, have you ran the optimiser?')