class SurrogateModel(object): def __init__(self, fitness, configuration, controller): self.fitness = fitness self.configuration = configuration self.classifier = Classifier() self.regressor = Regressor(controller) def train(self, pop): raise NotImplementedError('SurrogateModel is an abstract class, this ' 'should not be called.') def model_particles(self, particles): MU, S2 = self.regressor.predict(particles) return self.classifier.predict(particles), MU, S2 def add_training_instance(self, part, code, fitness): pass def __getstate__(self): # Don't pickle fitness and configuration d = dict(self.__dict__) del d['fitness'] del d['configuration'] return d
class DummySurrogateModel(SurrogateModel): ## TODO - add dummy regressor/classifier def __init__(self, configuration, controller, fitness): super(DummySurrogateModel, self).__init__(configuration, controller, fitness) self.regressor = Regressor(controller, configuration) self.classifier = Classifier() def get_regressor(self): return self.regressor def get_classifier(self): return self.classifier def predict(self, particles): MU, S2 = self.regressor.predict(particles) return self.classifier.predict(particles), MU, S2 def train(self, hypercube): self.was_trained = True return True def model_particle(self, particle): return 0, 0, 0 def contains_training_instance(self, part): return False def model_failed(self, part): return False def get_state_dictionary(self): return {} def set_state_dictionary(self, dict): pass def get_copy(self): model_copy = DummySurrogateModel(self.configuration, self.controller) return model_copy