@@ -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