@@ -578,10 +578,31 @@ def adaptive_mutation_by_space(self, offspring):
578
578
# Adaptive mutation changes one or more genes in each offspring randomly.
579
579
# The number of genes to mutate depends on the solution's fitness value.
580
580
for offspring_idx in range (offspring .shape [0 ]):
581
- if offspring_fitness [offspring_idx ] < average_fitness :
582
- adaptive_mutation_num_genes = self .mutation_num_genes [0 ]
581
+ ## TODO Make edits to work with multi-objective optimization.
582
+ # Compare the fitness of each offspring to the average fitness of each objective function.
583
+ fitness_comparison = offspring_fitness [offspring_idx ] < average_fitness
584
+
585
+ # Check if the problem is single or multi-objective optimization.
586
+ if type (fitness_comparison ) in [bool , numpy .bool_ ]:
587
+ # Single-objective optimization problem.
588
+ if offspring_fitness [offspring_idx ] < average_fitness :
589
+ adaptive_mutation_num_genes = self .mutation_num_genes [0 ]
590
+ else :
591
+ adaptive_mutation_num_genes = self .mutation_num_genes [1 ]
583
592
else :
584
- adaptive_mutation_num_genes = self .mutation_num_genes [1 ]
593
+ # Multi-objective optimization problem.
594
+
595
+ # Get the sum of the pool array (result of comparison).
596
+ # True is considered 1 and False is 0.
597
+ fitness_comparison_sum = sum (fitness_comparison )
598
+ # Check if more than or equal to 50% of the objectives have fitness greater than the average.
599
+ # If True, then use the first percentage.
600
+ # If False, use the second percentage.
601
+ if fitness_comparison_sum >= len (fitness_comparison )/ 2 :
602
+ adaptive_mutation_num_genes = self .mutation_num_genes [0 ]
603
+ else :
604
+ adaptive_mutation_num_genes = self .mutation_num_genes [1 ]
605
+
585
606
mutation_indices = numpy .array (random .sample (range (0 , self .num_genes ), adaptive_mutation_num_genes ))
586
607
for gene_idx in mutation_indices :
587
608
@@ -703,6 +724,7 @@ def adaptive_mutation_randomly(self, offspring):
703
724
## TODO Make edits to work with multi-objective optimization.
704
725
# Compare the fitness of each offspring to the average fitness of each objective function.
705
726
fitness_comparison = offspring_fitness [offspring_idx ] < average_fitness
727
+
706
728
# Check if the problem is single or multi-objective optimization.
707
729
if type (fitness_comparison ) in [bool , numpy .bool_ ]:
708
730
# Single-objective optimization problem.
@@ -791,10 +813,30 @@ def adaptive_mutation_probs_by_space(self, offspring):
791
813
# Adaptive random mutation changes one or more genes in each offspring randomly.
792
814
# The probability of mutating a gene depends on the solution's fitness value.
793
815
for offspring_idx in range (offspring .shape [0 ]):
794
- if offspring_fitness [offspring_idx ] < average_fitness :
795
- adaptive_mutation_probability = self .mutation_probability [0 ]
816
+ ## TODO Make edits to work with multi-objective optimization.
817
+ # Compare the fitness of each offspring to the average fitness of each objective function.
818
+ fitness_comparison = offspring_fitness [offspring_idx ] < average_fitness
819
+
820
+ # Check if the problem is single or multi-objective optimization.
821
+ if type (fitness_comparison ) in [bool , numpy .bool_ ]:
822
+ # Single-objective optimization problem.
823
+ if offspring_fitness [offspring_idx ] < average_fitness :
824
+ adaptive_mutation_probability = self .mutation_probability [0 ]
825
+ else :
826
+ adaptive_mutation_probability = self .mutation_probability [1 ]
796
827
else :
797
- adaptive_mutation_probability = self .mutation_probability [1 ]
828
+ # Multi-objective optimization problem.
829
+
830
+ # Get the sum of the pool array (result of comparison).
831
+ # True is considered 1 and False is 0.
832
+ fitness_comparison_sum = sum (fitness_comparison )
833
+ # Check if more than or equal to 50% of the objectives have fitness greater than the average.
834
+ # If True, then use the first percentage.
835
+ # If False, use the second percentage.
836
+ if fitness_comparison_sum >= len (fitness_comparison )/ 2 :
837
+ adaptive_mutation_probability = self .mutation_probability [0 ]
838
+ else :
839
+ adaptive_mutation_probability = self .mutation_probability [1 ]
798
840
799
841
probs = numpy .random .random (size = offspring .shape [1 ])
800
842
for gene_idx in range (offspring .shape [1 ]):
@@ -914,10 +956,30 @@ def adaptive_mutation_probs_randomly(self, offspring):
914
956
# Adaptive random mutation changes one or more genes in each offspring randomly.
915
957
# The probability of mutating a gene depends on the solution's fitness value.
916
958
for offspring_idx in range (offspring .shape [0 ]):
917
- if offspring_fitness [offspring_idx ] < average_fitness :
918
- adaptive_mutation_probability = self .mutation_probability [0 ]
959
+ ## TODO Make edits to work with multi-objective optimization.
960
+ # Compare the fitness of each offspring to the average fitness of each objective function.
961
+ fitness_comparison = offspring_fitness [offspring_idx ] < average_fitness
962
+
963
+ # Check if the problem is single or multi-objective optimization.
964
+ if type (fitness_comparison ) in [bool , numpy .bool_ ]:
965
+ # Single-objective optimization problem.
966
+ if offspring_fitness [offspring_idx ] < average_fitness :
967
+ adaptive_mutation_probability = self .mutation_probability [0 ]
968
+ else :
969
+ adaptive_mutation_probability = self .mutation_probability [1 ]
919
970
else :
920
- adaptive_mutation_probability = self .mutation_probability [1 ]
971
+ # Multi-objective optimization problem.
972
+
973
+ # Get the sum of the pool array (result of comparison).
974
+ # True is considered 1 and False is 0.
975
+ fitness_comparison_sum = sum (fitness_comparison )
976
+ # Check if more than or equal to 50% of the objectives have fitness greater than the average.
977
+ # If True, then use the first percentage.
978
+ # If False, use the second percentage.
979
+ if fitness_comparison_sum >= len (fitness_comparison )/ 2 :
980
+ adaptive_mutation_probability = self .mutation_probability [0 ]
981
+ else :
982
+ adaptive_mutation_probability = self .mutation_probability [1 ]
921
983
922
984
probs = numpy .random .random (size = offspring .shape [1 ])
923
985
for gene_idx in range (offspring .shape [1 ]):
0 commit comments