def main(): pop = Population(popSize=args.popSize, mProb=args.mProb, xProb=args.xProb, tournament_size=args.tournamentSize, verbose=args.verbose) pop.calc_fit_stats() # main loop for i in range(args.nGenerations): print('Generation {}'.format(i)) # apply genetic steps pop.tournament_selection() pop.CrossOver() pop.Mutation pop.evaluate_fitnesses() # print statistics to console if i % args.print_every == 0: max_fitness, avg_fitness, std_fitness = pop.calc_fit_stats() best = pop.find_best_fit_chromosome best_cluster_assignment = best.cluster_assignment best_pupil_assignment = \ dataHandler.derive_pupil_assignment_from_cluster_assignment(best_cluster_assignment) num_pupils = dataHandler.calc_numbers_of_pupils_in_classes( best_pupil_assignment) friends_violations = dataHandler.calc_num_friends_violations( best_pupil_assignment) anti_friends_violations = dataHandler.calc_num_anti_friends_violations( best_pupil_assignment) print('Generation {}/{}, Avg fitmess: {:1.3f}({:1.3f})), best fitness: {:1.3f}, \ num pupils: {} \ friends violations: {}, anti-friends violations: {}'\ .format(i, args.nGenerations, avg_fitness, std_fitness, max_fitness, num_pupils, friends_violations, anti_friends_violations )) print('Finished searching') best = pop.find_best_fit_chromosome best_cluster_assignment = best.cluster_assignment best_pupil_assignment = \ dataHandler.derive_pupil_assignment_from_cluster_assignment(best_cluster_assignment)