예제 #1
0
    def mutation(self):
        """
        突然変異させる
        このメソッドはサブクラスでoverrideすることを想定している
        """
        if not flip(self.mutation_rate):
            return

        for i in range(len(self.gene)):
            if flip(self.mutation_parameter):
                self.gene[i] = 0 if self.gene[i] else 1
예제 #2
0
 def perform_mutation(self):
     """
     それぞれの個体にランダムに突然変異を実行する
     """
     if not flip(self.mutation_rate):
         return
     for entity in self.entities:
         entity.mutation()
예제 #3
0
    def crossover(self, mother, father):
        """
        交叉を行う

        このメソッドはサブクラスでoverrideすることを想定している
        """
        child1 = Entity([], self.mutation_rate, self.mutation_parameter)
        child2 = Entity([], self.mutation_rate, self.mutation_parameter)
        if not flip(self.crossover_rate):
            return ()
        else:
            for (m, f) in zip(mother.gene, father.gene):
                if flip(self.crossover_parameter):
                    child1.gene.append(m)
                    child2.gene.append(f)
                else:
                    child1.gene.append(f)
                    child2.gene.append(m)
            return (child1, child2)
예제 #4
0
 def random_gene(length):
     gene = []
     for j in range(length):
         b = 1 if flip(0.5) else 0
         gene.append(b)
     return gene