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