Skip to content

Commit 4458968

Browse files
test: add unit tests for SHGO and Basin Hopping optimizers
1 parent 65ab0a2 commit 4458968

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

tests/test_optimization.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,3 +292,53 @@ def test_workers(self):
292292
optimizer = optimization.DifferentialEvolution(problem)
293293
result = optimizer.optimize(maxiter=10, disp=False, workers=-1)
294294
assert result.success
295+
296+
297+
class TestSHGO:
298+
def test_optimize(self):
299+
lens = Microscope20x()
300+
problem = optimization.OptimizationProblem()
301+
problem.add_variable(lens, 'radius', surface_number=1,
302+
min_val=10, max_val=100)
303+
input_data = {'optic': lens}
304+
problem.add_operand(operand_type='f2', target=90, weight=1.0,
305+
input_data=input_data)
306+
optimizer = optimization.SHGO(problem)
307+
result = optimizer.optimize()
308+
assert result.success
309+
310+
def test_raise_error_no_bounds(self):
311+
lens = Microscope20x()
312+
problem = optimization.OptimizationProblem()
313+
problem.add_variable(lens, 'radius', surface_number=1)
314+
input_data = {'optic': lens}
315+
problem.add_operand(operand_type='f2', target=90, weight=1.0,
316+
input_data=input_data)
317+
optimizer = optimization.SHGO(problem)
318+
with pytest.raises(ValueError):
319+
optimizer.optimize()
320+
321+
322+
class TestBasinHopping:
323+
def test_optimize(self):
324+
lens = Microscope20x()
325+
problem = optimization.OptimizationProblem()
326+
problem.add_variable(lens, 'radius', surface_number=1)
327+
input_data = {'optic': lens}
328+
problem.add_operand(operand_type='f2', target=90, weight=1.0,
329+
input_data=input_data)
330+
optimizer = optimization.BasinHopping(problem)
331+
result = optimizer.optimize(niter=10)
332+
assert result.fun < problem.initial_value
333+
334+
def test_raise_error_with_bounds(self):
335+
lens = Microscope20x()
336+
problem = optimization.OptimizationProblem()
337+
problem.add_variable(lens, 'radius', surface_number=1,
338+
min_val=10, max_val=100)
339+
input_data = {'optic': lens}
340+
problem.add_operand(operand_type='f2', target=90, weight=1.0,
341+
input_data=input_data)
342+
optimizer = optimization.BasinHopping(problem)
343+
with pytest.raises(ValueError):
344+
optimizer.optimize(niter=10)

0 commit comments

Comments
 (0)