14
14
def number_calls_fitness_function (keep_elitism = 1 ,
15
15
keep_parents = - 1 ,
16
16
mutation_type = "random" ,
17
- mutation_percent_genes = "default" ):
17
+ mutation_percent_genes = "default" ,
18
+ parent_selection_type = 'sss' ,
19
+ multi_objective = False ):
18
20
19
21
actual_num_fitness_calls = 0
20
- def fitness_func (ga , solution , idx ):
22
+ def fitness_func_no_batch_single (ga , solution , idx ):
21
23
nonlocal actual_num_fitness_calls
22
24
actual_num_fitness_calls = actual_num_fitness_calls + 1
23
25
return 1
24
26
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
+
25
37
ga_optimizer = pygad .GA (num_generations = num_generations ,
26
38
sol_per_pop = sol_per_pop ,
27
39
num_genes = 6 ,
28
40
num_parents_mating = num_parents_mating ,
29
41
fitness_func = fitness_func ,
30
42
mutation_type = mutation_type ,
43
+ parent_selection_type = parent_selection_type ,
31
44
mutation_percent_genes = mutation_percent_genes ,
32
45
keep_elitism = keep_elitism ,
33
46
keep_parents = keep_parents ,
@@ -64,46 +77,68 @@ def test_number_calls_fitness_function_default_keep():
64
77
actual , expected = number_calls_fitness_function ()
65
78
assert actual == expected
66
79
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' ):
68
82
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 )
70
86
assert actual == expected
71
87
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' ):
73
90
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 )
75
94
assert actual == expected
76
95
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' ):
78
98
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 )
80
102
assert actual == expected
81
103
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' ):
83
106
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 )
85
110
assert actual == expected
86
111
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' ):
88
114
actual , expected = number_calls_fitness_function (keep_elitism = 0 ,
89
115
keep_parents = 0 ,
116
+ parent_selection_type = parent_selection_type ,
90
117
mutation_type = "adaptive" ,
91
- mutation_percent_genes = [10 , 5 ])
118
+ mutation_percent_genes = [10 , 5 ],
119
+ multi_objective = multi_objective )
92
120
assert actual == expected
93
121
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' ):
95
124
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 )
97
128
assert actual == expected
98
129
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' ):
100
132
actual , expected = number_calls_fitness_function (keep_elitism = 3 ,
101
133
keep_parents = 4 ,
134
+ parent_selection_type = parent_selection_type ,
102
135
mutation_type = "adaptive" ,
103
- mutation_percent_genes = [10 , 5 ])
136
+ mutation_percent_genes = [10 , 5 ],
137
+ multi_objective = multi_objective )
104
138
assert actual == expected
105
139
106
140
if __name__ == "__main__" :
141
+ #### Single-objective
107
142
print ()
108
143
test_number_calls_fitness_function_default_keep ()
109
144
print ()
@@ -121,3 +156,45 @@ def test_number_calls_fitness_function_both_keep_adaptive_mutation():
121
156
print ()
122
157
test_number_calls_fitness_function_both_keep_adaptive_mutation ()
123
158
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