[docs]defprint_scores(population,fitness_weights):num_objectives=len(fitness_weights)objective_scores=[[]for_inrange(num_objectives)]# Collect scores for each objectiveforindinpopulation:fori,finenumerate(ind.fitness.values):objective_scores[i].append(f)# Calculate and print stats for each objectivebox_print("SCORES",print_bbox_len=110,new_line_end=True)foriinrange(num_objectives):fits=objective_scores[i]fits=[xforxinobjective_scores[i]ifmath.isfinite(x)]length=len(fits)mean=sum(fits)/lengthsum2=sum(x*xforxinfits)std=abs(sum2/length-mean**2)**0.5direction="Maximize"iffitness_weights[i]>0else"Minimize"print(f"Objective {i+1} ({direction}):")print(f" Min: {min(fits)}")print(f" Max: {max(fits)}")print(f" Avg: {mean}")print(f" Std: {std}")print()
[docs]defbox_print(txt,print_bbox_len=110,new_line_end=True):# just for logging defreplace_middle(v,x):start_pos=(len(v)-len(x))//2returnv[:start_pos]+x+v[start_pos+len(x):]v="*"+" "*(print_bbox_len-2)+"*"end='\n'ifnew_line_endelse''print_result="\n"+"*"*print_bbox_len+"\n"+replace_middle(v,txt)+"\n"+"*"*print_bbox_len+endprint(print_result,flush=True)