def test_cp_method_on_second_analytical_example(): print( '# Test Cutting Plane Method on Second Analytical Example (1 eq, 1 ineq)' ) # see definition of AnalyticalExampleInnerProblem for problem and solution statement analytical_inner_problem = SecondAnalyticalExampleInnerProblem() dual_method = CuttingPlanesMethod( analytical_inner_problem.oracle, analytical_inner_problem.projection_function, dimension=analytical_inner_problem.dimension, epsilon=0.01, sense='max') logger = EnhancedDualMethodLogger(dual_method) for iteration in range(5): # print(dual_method.lambda_k) # print(dual_method.d_k) dual_method.dual_step() # Method should end close to lambda* = [1,0] np.testing.assert_allclose(logger.lambda_k_iterates[-1], np.array([1, 0]), atol=0.01) # with value close to dual optimum d*=-1 np.testing.assert_allclose(logger.d_k_iterates[-1], -1.02, atol=0.02)
def test_UFGM_on_second_analytical_example(): print('# Test UFGM on Second Analytical Example (1 eq, 1 ineq)') # see definition of AnalyticalExampleInnerProblem for problem and solution statement analytical_inner_problem = SecondAnalyticalExampleInnerProblem() dual_method = UniversalFGM(analytical_inner_problem.oracle, analytical_inner_problem.projection_function, dimension=analytical_inner_problem.dimension, epsilon=0.01) # epsilon=0.5) logger = DualDgmFgmMethodLogger(dual_method) for iteration in range(40): # print(dual_method.lambda_k) # print(dual_method.d_k) # print(logger.L_k_iterates) dual_method.dual_step() # Method should end close to lambda* np.testing.assert_allclose(logger.lambda_k_iterates[-1], np.array([1., 0.]), atol=0.1) # with value close to dual optimum np.testing.assert_allclose(logger.d_k_iterates[-1], -1, atol=0.1)
def test_slimlogger_recorder(): ip = SecondAnalyticalExampleInnerProblem() # method, logger method = DualMethodsFactory(ip, 'SG 1/k', 1.5) logger = SlimDualMethodLogger(method) N_ORACLE_CALLS = 3 # run while method.oracle_calls < N_ORACLE_CALLS: method.dual_step() assert len(logger.d_k_iterates) == 3 assert type(time.localtime(logger.start_time[0]).tm_year) == int
def test_slimlogger_recorder(): # instantiate ip (first instance of 2 stage) # ip = BenchmarkInnerProblemsFactory(type='supply chains', subtype='all', instance_n=0) # ip = BenchmarkInnerProblemsFactory(type='2 stage stoch', subtype='dcap', instance_n=0) ip = SecondAnalyticalExampleInnerProblem() # method, logger method = DualMethodsFactory(ip, 'SG 1/k', 1.5) logger = SlimDualMethodLogger(method) N_ORACLE_CALLS = 3 # run while method.oracle_calls < N_ORACLE_CALLS: method.dual_step() # execute recorder record_logger(logger)