1414def number_calls_fitness_function (keep_elitism = 1 ,
1515 keep_parents = - 1 ,
1616 mutation_type = "random" ,
17- mutation_percent_genes = "default" ):
17+ mutation_percent_genes = "default" ,
18+ parent_selection_type = 'sss' ,
19+ multi_objective = False ):
1820
1921 actual_num_fitness_calls = 0
20- def fitness_func (ga , solution , idx ):
22+ def fitness_func_no_batch_single (ga , solution , idx ):
2123 nonlocal actual_num_fitness_calls
2224 actual_num_fitness_calls = actual_num_fitness_calls + 1
2325 return 1
2426
27+ def fitness_func_no_batch_multi (ga_instance , solution , solution_idx ):
28+ nonlocal actual_num_fitness_calls
29+ actual_num_fitness_calls = actual_num_fitness_calls + 1
30+ return [1 , 1 ]
31+
32+ if multi_objective == True :
33+ fitness_func = fitness_func_no_batch_multi
34+ else :
35+ fitness_func = fitness_func_no_batch_single
36+
2537 ga_optimizer = pygad .GA (num_generations = num_generations ,
2638 sol_per_pop = sol_per_pop ,
2739 num_genes = 6 ,
2840 num_parents_mating = num_parents_mating ,
2941 fitness_func = fitness_func ,
3042 mutation_type = mutation_type ,
43+ parent_selection_type = parent_selection_type ,
3144 mutation_percent_genes = mutation_percent_genes ,
3245 keep_elitism = keep_elitism ,
3346 keep_parents = keep_parents ,
@@ -64,46 +77,68 @@ def test_number_calls_fitness_function_default_keep():
6477 actual , expected = number_calls_fitness_function ()
6578 assert actual == expected
6679
67- def test_number_calls_fitness_function_no_keep ():
80+ def test_number_calls_fitness_function_no_keep (multi_objective = False ,
81+ parent_selection_type = 'sss' ):
6882 actual , expected = number_calls_fitness_function (keep_elitism = 0 ,
69- keep_parents = 0 )
83+ keep_parents = 0 ,
84+ parent_selection_type = parent_selection_type ,
85+ multi_objective = multi_objective )
7086 assert actual == expected
7187
72- def test_number_calls_fitness_function_keep_elitism ():
88+ def test_number_calls_fitness_function_keep_elitism (multi_objective = False ,
89+ parent_selection_type = 'sss' ):
7390 actual , expected = number_calls_fitness_function (keep_elitism = 3 ,
74- keep_parents = 0 )
91+ keep_parents = 0 ,
92+ parent_selection_type = parent_selection_type ,
93+ multi_objective = multi_objective )
7594 assert actual == expected
7695
77- def test_number_calls_fitness_function_keep_parents ():
96+ def test_number_calls_fitness_function_keep_parents (multi_objective = False ,
97+ parent_selection_type = 'sss' ):
7898 actual , expected = number_calls_fitness_function (keep_elitism = 0 ,
79- keep_parents = 4 )
99+ keep_parents = 4 ,
100+ parent_selection_type = parent_selection_type ,
101+ multi_objective = multi_objective )
80102 assert actual == expected
81103
82- def test_number_calls_fitness_function_both_keep ():
104+ def test_number_calls_fitness_function_both_keep (multi_objective = False ,
105+ parent_selection_type = 'sss' ):
83106 actual , expected = number_calls_fitness_function (keep_elitism = 3 ,
84- keep_parents = 4 )
107+ keep_parents = 4 ,
108+ parent_selection_type = parent_selection_type ,
109+ multi_objective = multi_objective )
85110 assert actual == expected
86111
87- def test_number_calls_fitness_function_no_keep_adaptive_mutation ():
112+ def test_number_calls_fitness_function_no_keep_adaptive_mutation (multi_objective = False ,
113+ parent_selection_type = 'sss' ):
88114 actual , expected = number_calls_fitness_function (keep_elitism = 0 ,
89115 keep_parents = 0 ,
116+ parent_selection_type = parent_selection_type ,
90117 mutation_type = "adaptive" ,
91- mutation_percent_genes = [10 , 5 ])
118+ mutation_percent_genes = [10 , 5 ],
119+ multi_objective = multi_objective )
92120 assert actual == expected
93121
94- def test_number_calls_fitness_function_default_adaptive_mutation ():
122+ def test_number_calls_fitness_function_default_adaptive_mutation (multi_objective = False ,
123+ parent_selection_type = 'sss' ):
95124 actual , expected = number_calls_fitness_function (mutation_type = "adaptive" ,
96- mutation_percent_genes = [10 , 5 ])
125+ parent_selection_type = parent_selection_type ,
126+ mutation_percent_genes = [10 , 5 ],
127+ multi_objective = multi_objective )
97128 assert actual == expected
98129
99- def test_number_calls_fitness_function_both_keep_adaptive_mutation ():
130+ def test_number_calls_fitness_function_both_keep_adaptive_mutation (multi_objective = False ,
131+ parent_selection_type = 'sss' ):
100132 actual , expected = number_calls_fitness_function (keep_elitism = 3 ,
101133 keep_parents = 4 ,
134+ parent_selection_type = parent_selection_type ,
102135 mutation_type = "adaptive" ,
103- mutation_percent_genes = [10 , 5 ])
136+ mutation_percent_genes = [10 , 5 ],
137+ multi_objective = multi_objective )
104138 assert actual == expected
105139
106140if __name__ == "__main__" :
141+ #### Single-objective
107142 print ()
108143 test_number_calls_fitness_function_default_keep ()
109144 print ()
@@ -121,3 +156,45 @@ def test_number_calls_fitness_function_both_keep_adaptive_mutation():
121156 print ()
122157 test_number_calls_fitness_function_both_keep_adaptive_mutation ()
123158 print ()
159+
160+ #### Multi-Objective
161+ print ()
162+ test_number_calls_fitness_function_no_keep (multi_objective = True )
163+ print ()
164+ test_number_calls_fitness_function_keep_elitism (multi_objective = True )
165+ print ()
166+ test_number_calls_fitness_function_keep_parents (multi_objective = True )
167+ print ()
168+ test_number_calls_fitness_function_both_keep (multi_objective = True )
169+ print ()
170+ test_number_calls_fitness_function_no_keep_adaptive_mutation (multi_objective = True )
171+ print ()
172+ test_number_calls_fitness_function_default_adaptive_mutation (multi_objective = True )
173+ print ()
174+ test_number_calls_fitness_function_both_keep_adaptive_mutation (multi_objective = True )
175+ print ()
176+
177+ #### Multi-Objective NSGA-II Parent Selection
178+ print ()
179+ test_number_calls_fitness_function_no_keep (multi_objective = True ,
180+ parent_selection_type = 'nsga2' )
181+ print ()
182+ test_number_calls_fitness_function_keep_elitism (multi_objective = True ,
183+ parent_selection_type = 'nsga2' )
184+ print ()
185+ test_number_calls_fitness_function_keep_parents (multi_objective = True ,
186+ parent_selection_type = 'nsga2' )
187+ print ()
188+ test_number_calls_fitness_function_both_keep (multi_objective = True ,
189+ parent_selection_type = 'nsga2' )
190+ print ()
191+ test_number_calls_fitness_function_no_keep_adaptive_mutation (multi_objective = True ,
192+ parent_selection_type = 'nsga2' )
193+ print ()
194+ test_number_calls_fitness_function_default_adaptive_mutation (multi_objective = True ,
195+ parent_selection_type = 'nsga2' )
196+ print ()
197+ test_number_calls_fitness_function_both_keep_adaptive_mutation (multi_objective = True ,
198+ parent_selection_type = 'nsga2' )
199+ print ()
200+
0 commit comments