Beispiel #1
0
    def set_best_makespan(self):
        ## List sorted to get the best end
        makespan_sorted = sorted(self.makespan, key=self.get_end, reverse=True)
        current_best: Activity = Activity.empty_activity()
        current_best.end = 1000000
        index_current_best = 0

        if not len(self.best_makespan) == 0:
            current_best: Activity = self.best_makespan[len(self.best_makespan)
                                                        - 1]

        new_best: Activity = makespan_sorted[0]

        is_better = new_best.end < current_best.end

        if is_better:
            index: int = self.makespan.index(new_best)
            self.best_makespan = copy.deepcopy(self.chromosomes[index].genes)
            self.fitness_reference = copy.deepcopy(new_best)

        for chromosome in self.chromosomes:
            act = max(chromosome.genes, key=self.get_end)
            new_fitness = float(new_best.end) / float(act.end)
            chromosome.fitness = new_fitness
            #print(f'new fitness {new_fitness}')

        print('\n\nCurrent best: ')
        current_best.print_activity()

        print('New best: ')
        self.best_makespan[len(self.best_makespan) - 1].print_activity()
        print('\n')
Beispiel #2
0
 def __init__(self, nPob: int, generations, mutation_rate: float = 0.3):
     if (not nPob % 2 == 0 or not nPob > 2):
         raise Exception(
             f'The populations must be an even number {nPob} and greater than 2'
         )
     self.nPob = nPob
     self.chromosomes = []
     self.makespan = []
     self.best_makespan = []
     self.generations = generations
     self.mutation_rate = mutation_rate
     self.fitness_reference = Activity.empty_activity()