示例#1
0
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)
示例#2
0
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)
示例#3
0
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
示例#4
0
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)