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')
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()