Пример #1
0
def test_basic_acv_optimizers_give_consistent_output(acv_optimizer, mocker):
    exponents = [4, 3, 2, 1]
    covariance = _monomial_model_covariance(exponents)
    model_costs = _monomial_model_costs(exponents)
    target_cost = 10
    optimizer = Optimizer.get_algorithm(acv_optimizer)(model_costs,
                                                       covariance=covariance)

    constraints = optimizer._get_constraints(target_cost)

    np.random.seed(0)
    for i in range(25):
        valid_ratios = \
            _generate_random_ratios_fulfilling_constraints(constraints,
                                                           model_costs)
        mocker.patch.object(Optimizer.get_algorithm(acv_optimizer),
                            '_solve_opt_problem',
                            return_value=valid_ratios)

        opt_result = optimizer.optimize(target_cost)
        _assert_opt_result_is_consistent(covariance, model_costs, opt_result)
Пример #2
0
def test_acvmfmc_known_solution(cost_factor, covariance_factor, mocker):
    covariance = np.array([[1, 0.5], [0.5, 1]]) * covariance_factor
    model_costs = np.array([4800, 4])
    optimizer = Optimizer(model_costs, covariance)

    ratios_for_opt = np.array([20])
    mocker.patch.object(Optimizer.get_algorithm("acvmfmc"),
                        '_solve_opt_problem',
                        return_value=ratios_for_opt)

    cost_ref = 14640 * cost_factor
    var_ref = 61 / 240 * covariance_factor / cost_factor
    allocation_ref = np.array(
        [[3 * cost_factor, 1, 1, 1], [57 * cost_factor, 0, 0, 1]], dtype=int)

    target_cost = 14640 * cost_factor
    opt_result = optimizer.optimize(algorithm="acvmfmc",
                                    target_cost=target_cost)
    assert_opt_result_equal(opt_result, cost_ref, var_ref, allocation_ref)
Пример #3
0
def test_acvmf_three_models_known_solution(cost_factor, covariance_factor,
                                           mocker):
    covariance = np.array([[1, 0.75, 0.25], [0.75, 1., 0.5], [0.25, 0.5, 1.]
                           ]) * covariance_factor
    model_costs = np.array([3, 2, 1])
    optimizer = Optimizer(model_costs, covariance)

    ratios_for_opt = np.array([1, 2])
    mocker.patch.object(Optimizer.get_algorithm("wrdiff"),
                        '_solve_opt_problem',
                        return_value=ratios_for_opt)

    cost_ref = 10. * cost_factor
    var_ref = 0.6931818181818182 * covariance_factor / cost_factor
    allocation_ref = np.array(
        [[1 * cost_factor, 1, 1, 0, 0, 0], [1 * cost_factor, 0, 0, 1, 1, 0],
         [2 * cost_factor, 0, 0, 0, 0, 1]],
        dtype=int)

    target_cost = 10 * cost_factor
    opt_result = optimizer.optimize(algorithm="wrdiff",
                                    target_cost=target_cost)
    assert_opt_result_equal(opt_result, cost_ref, var_ref, allocation_ref)