@@ -26,7 +26,7 @@ def _initialize_optimizer(
26
26
objective : Objective ,
27
27
objectives : List [Objective ],
28
28
space : Optional [ps .ParameterSpace ] = None ,
29
- seed = 42 ,
29
+ seed : Optional [ int ] = None ,
30
30
) -> Optimizer :
31
31
if space is None :
32
32
space = ps .ParameterSpace ()
@@ -35,6 +35,7 @@ def _initialize_optimizer(
35
35
space .add (ps .ContinuousParameter ("p3" , (0 , 1 )))
36
36
space .add (ps .CategoricalParameter ("p4" , [True , False ]))
37
37
space .add (ps .OrdinalParameter ("p5" , ("small" , "medium" , "large" )))
38
+ space .seed (seed )
38
39
39
40
if issubclass (optimizer_class , MultiObjectiveOptimizer ):
40
41
return optimizer_class (space , objectives , seed = seed , ** optimizer_kwargs )
@@ -50,6 +51,7 @@ def optimize_single_parameter_sequentially_for_n_max_evaluations(
50
51
Type [SingleObjectiveOptimizer ], Type [MultiObjectiveOptimizer ]
51
52
],
52
53
optimizer_kwargs : dict ,
54
+ seed : Optional [int ] = None ,
53
55
n_max_evaluations : int = 20 ,
54
56
):
55
57
"""[summary]
@@ -58,6 +60,7 @@ def optimize_single_parameter_sequentially_for_n_max_evaluations(
58
60
optimizer_class: [description]
59
61
optimizer_kwargs: [description]
60
62
n_max_evaluations: [description]
63
+ seed: (optional) custom seed
61
64
62
65
Returns:
63
66
[description]
@@ -76,6 +79,7 @@ def quadratic_function(p1):
76
79
optimizer_kwargs ,
77
80
objective = Objective ("loss" , False ),
78
81
objectives = [Objective ("loss" , False ), Objective ("score" , True )],
82
+ seed = seed ,
79
83
)
80
84
81
85
eval_spec = optimizer .generate_evaluation_specification ()
@@ -114,6 +118,7 @@ def is_deterministic_with_fixed_seed_and_larger_space(
114
118
Type [SingleObjectiveOptimizer ], Type [MultiObjectiveOptimizer ]
115
119
],
116
120
optimizer_kwargs : dict ,
121
+ seed : Optional [int ] = None ,
117
122
):
118
123
"""Check if optimizer is deterministic.
119
124
@@ -129,6 +134,7 @@ def is_deterministic_with_fixed_seed_and_larger_space(
129
134
optimizer_kwargs: Expected to contain additional arguments for initializing
130
135
the optimizer. (`search_space` and `objective(s)` are set automatically
131
136
by the test.)
137
+ seed: (optional) custom seed
132
138
133
139
Returns:
134
140
`True` if the test is passed.
@@ -145,7 +151,7 @@ def is_deterministic_with_fixed_seed_and_larger_space(
145
151
optimizer_kwargs ,
146
152
objective = Objective ("loss" , False ),
147
153
objectives = [Objective ("loss" , False )],
148
- seed = 42 ,
154
+ seed = seed or 42 ,
149
155
)
150
156
151
157
for i in range (n_evaluations ):
@@ -166,6 +172,7 @@ def is_deterministic_when_reporting_shuffled_evaluations(
166
172
Type [SingleObjectiveOptimizer ], Type [MultiObjectiveOptimizer ]
167
173
],
168
174
optimizer_kwargs : dict ,
175
+ seed : Optional [int ] = None ,
169
176
):
170
177
"""Check if determinism isn't affected by the order of initially reported data.
171
178
@@ -181,13 +188,15 @@ def is_deterministic_when_reporting_shuffled_evaluations(
181
188
optimizer_kwargs: Expected to contain additional arguments for initializing
182
189
the optimizer. (`search_space` and `objective(s)` are set automatically
183
190
by the test.)
191
+ seed: (optional) custom seed
184
192
185
193
Returns:
186
194
`True` if the test is passed.
187
195
"""
188
196
189
197
space = ps .ParameterSpace ()
190
198
space .add (ps .ContinuousParameter ("p1" , (0 , 1 )))
199
+ space .seed (seed )
191
200
192
201
def _run_experiment_1d (es ):
193
202
x = es .configuration ["p1" ]
@@ -205,7 +214,7 @@ def _run_experiment_1d(es):
205
214
objective = Objective ("loss" , False ),
206
215
objectives = [Objective ("loss" , False )],
207
216
space = space ,
208
- seed = 0 ,
217
+ seed = seed or 0 ,
209
218
)
210
219
211
220
# Report initial data in different order
@@ -217,8 +226,8 @@ def _run_experiment_1d(es):
217
226
)
218
227
for es in eval_specs
219
228
]
220
- random .seed (run_idx )
221
- random .shuffle (run ["initial_evaluations" ])
229
+ shuffle_rng = random .Random (run_idx )
230
+ shuffle_rng .shuffle (run ["initial_evaluations" ])
222
231
opt .report (run ["initial_evaluations" ])
223
232
224
233
# Start optimizing
@@ -246,6 +255,7 @@ def handles_reporting_evaluations_list(
246
255
Type [SingleObjectiveOptimizer ], Type [MultiObjectiveOptimizer ]
247
256
],
248
257
optimizer_kwargs : dict ,
258
+ seed : Optional [int ] = None ,
249
259
):
250
260
"""Check if optimizer's report method can process an iterable of evaluations.
251
261
@@ -259,6 +269,7 @@ def handles_reporting_evaluations_list(
259
269
optimizer_kwargs: Expected to contain additional arguments for initializing
260
270
the optimizer. (`search_space` and `objective(s)` are set automatically
261
271
by the test.)
272
+ seed: (optional) custom seed
262
273
263
274
Returns:
264
275
`True` if the test is passed.
@@ -268,7 +279,7 @@ def handles_reporting_evaluations_list(
268
279
optimizer_kwargs ,
269
280
objective = Objective ("loss" , False ),
270
281
objectives = [Objective ("loss" , False )],
271
- seed = 42 ,
282
+ seed = seed ,
272
283
)
273
284
evaluations = []
274
285
for i in range (3 ):
@@ -286,6 +297,7 @@ def raises_evaluation_error_when_reporting_unknown_objective(
286
297
Type [SingleObjectiveOptimizer ], Type [MultiObjectiveOptimizer ]
287
298
],
288
299
optimizer_kwargs : dict ,
300
+ seed : Optional [int ] = None ,
289
301
):
290
302
"""Check if optimizer's report method raises exception in case objective is unknown.
291
303
@@ -297,6 +309,7 @@ def raises_evaluation_error_when_reporting_unknown_objective(
297
309
optimizer_kwargs: Expected to contain additional arguments for initializing
298
310
the optimizer. (`search_space` and `objective(s)` are set automatically
299
311
by the test.)
312
+ seed: (optional) custom seed
300
313
301
314
Returns:
302
315
`True` if the test is passed.
@@ -306,6 +319,7 @@ def raises_evaluation_error_when_reporting_unknown_objective(
306
319
optimizer_kwargs ,
307
320
objective = Objective ("loss" , False ),
308
321
objectives = [Objective ("loss" , False )],
322
+ seed = seed ,
309
323
)
310
324
es_1 = opt .generate_evaluation_specification ()
311
325
es_2 = opt .generate_evaluation_specification ()
@@ -341,6 +355,7 @@ def respects_fixed_parameter(
341
355
Type [SingleObjectiveOptimizer ], Type [MultiObjectiveOptimizer ]
342
356
],
343
357
optimizer_kwargs : dict ,
358
+ seed : Optional [int ] = None ,
344
359
):
345
360
"""Check if optimizer's generated evaluation specifications contain the values
346
361
a parameter in the search space was fixed to.
@@ -350,13 +365,15 @@ def respects_fixed_parameter(
350
365
optimizer_kwargs: Expected to contain additional arguments for initializing
351
366
the optimizer. (`search_space` and `objective(s)` are set automatically
352
367
by the test.)
368
+ seed: (optional) custom seed
353
369
354
370
Returns:
355
371
`True` if the test is passed.
356
372
"""
357
373
space = ps .ParameterSpace ()
358
374
space .add (ps .ContinuousParameter ("my_fixed_param" , (- 10.0 , 200.0 )))
359
375
space .add (ps .ContinuousParameter ("x" , (- 2.0 , 2.0 )))
376
+ space .seed (seed )
360
377
361
378
fixed_value = 1.0
362
379
space .fix (my_fixed_param = fixed_value )
@@ -366,6 +383,7 @@ def respects_fixed_parameter(
366
383
objective = Objective ("loss" , False ),
367
384
objectives = [Objective ("loss" , False )],
368
385
space = space ,
386
+ seed = seed ,
369
387
)
370
388
for _ in range (5 ):
371
389
es = opt .generate_evaluation_specification ()
@@ -383,6 +401,7 @@ def handles_conditional_space(
383
401
Type [SingleObjectiveOptimizer ], Type [MultiObjectiveOptimizer ]
384
402
],
385
403
optimizer_kwargs : dict ,
404
+ seed : Optional [int ] = None ,
386
405
):
387
406
"""Check if optimizer handles conditional i.e. hierarchical search spaces.
388
407
@@ -391,6 +410,7 @@ def handles_conditional_space(
391
410
optimizer_kwargs: Expected to contain additional arguments for initializing
392
411
the optimizer. (`search_space` and `objective(s)` are set automatically
393
412
by the test.)
413
+ seed: (optional) custom seed
394
414
395
415
Returns:
396
416
`True` if the test is passed.
@@ -402,13 +422,15 @@ def handles_conditional_space(
402
422
ps .ContinuousParameter ("momentum" , (0.0 , 1.0 )),
403
423
lambda optimizer : optimizer == "sgd" ,
404
424
)
425
+ space .seed (seed )
405
426
406
427
opt = _initialize_optimizer (
407
428
optimizer_class ,
408
429
optimizer_kwargs ,
409
430
objective = Objective ("loss" , False ),
410
431
objectives = [Objective ("loss" , False )],
411
432
space = space ,
433
+ seed = seed ,
412
434
)
413
435
414
436
for _ in range (10 ):
0 commit comments