示例#1
0
    def run_round(self, task):
        results = zip(self.stable, self.pool.map(task, self.stable))
        if self.best:
            results.append(self.best)

        print "Ranking winners"

        ranked_results = sorted(
            results,
            key=lambda (n, r): self.fitness_function(r),
            reverse=True
        )
        best_result = ranked_results[0]
        self.best = best_result
        bn, best = best_result
        wn, worst = ranked_results[-1]

        print "Best score was", best, bn.name
        print "Worst score was", worst, wn.name

        cream = ranked_results[:self.cream]
        cream = [n for n, s in cream]
        print "Selected", len(cream), "best networks"

        new_class = []
        for _ in range(self.cream):
            new_blood = Network(*self.network_parameters)
            new_blood.initialise(self.rng)
            new_class.append(new_blood)
        while len(new_class) < self.class_size:
            new_network = Network(*self.network_parameters)
            new_network.cross(self.rng, *cream)
            new_class.append(new_network)
        self.stable = new_class
        print "Produced", len(self.stable), "new networks"
def test_crossing_networks():
    network_params = (10, 7, 4)
    net1 = Network(*network_params)
    net2 = Network(*network_params)

    rng = Random("tests")
    net1.initialise(rng)
    net2.initialise(rng)

    net3 = Network(*network_params)
    net3.cross(rng, net1, net2)