示例#1
0
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