Exemplo n.º 1
0
def test_VRS_env_output_oriented_weakly_disposable_vars():
    categories, xls_data, dmu_name, sheet_name = read_data(
        'tests/DEA_example2_data.xls')
    coefficients, has_same_dmus = convert_to_dictionary(xls_data)
    assert has_same_dmus is False
    assert validate_data(categories, coefficients) is True
    data = construct_input_data_instance(categories, coefficients)
    data.add_input_category('I1')
    data.add_input_category('I2')
    data.add_input_category('I3')
    data.add_output_category('O1')
    data.add_output_category('O2')
    model = EnvelopmentModelVRSDecorator(
        EnvelopmentModelBase(
            data,
            EnvelopmentModelOutputOriented(
                generate_lower_bound_for_efficiency_score),
            DisposableVarsConstraintCreator(set(['I3', 'O1']))))

    model_solution = model.run()
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)
    dmus = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
    utils_for_tests.check_efficiency_scores(dmus, [1, 1 / 1.4107143, 1, 1,
                                                   1 / 1.821256,
                                                   1, 1, 1, 1, 1 / 1.1407407,
                                                   1], model_solution, data)
    clean_up_pickled_files()
Exemplo n.º 2
0
def test_VRS_env_output_oriented_small(model, data):
    model_solution = model.run()
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)

    dmus = ['A', 'B', 'C', 'D', 'E']
    utils_for_tests.check_efficiency_scores(
        dmus, [0.5, 1, 1, 1, 1], model_solution, data)

    utils_for_tests.check_lambda_variables('A', 'B', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('B', 'B', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('C', 'C', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('D', 'D', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('E', 'E', 1, model_solution, data)

    utils_for_tests.check_categories_for_dmu(
        'A', ['x1', 'x2', 'q'], [0.25, 0, 1], model_solution, data)
    utils_for_tests.check_categories_for_dmu(
        'C', ['x1', 'x2', 'q'], [0, 0, 0.33333333], model_solution, data)
    utils_for_tests.check_categories_for_dmu(
        'D', ['x1', 'x2', 'q'], [0.33333333, 0.66666667, 1], model_solution,
        data)
    utils_for_tests.check_categories_for_dmu(
        'E', ['x1', 'x2', 'q'], [0, 0.125, 0.5], model_solution, data)

    # B does not return the same value
    utils_for_tests.check_VRS_duals(
        ['A', 'C', 'D', 'E'], [1.5, 1, -1.3333333, 0.75], model_solution, data)
def test_maximize_slacks_usual_weakly_disposable_vars():
    categories, xls_data, dmu_name, sheet_name = read_data(
        'tests/DEA_example2_data.xls')
    coefficients, has_same_dmus = convert_to_dictionary(xls_data)
    assert has_same_dmus is False
    assert validate_data(categories, coefficients) is True
    data = construct_input_data_instance(categories, coefficients)
    data.add_input_category('I1')
    data.add_input_category('I2')
    data.add_input_category('I3')
    data.add_output_category('O1')
    data.add_output_category('O2')
    model = EnvelopmentModelVRSDecorator(
        EnvelopmentModelBase(data,
                             EnvelopmentModelInputOriented(
                                 generate_upper_bound_for_efficiency_score),
                             DisposableVarsConstraintCreator(
                             set(['I2', 'O1']))))
    model = MaximizeSlacksModel(model)
    start_time = datetime.datetime.now()
    model_solution = model.run()
    end_time = datetime.datetime.now()
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)
    dmus = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
    utils_for_tests.check_efficiency_scores(dmus, [1, 0.86998617, 1, 1, 1, 1,
                                                   1, 1, 1, 0.6386574, 1],
                                            model_solution, data)
    work_book = xlwt.Workbook()
    writer = XLSWriter(Parameters(), work_book, datetime.datetime.today(),
                       (end_time - start_time).total_seconds())
    writer.write_data(model_solution)
    work_book.save('tests/test_max_slacks_weakly_disp_vars_output.xls')
    clean_up_pickled_files()
def test_super_efficiency_medium(DEA_example2_data):
    data = DEA_example2_data
    data.add_input_category('I1')
    data.add_input_category('I2')
    data.add_input_category('I3')
    data.add_output_category('O1')
    data.add_output_category('O2')
    model = EnvelopmentModelBase(
        data,
        EnvelopmentModelInputOriented(generate_supper_efficiency_upper_bound),
        DefaultConstraintCreator())
    super_efficiency_model = SupperEfficiencyModel(model)
    start_time = datetime.datetime.now()
    solution = super_efficiency_model.run()
    end_time = datetime.datetime.now()
    utils_for_tests.check_optimal_solution_status_and_sizes(solution, data)
    dmus = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
    utils_for_tests.check_efficiency_scores(
        dmus,
        [1.652173892, 0.6485875732, 0.909247759,
         1.116838534, 0.5490716156, 2.485294106,
         1.244945494, 0.824120607, 2.299898658,
         0.6267333816, 1.088235274],
        solution, data, 1e-6)
    work_book = xlwt.Workbook()
    writer = XLSWriter(Parameters(), work_book, datetime.datetime.today(),
                       (end_time - start_time).total_seconds())
    writer.write_data(solution)
    work_book.save('tests/test_super_efficiency_output.xls')
def test_VRS_multi_output_oriented_with_weakly_disposable_vars_small(data):
    model = MultiplierModelVRSDecorator(MultiplierModelWithDisposableCategories(
        MultiplierModelBase(data, 1e-12,
                            MultiplierOutputOrientedModel()), set(['q'])))
    model_solution = model.run()
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)
    dmus = ['A', 'B', 'C', 'D', 'E']
    utils_for_tests.check_efficiency_scores(
        dmus, [0.5, 1, 1, 1, 1], model_solution, data)

    utils_for_tests.check_lambda_variables('A', 'B', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('B', 'B', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('C', 'C', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('E', 'E', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('D', 'D', 1, model_solution, data)

    utils_for_tests.check_categories_for_dmu(
        'A', ['x1', 'x2', 'q'], [0.25, 0, 1], model_solution, data)
    utils_for_tests.check_categories_for_dmu(
        'B', ['x1', 'x2', 'q'], [0.125, 0, 0.5], model_solution, data)
    utils_for_tests.check_categories_for_dmu(
        'C', ['x1', 'x2', 'q'], [0.083333333, 0, 0.33333333], model_solution,
        data)
    utils_for_tests.check_categories_for_dmu(
        'D', ['x1', 'x2', 'q'], [0.33333333, 0.66666667, 1], model_solution,
        data)
    utils_for_tests.check_categories_for_dmu(
        'E', ['x1', 'x2', 'q'], [0, 0.125, 0.5], model_solution, data)

    utils_for_tests.check_VRS_duals(
        dmus, [1.5, 0.75, 0.5, -1.3333333, 0.75], model_solution, data)
def test_CRS_env_output_oriented_non_disc_vars():
    categories, xls_data, dmu_name, sheet_name = read_data(
        'tests/DEA_example_data.xls')
    coefficients, has_same_dmus = convert_to_dictionary(xls_data)
    assert has_same_dmus is False
    assert validate_data(categories, coefficients) is True
    data = construct_input_data_instance(categories, coefficients)
    data.add_input_category('I1')
    data.add_input_category('I2')
    data.add_output_category('ND1')
    data.add_output_category('O1')
    data.add_output_category('O2')
    model = EnvelopmentModelBase(
        data,
        EnvelopmentModelOutputOrientedWithNonDiscVars(
            set(['ND1']),
            generate_lower_bound_for_efficiency_score),
        DefaultConstraintCreator())

    model_solution = model.run()
    utils_for_tests.check_optimal_solution_status_and_sizes(model_solution,
                                                            data)
    dmus = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
    utils_for_tests.check_efficiency_scores(dmus, [1, 1, 1 / 1.1698685, 1,
                                                   1 / 2.3749162, 1,
                                                   1, 1 / 1.3198374,
                                                   1 / 1.2115385,
                                                   0.5, 1], model_solution,
                                            data)
    clean_up_pickled_files()
Exemplo n.º 7
0
def test_maximize_slacks_usual_weakly_disposable_vars():
    categories, xls_data, dmu_name, sheet_name = read_data(
        'tests/DEA_example2_data.xls')
    coefficients, has_same_dmus = convert_to_dictionary(xls_data)
    assert has_same_dmus is False
    assert validate_data(categories, coefficients) is True
    data = construct_input_data_instance(categories, coefficients)
    data.add_input_category('I1')
    data.add_input_category('I2')
    data.add_input_category('I3')
    data.add_output_category('O1')
    data.add_output_category('O2')
    model = EnvelopmentModelVRSDecorator(
        EnvelopmentModelBase(
            data,
            EnvelopmentModelInputOriented(
                generate_upper_bound_for_efficiency_score),
            DisposableVarsConstraintCreator(set(['I2', 'O1']))))
    model = MaximizeSlacksModel(model)
    start_time = datetime.datetime.now()
    model_solution = model.run()
    end_time = datetime.datetime.now()
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)
    dmus = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
    utils_for_tests.check_efficiency_scores(
        dmus, [1, 0.86998617, 1, 1, 1, 1, 1, 1, 1, 0.6386574, 1],
        model_solution, data)
    work_book = xlwt.Workbook()
    writer = XLSWriter(Parameters(), work_book, datetime.datetime.today(),
                       (end_time - start_time).total_seconds())
    writer.write_data(model_solution)
    work_book.save('tests/test_max_slacks_weakly_disp_vars_output.xls')
    clean_up_pickled_files()
def test_price_ratio_restrictions_medium_env_model():
    categories, data, dmu_name, sheet_name = read_data(
        'tests/dataFromDEAbook_page181.xls')
    coefficients, has_same_dmus = convert_to_dictionary(data)
    assert has_same_dmus is False
    assert validate_data(categories, coefficients) is True
    data = construct_input_data_instance(categories, coefficients)
    print(data.categories)
    data.add_input_category('Doctors')
    data.add_input_category('Nurses')
    data.add_output_category('Outpatients')
    data.add_output_category('Inpatients')

    model = MultiplierModelBase(data, 0,
                                MultiplierInputOrientedModel())

    ratio_bounds = {('Nurses', 'Doctors'): (0.2, 5),
                    ('Inpatients', 'Outpatients'): (0.2, 5)}
    model = MultiplierModelWithPriceRatioConstraints(model, ratio_bounds)

    model_solution = model.run()
    utils_for_tests.check_if_category_is_within_price_ratio_constraints(
        model_solution, ratio_bounds)

    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)
    dmus = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'H7',
            'H8', 'H9', 'H10', 'H11', 'H12', 'H13', 'H14']
    utils_for_tests.check_efficiency_scores(dmus, [0.926, 1, 1, 0.634, 0.82, 1,
                                                   0.803, 0.872, 0.982, 1,
                                                   0.849,
                                                   0.93, 0.74, 0.929],
                                            model_solution, data, 1e-3)
    clean_up_pickled_files()
Exemplo n.º 9
0
def test_CRS_env_input_oriented_small(model, data):
    model_solution = model.run()
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)
    dmus = ['A', 'B', 'C', 'D', 'E']
    utils_for_tests.check_efficiency_scores(
        dmus, [0.5, 1, 0.83333333, 0.71428571, 1], model_solution, data)

    utils_for_tests.check_lambda_variables('A', 'B', 0.5, model_solution, data)
    utils_for_tests.check_lambda_variables('B', 'B', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('C', 'B', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('C', 'E', 0.5, model_solution, data)
    utils_for_tests.check_lambda_variables('D', 'B', 0.21428571,
                                           model_solution, data)
    utils_for_tests.check_lambda_variables('D', 'E', 0.28571429,
                                           model_solution, data)
    utils_for_tests.check_lambda_variables('E', 'E', 1, model_solution, data)

    utils_for_tests.check_categories_for_dmu('A', ['x1', 'x2', 'q'],
                                             [0.5, 0, 0.5], model_solution,
                                             data)
    utils_for_tests.check_categories_for_dmu('B', ['x1', 'x2', 'q'],
                                             [0.1, 0.2, 0.5], model_solution,
                                             data)
    utils_for_tests.check_categories_for_dmu(
        'C', ['x1', 'x2', 'q'], [0.055555556, 0.11111111, 0.27777778],
        model_solution, data)
    utils_for_tests.check_categories_for_dmu(
        'D', ['x1', 'x2', 'q'], [0.14285714, 0.28571429, 0.71428571],
        model_solution, data)
    utils_for_tests.check_categories_for_dmu('E', ['x1', 'x2', 'q'],
                                             [0.1, 0.2, 0.5], model_solution,
                                             data)
Exemplo n.º 10
0
def test_super_efficiency_medium(DEA_example2_data):
    data = DEA_example2_data
    data.add_input_category('I1')
    data.add_input_category('I2')
    data.add_input_category('I3')
    data.add_output_category('O1')
    data.add_output_category('O2')
    model = EnvelopmentModelBase(
        data,
        EnvelopmentModelInputOriented(generate_supper_efficiency_upper_bound),
        DefaultConstraintCreator())
    super_efficiency_model = SupperEfficiencyModel(model)
    start_time = datetime.datetime.now()
    solution = super_efficiency_model.run()
    end_time = datetime.datetime.now()
    utils_for_tests.check_optimal_solution_status_and_sizes(solution, data)
    dmus = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
    utils_for_tests.check_efficiency_scores(dmus, [
        1.652173892, 0.6485875732, 0.909247759, 1.116838534, 0.5490716156,
        2.485294106, 1.244945494, 0.824120607, 2.299898658, 0.6267333816,
        1.088235274
    ], solution, data, 1e-6)
    work_book = xlwt.Workbook()
    writer = XLSWriter(Parameters(), work_book, datetime.datetime.today(),
                       (end_time - start_time).total_seconds())
    writer.write_data(solution)
    work_book.save('tests/test_super_efficiency_output.xls')
def test_CRS_multi_output_oriented_small(model, data):
    model_solution = model.run()
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)
    dmus = ['A', 'B', 'C', 'D', 'E']
    utils_for_tests.check_efficiency_scores(
        dmus, [0.5, 1, 1 / 1.199999982, 1 / 1.4, 1], model_solution, data)

    utils_for_tests.check_lambda_variables('A', 'B', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('B', 'B', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('C', 'B', 1.2, model_solution, data)
    utils_for_tests.check_lambda_variables('C', 'E', 0.6, model_solution, data)
    utils_for_tests.check_lambda_variables('D', 'B', 0.3, model_solution, data)
    utils_for_tests.check_lambda_variables('D', 'E', 0.4, model_solution, data)
    utils_for_tests.check_lambda_variables('E', 'E', 1, model_solution, data)

    utils_for_tests.check_categories_for_dmu(
        'A', ['x1', 'x2', 'q'], [1, 0, 1], model_solution, data)
    utils_for_tests.check_categories_for_dmu(
        'B', ['x1', 'x2', 'q'], [0.1, 0.2, 0.5], model_solution, data)
    utils_for_tests.check_categories_for_dmu('C', ['x1', 'x2', 'q'], [
                                             0.066666667,  0.13333333,
                                             0.33333333],
                                             model_solution, data)
    utils_for_tests.check_categories_for_dmu(
        'D', ['x1', 'x2', 'q'], [0.2, 0.4, 1], model_solution, data)
    utils_for_tests.check_categories_for_dmu(
        'E', ['x1', 'x2', 'q'], [0.1, 0.2, 0.5], model_solution, data)
Exemplo n.º 12
0
def test_CRS_env_output_oriented_small(model, data):
    model_solution = model.run()
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)
    dmus = ['A', 'B', 'C', 'D', 'E']
    utils_for_tests.check_efficiency_scores(dmus,
                                            [0.5, 1, 1 / 1.2, 1 / 1.4, 1],
                                            model_solution, data)

    utils_for_tests.check_lambda_variables('A', 'B', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('B', 'B', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('C', 'B', 1.2, model_solution, data)
    utils_for_tests.check_lambda_variables('C', 'E', 0.6, model_solution, data)
    utils_for_tests.check_lambda_variables('D', 'B', 0.3, model_solution, data)
    utils_for_tests.check_lambda_variables('D', 'E', 0.4, model_solution, data)
    utils_for_tests.check_lambda_variables('E', 'E', 1, model_solution, data)

    utils_for_tests.check_categories_for_dmu('A', ['x1', 'x2', 'q'], [1, 0, 1],
                                             model_solution, data)
    utils_for_tests.check_categories_for_dmu('B', ['x1', 'x2', 'q'],
                                             [0.1, 0.2, 0.5], model_solution,
                                             data)
    utils_for_tests.check_categories_for_dmu(
        'C', ['x1', 'x2', 'q'], [0.066666667, 0.13333333, 0.33333333],
        model_solution, data)
    utils_for_tests.check_categories_for_dmu('D', ['x1', 'x2', 'q'],
                                             [0.2, 0.4, 1], model_solution,
                                             data)
    utils_for_tests.check_categories_for_dmu('E', ['x1', 'x2', 'q'],
                                             [0.1, 0.2, 0.5], model_solution,
                                             data)
Exemplo n.º 13
0
def test_CRS_env_output_oriented_non_disc_vars():
    categories, xls_data, dmu_name, sheet_name = read_data(
        'tests/DEA_example_data.xls')
    coefficients, has_same_dmus = convert_to_dictionary(xls_data)
    assert has_same_dmus is False
    assert validate_data(categories, coefficients) is True
    data = construct_input_data_instance(categories, coefficients)
    data.add_input_category('I1')
    data.add_input_category('I2')
    data.add_output_category('ND1')
    data.add_output_category('O1')
    data.add_output_category('O2')
    model = EnvelopmentModelBase(
        data,
        EnvelopmentModelOutputOrientedWithNonDiscVars(
            set(['ND1']), generate_lower_bound_for_efficiency_score),
        DefaultConstraintCreator())

    model_solution = model.run()
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)
    dmus = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
    utils_for_tests.check_efficiency_scores(dmus, [
        1, 1, 1 / 1.1698685, 1, 1 / 2.3749162, 1, 1, 1 / 1.3198374,
        1 / 1.2115385, 0.5, 1
    ], model_solution, data)
    clean_up_pickled_files()
def test_CRS_env_input_oriented_small(model, data):
    model_solution = model.run()
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)
    dmus = ['A', 'B', 'C', 'D', 'E']
    utils_for_tests.check_efficiency_scores(
        dmus, [0.5, 1, 0.83333333, 0.71428571, 1], model_solution, data)

    utils_for_tests.check_lambda_variables('A', 'B', 0.5, model_solution, data)
    utils_for_tests.check_lambda_variables('B', 'B', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('C', 'B', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('C', 'E', 0.5, model_solution, data)
    utils_for_tests.check_lambda_variables(
        'D', 'B', 0.21428571, model_solution, data)
    utils_for_tests.check_lambda_variables(
        'D', 'E', 0.28571429, model_solution, data)
    utils_for_tests.check_lambda_variables('E', 'E', 1, model_solution, data)

    utils_for_tests.check_categories_for_dmu(
        'A', ['x1', 'x2', 'q'], [0.5, 0, 0.5], model_solution, data)
    utils_for_tests.check_categories_for_dmu(
        'B', ['x1', 'x2', 'q'], [0.1, 0.2, 0.5], model_solution, data)
    utils_for_tests.check_categories_for_dmu('C', ['x1', 'x2', 'q'], [
                                             0.055555556, 0.11111111,
                                             0.27777778],
                                             model_solution, data)
    utils_for_tests.check_categories_for_dmu('D', ['x1', 'x2', 'q'], [
                                             0.14285714, 0.28571429,
                                             0.71428571],
                                             model_solution, data)
    utils_for_tests.check_categories_for_dmu(
        'E', ['x1', 'x2', 'q'], [0.1, 0.2, 0.5], model_solution, data)
Exemplo n.º 15
0
def test_run_gui(main_frame):
    filename = 'tests/params_new_format.txt'

    def get_params():
        return filename

    main_frame.params_frame._get_filename_for_load = get_params

    def get_sheet_name(names):
        return 'Sheet1'

    main_frame.data_frame.data_tab.call_dialog = get_sheet_name
    main_frame.params_frame.load_file()
    main_frame.run()
    model_solutions = main_frame.data_frame.solution_tab.model_solutions
    assert len(model_solutions) == 1
    model_solution = model_solutions[0]
    model_input = model_solution._input_data
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, model_input)
    dmus = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
    utils_for_tests.check_efficiency_scores(dmus, [
        1, 0.86998617, 1, 0.95561335, 0.85, 1, 1, 0.84507042, 1, 0.524,
        0.89058524
    ], model_solution, model_input)
def test_VRS_env_input_oriented_weakly_disposable_vars():
    categories, xls_data, dmu_name, sheet_name = read_data(
        'tests/DEA_example2_data.xls')
    coefficients, has_same_dmus = convert_to_dictionary(xls_data)
    assert has_same_dmus is False
    assert validate_data(categories, coefficients) is True
    data = construct_input_data_instance(categories, coefficients)
    data.add_input_category('I1')
    data.add_input_category('I2')
    data.add_input_category('I3')
    data.add_output_category('O1')
    data.add_output_category('O2')
    model = EnvelopmentModelVRSDecorator(
        EnvelopmentModelBase(data,
                             EnvelopmentModelInputOriented(
                             generate_upper_bound_for_efficiency_score),
                             DisposableVarsConstraintCreator(
                                set(['I2', 'O1']))))

    model_solution = model.run()
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)
    dmus = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
    utils_for_tests.check_efficiency_scores(dmus, [1, 0.86998617, 1, 1, 1, 1,
                                                   1, 1, 1, 0.6386574, 1],
                                            model_solution,
                                            data)
    clean_up_pickled_files()
def test_CRS_multi_output_oriented_with_weakly_disposable_vars_small(data):
    model = MultiplierModelWithDisposableCategories(
        MultiplierModelBase(data, 1e-12,
                            MultiplierOutputOrientedModel()), set(['x1']))
    model_solution = model.run()
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)
    dmus = ['A', 'B', 'C', 'D', 'E']
    utils_for_tests.check_efficiency_scores(
        dmus, [0.5, 1, 0.8333333458, 0.7142857143, 1], model_solution, data)

    utils_for_tests.check_lambda_variables('A', 'B', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('B', 'B', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('C', 'B', 1.2, model_solution, data)
    utils_for_tests.check_lambda_variables('C', 'E', 0.6, model_solution, data)
    utils_for_tests.check_lambda_variables('D', 'B', 0.3, model_solution, data)
    utils_for_tests.check_lambda_variables('D', 'E', 0.4, model_solution, data)
    utils_for_tests.check_lambda_variables('E', 'E', 1, model_solution, data)

    utils_for_tests.check_categories_for_dmu(
        'A', ['x1', 'x2', 'q'], [1, 0, 1], model_solution, data)
    utils_for_tests.check_categories_for_dmu(
        'B', ['x1', 'x2', 'q'], [0.5, 0, 0.5], model_solution, data)
    utils_for_tests.check_categories_for_dmu('C', ['x1', 'x2', 'q'], [
                                             0.066666667, 0.13333333,
                                             0.33333333], model_solution,
                                             data)
    utils_for_tests.check_categories_for_dmu(
        'D', ['x1', 'x2', 'q'], [0.2, 0.4, 1], model_solution, data)
    utils_for_tests.check_categories_for_dmu(
        'E', ['x1', 'x2', 'q'], [0.1, 0.2, 0.5], model_solution, data)
def test_CRS_multi_input_oriented_with_weakly_disposable_vars_small(data):
    model = MultiplierModelWithDisposableCategories(
        MultiplierModelBase(data, 1e-12,
                            MultiplierInputOrientedModel()), ['x1', 'q'])
    model_solution = model.run()
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)
    dmus = ['A', 'B', 'C', 'D', 'E']
    utils_for_tests.check_efficiency_scores(
        dmus, [0.5, 1, 0.83333334, 0.71428571, 1], model_solution, data)

    utils_for_tests.check_lambda_variables('A', 'B', 0.5, model_solution, data)
    utils_for_tests.check_lambda_variables('B', 'B', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('C', 'B', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('C', 'E', 0.5, model_solution, data)
    utils_for_tests.check_lambda_variables(
        'D', 'B', 0.21428571, model_solution, data)
    utils_for_tests.check_lambda_variables(
        'D', 'E', 0.28571429, model_solution, data)
    utils_for_tests.check_lambda_variables('E', 'E', 1, model_solution, data)

    utils_for_tests.check_categories_for_dmu(
        'A', ['x1', 'x2', 'q'], [0.5, 0, 0.5], model_solution, data)
    utils_for_tests.check_categories_for_dmu(
        'B', ['x1', 'x2', 'q'], [0.5, 0, 0.5], model_solution, data)
    utils_for_tests.check_categories_for_dmu('C', ['x1', 'x2', 'q'], [
                                             0.055555556, 0.11111111,
                                             0.27777778], model_solution,
                                             data)
    utils_for_tests.check_categories_for_dmu('D', ['x1', 'x2', 'q'], [
                                             0.14285714, 0.28571429,
                                             0.71428571], model_solution, data)
    utils_for_tests.check_categories_for_dmu(
        'E', ['x1', 'x2', 'q'], [0.1, 0.2, 0.5], model_solution, data)
def test_VRS_multi_input_oriented_small(model, data):
    model_solution = model.run()
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)

    dmus = ['A', 'B', 'C', 'D', 'E']
    utils_for_tests.check_efficiency_scores(dmus, [1, 1, 1, 1, 1],
                                            model_solution, data)

    utils_for_tests.check_lambda_variables('A', 'A', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('B', 'B', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('C', 'C', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('D', 'D', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('E', 'E', 1, model_solution, data)

    utils_for_tests.check_categories_for_dmu('A', ['x1', 'x2', 'q'],
                                             [0.5, 0, 0], model_solution, data)
    utils_for_tests.check_categories_for_dmu('B', ['x1', 'x2', 'q'],
                                             [0.25, 0.125, 0], model_solution,
                                             data)
    utils_for_tests.check_categories_for_dmu(
        'C', ['x1', 'x2', 'q'], [0.055555556, 0.11111111, 0.44444444],
        model_solution, data)
    utils_for_tests.check_categories_for_dmu('D', ['x1', 'x2', 'q'],
                                             [0.25, 0.125, 0], model_solution,
                                             data)
    utils_for_tests.check_categories_for_dmu('E', ['x1', 'x2', 'q'],
                                             [0, 0.5, 0], model_solution, data)

    utils_for_tests.check_VRS_duals(dmus, [1, 1, -0.33333333, 1, 1],
                                    model_solution, data)
def test_VRS_multi_input_oriented_small(model, data):
    model_solution = model.run()
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)

    dmus = ['A', 'B', 'C', 'D', 'E']
    utils_for_tests.check_efficiency_scores(
        dmus, [1, 1, 1, 1, 1], model_solution, data)

    utils_for_tests.check_lambda_variables('A', 'A', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('B', 'B', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('C', 'C', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('D', 'D', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('E', 'E', 1, model_solution, data)

    utils_for_tests.check_categories_for_dmu(
        'A', ['x1', 'x2', 'q'], [0.5, 0, 0], model_solution, data)
    utils_for_tests.check_categories_for_dmu(
        'B', ['x1', 'x2', 'q'], [0.25, 0.125, 0], model_solution, data)
    utils_for_tests.check_categories_for_dmu('C', ['x1', 'x2', 'q'], [
                                             0.055555556, 0.11111111,
                                             0.44444444],
                                             model_solution, data)
    utils_for_tests.check_categories_for_dmu(
        'D', ['x1', 'x2', 'q'], [0.25, 0.125, 0], model_solution, data)
    utils_for_tests.check_categories_for_dmu(
        'E', ['x1', 'x2', 'q'], [0, 0.5, 0], model_solution, data)

    utils_for_tests.check_VRS_duals(
        dmus, [1, 1, -0.33333333, 1, 1], model_solution, data)
def test_CRS_multi_output_oriented_with_weakly_disposable_vars_small(data):
    model = MultiplierModelWithDisposableCategories(
        MultiplierModelBase(data, 1e-12, MultiplierOutputOrientedModel()),
        set(['x1']))
    model_solution = model.run()
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)
    dmus = ['A', 'B', 'C', 'D', 'E']
    utils_for_tests.check_efficiency_scores(
        dmus, [0.5, 1, 0.8333333458, 0.7142857143, 1], model_solution, data)

    utils_for_tests.check_lambda_variables('A', 'B', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('B', 'B', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('C', 'B', 1.2, model_solution, data)
    utils_for_tests.check_lambda_variables('C', 'E', 0.6, model_solution, data)
    utils_for_tests.check_lambda_variables('D', 'B', 0.3, model_solution, data)
    utils_for_tests.check_lambda_variables('D', 'E', 0.4, model_solution, data)
    utils_for_tests.check_lambda_variables('E', 'E', 1, model_solution, data)

    utils_for_tests.check_categories_for_dmu('A', ['x1', 'x2', 'q'], [1, 0, 1],
                                             model_solution, data)
    utils_for_tests.check_categories_for_dmu('B', ['x1', 'x2', 'q'],
                                             [0.5, 0, 0.5], model_solution,
                                             data)
    utils_for_tests.check_categories_for_dmu(
        'C', ['x1', 'x2', 'q'], [0.066666667, 0.13333333, 0.33333333],
        model_solution, data)
    utils_for_tests.check_categories_for_dmu('D', ['x1', 'x2', 'q'],
                                             [0.2, 0.4, 1], model_solution,
                                             data)
    utils_for_tests.check_categories_for_dmu('E', ['x1', 'x2', 'q'],
                                             [0.1, 0.2, 0.5], model_solution,
                                             data)
Exemplo n.º 22
0
def _check_large_model(model_solution, data):
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)

    dmus = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
    utils_for_tests.check_efficiency_scores(dmus, [
        1, 0.64858757, 0.90924776, 1, 0.54907162, 1, 1, 0.8241206, 1,
        0.62673338, 1
    ], model_solution, data)
def _check_large_model_CRS_multi_output_oriented_with_non_discretionary(
        model_solution, data):
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)
    dmus = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
    utils_for_tests.check_efficiency_scores(dmus, [
        1, 0.3085412442, 0.8305229413, 1, 0.5294117616, 1, 1, 0.1538535738, 1,
        0.2627956766, 1
    ], model_solution, data)
def _check_large_model_CRS_multi_output_oriented_with_non_discretionary(
        model_solution, data):
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)
    dmus = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
    utils_for_tests.check_efficiency_scores(dmus, [1, 0.3085412442,
                                                   0.8305229413,
                                                   1, 0.5294117616,
                                                   1, 1, 0.1538535738, 1,
                                                   0.2627956766, 1],
                                            model_solution, data)
def _check_large_model(model_solution, data):
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)

    dmus = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
    utils_for_tests.check_efficiency_scores(dmus, [1, 0.64858757,
                                                   0.90924776, 1,
                                                   0.54907162, 1, 1,
                                                   0.8241206, 1,
                                                   0.62673338, 1],
                                            model_solution, data)
Exemplo n.º 26
0
def test_peel_the_onion_VRS_multi(categorical_data):
    categorical_data.add_input_category('rein')
    categorical_data.add_output_category('aus')
    model = MultiplierModelVRSDecorator(
        MultiplierModelBase(categorical_data, 0,
                            MultiplierInputOrientedModel()))

    solution, ranks, state = peel_the_onion_method(model)
    utils_for_tests.check_optimal_solution_status_and_sizes(
        solution, categorical_data)
    dmus = ['B', 'C', 'D', 'E', 'F', 'G']
    utils_for_tests.check_efficiency_scores(dmus, [1, 0.5, 1, 0.99999998,
                                                   0.75, 0.50000001],
                                            solution, categorical_data, 1e-7)

    expected_ranks = [1, 2, 1, 1, 2, 2]
    utils_for_tests.check_onion_ranks(
        model.input_data, dmus, expected_ranks, ranks)
Exemplo n.º 27
0
def test_peel_the_onion_VRS_multi(categorical_data):
    categorical_data.add_input_category('rein')
    categorical_data.add_output_category('aus')
    model = MultiplierModelVRSDecorator(
        MultiplierModelBase(categorical_data, 0,
                            MultiplierInputOrientedModel()))

    solution, ranks, state = peel_the_onion_method(model)
    utils_for_tests.check_optimal_solution_status_and_sizes(
        solution, categorical_data)
    dmus = ['B', 'C', 'D', 'E', 'F', 'G']
    utils_for_tests.check_efficiency_scores(dmus, [1, 0.5, 1, 0.99999998,
                                                   0.75, 0.50000001],
                                            solution, categorical_data, 1e-7)

    expected_ranks = [1, 2, 1, 1, 2, 2]
    utils_for_tests.check_onion_ranks(
        model.input_data, dmus, expected_ranks, ranks)
def test_CRS_multi_input_oriented_with_non_discretionary_vars(data):
    model = MultiplierModelInputOrientedWithNonDiscVars(
        MultiplierModelBase(data, 1e-12, MultiplierInputOrientedModel()),
        set(['x1']))

    model_solution = model.run()
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)
    dmus = ['A', 'B', 'C', 'D', 'E']
    utils_for_tests.check_efficiency_scores(dmus,
                                            [0.3, 1, 0.750000012, 0.5, 1],
                                            model_solution, data)

    utils_for_tests.check_lambda_variables('A', 'B', 0.25, model_solution,
                                           data)
    utils_for_tests.check_lambda_variables('A', 'E', 0.25, model_solution,
                                           data)
    utils_for_tests.check_lambda_variables('B', 'B', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('C', 'B', 0.75, model_solution,
                                           data)
    utils_for_tests.check_lambda_variables('C', 'E', 0.75, model_solution,
                                           data)
    utils_for_tests.check_lambda_variables('D', 'E', 0.5, model_solution, data)
    utils_for_tests.check_lambda_variables('E', 'E', 1, model_solution, data)

    utils_for_tests.check_categories_for_dmu('A', ['x1', 'x2', 'q'],
                                             [0.1, 0.2, 0.5], model_solution,
                                             data)
    utils_for_tests.check_categories_for_dmu('B', ['x1', 'x2', 'q'],
                                             [0.125, 0.25, 0.625],
                                             model_solution, data)
    utils_for_tests.check_categories_for_dmu(
        'C', ['x1', 'x2', 'q'], [0.083333333, 0.16666667, 0.41666667],
        model_solution, data)
    utils_for_tests.check_categories_for_dmu('D', ['x1', 'x2', 'q'],
                                             [0, 0.5, 0.5], model_solution,
                                             data)
    utils_for_tests.check_categories_for_dmu('E', ['x1', 'x2', 'q'],
                                             [0, 0.5, 0.5], model_solution,
                                             data)
Exemplo n.º 29
0
def test_CRS_env_input_oriented_non_disc_vars(DEA_example_data):
    data = DEA_example_data
    data.add_input_category('I1')
    data.add_input_category('I2')
    data.add_input_category('ND1')
    data.add_output_category('O1')
    data.add_output_category('O2')
    model = EnvelopmentModelBase(
        data,
        EnvelopmentModelInputOrientedWithNonDiscVars(
            set(['ND1']), generate_upper_bound_for_efficiency_score),
        DefaultConstraintCreator())

    model_solution = model.run()

    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)
    dmus = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
    utils_for_tests.check_efficiency_scores(dmus, [
        1, 0.62939304, 0.95095971, 1, 0.42525889, 1, 1, 0.82672274, 1,
        0.53385106, 1
    ], model_solution, data)
def test_VRS_from_params_file():
    params = parse_parameters_from_file('tests/params_new_format.txt')

    categories, xls_data, dmu_name, sheet_name = read_data(
        params.get_parameter_value('DATA_FILE'))
    coefficients, has_same_dmus = convert_to_dictionary(xls_data)
    assert has_same_dmus is False
    assert validate_data(categories, coefficients) is True
    model_input = construct_input_data_instance(categories, coefficients)

    model_factory.add_input_and_output_categories(params, model_input)

    model = model_factory.create_model(params, model_input)
    model_solution = model.run()
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, model_input)
    dmus = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
    utils_for_tests.check_efficiency_scores(dmus, [1, 0.86998617, 1, 0.95561335,
                                                   0.85,
                                                   1, 1, 0.84507042, 1,
                                                   0.524, 0.89058524],
                                            model_solution, model_input)
    clean_up_pickled_files()
def test_CRS_multi_input_oriented_with_weakly_disposable_vars_small(data):
    model = MultiplierModelWithDisposableCategories(
        MultiplierModelBase(data, 1e-12, MultiplierInputOrientedModel()),
        ['x1', 'q'])
    model_solution = model.run()
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)
    dmus = ['A', 'B', 'C', 'D', 'E']
    utils_for_tests.check_efficiency_scores(
        dmus, [0.5, 1, 0.83333334, 0.71428571, 1], model_solution, data)

    utils_for_tests.check_lambda_variables('A', 'B', 0.5, model_solution, data)
    utils_for_tests.check_lambda_variables('B', 'B', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('C', 'B', 1, model_solution, data)
    utils_for_tests.check_lambda_variables('C', 'E', 0.5, model_solution, data)
    utils_for_tests.check_lambda_variables('D', 'B', 0.21428571,
                                           model_solution, data)
    utils_for_tests.check_lambda_variables('D', 'E', 0.28571429,
                                           model_solution, data)
    utils_for_tests.check_lambda_variables('E', 'E', 1, model_solution, data)

    utils_for_tests.check_categories_for_dmu('A', ['x1', 'x2', 'q'],
                                             [0.5, 0, 0.5], model_solution,
                                             data)
    utils_for_tests.check_categories_for_dmu('B', ['x1', 'x2', 'q'],
                                             [0.5, 0, 0.5], model_solution,
                                             data)
    utils_for_tests.check_categories_for_dmu(
        'C', ['x1', 'x2', 'q'], [0.055555556, 0.11111111, 0.27777778],
        model_solution, data)
    utils_for_tests.check_categories_for_dmu(
        'D', ['x1', 'x2', 'q'], [0.14285714, 0.28571429, 0.71428571],
        model_solution, data)
    utils_for_tests.check_categories_for_dmu('E', ['x1', 'x2', 'q'],
                                             [0.1, 0.2, 0.5], model_solution,
                                             data)
def test_price_ratio_restrictions_medium_env_model():
    categories, data, dmu_name, sheet_name = read_data(
        'tests/dataFromDEAbook_page181.xls')
    coefficients, has_same_dmus = convert_to_dictionary(data)
    assert has_same_dmus is False
    assert validate_data(categories, coefficients) is True
    data = construct_input_data_instance(categories, coefficients)
    print(data.categories)
    data.add_input_category('Doctors')
    data.add_input_category('Nurses')
    data.add_output_category('Outpatients')
    data.add_output_category('Inpatients')

    model = MultiplierModelBase(data, 0, MultiplierInputOrientedModel())

    ratio_bounds = {
        ('Nurses', 'Doctors'): (0.2, 5),
        ('Inpatients', 'Outpatients'): (0.2, 5)
    }
    model = MultiplierModelWithPriceRatioConstraints(model, ratio_bounds)

    model_solution = model.run()
    utils_for_tests.check_if_category_is_within_price_ratio_constraints(
        model_solution, ratio_bounds)

    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)
    dmus = [
        'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'H7', 'H8', 'H9', 'H10', 'H11',
        'H12', 'H13', 'H14'
    ]
    utils_for_tests.check_efficiency_scores(dmus, [
        0.926, 1, 1, 0.634, 0.82, 1, 0.803, 0.872, 0.982, 1, 0.849, 0.93, 0.74,
        0.929
    ], model_solution, data, 1e-3)
    clean_up_pickled_files()
Exemplo n.º 33
0
def test_run_gui(main_frame):
    filename = 'tests/params_new_format.txt'

    def get_params():
        return filename
    main_frame.params_frame._get_filename_for_load = get_params

    def get_sheet_name(names):
        return 'Sheet1'
    main_frame.data_frame.data_tab.call_dialog = get_sheet_name
    main_frame.params_frame.load_file()
    main_frame.run()
    model_solutions = main_frame.data_frame.solution_tab.model_solutions
    assert len(model_solutions) == 1
    model_solution = model_solutions[0]
    model_input = model_solution._input_data
    utils_for_tests.check_optimal_solution_status_and_sizes(model_solution,
                                                            model_input)
    dmus = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
    utils_for_tests.check_efficiency_scores(dmus, [1, 0.86998617, 1, 0.95561335,
                                                   0.85,
                                                   1, 1, 0.84507042, 1,
                                                   0.524, 0.89058524],
                                            model_solution, model_input)
def test_CRS_multi_input_oriented_with_non_discretionary_vars(data):
    model = MultiplierModelInputOrientedWithNonDiscVars(
        MultiplierModelBase(data, 1e-12,
                            MultiplierInputOrientedModel()), set(['x1']))

    model_solution = model.run()
    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)
    dmus = ['A', 'B', 'C', 'D', 'E']
    utils_for_tests.check_efficiency_scores(
        dmus, [0.3, 1, 0.750000012, 0.5, 1], model_solution, data)

    utils_for_tests.check_lambda_variables(
        'A', 'B', 0.25, model_solution, data)
    utils_for_tests.check_lambda_variables(
        'A', 'E', 0.25, model_solution, data)
    utils_for_tests.check_lambda_variables('B', 'B', 1, model_solution, data)
    utils_for_tests.check_lambda_variables(
        'C', 'B', 0.75, model_solution, data)
    utils_for_tests.check_lambda_variables(
        'C', 'E', 0.75, model_solution, data)
    utils_for_tests.check_lambda_variables('D', 'E', 0.5, model_solution, data)
    utils_for_tests.check_lambda_variables('E', 'E', 1, model_solution, data)

    utils_for_tests.check_categories_for_dmu(
        'A', ['x1', 'x2', 'q'], [0.1, 0.2, 0.5], model_solution, data)
    utils_for_tests.check_categories_for_dmu(
        'B', ['x1', 'x2', 'q'], [0.125, 0.25, 0.625], model_solution, data)
    utils_for_tests.check_categories_for_dmu('C', ['x1', 'x2', 'q'], [
                                             0.083333333, 0.16666667,
                                             0.41666667], model_solution,
                                             data)
    utils_for_tests.check_categories_for_dmu(
        'D', ['x1', 'x2', 'q'], [0, 0.5, 0.5], model_solution, data)
    utils_for_tests.check_categories_for_dmu(
        'E', ['x1', 'x2', 'q'], [0, 0.5, 0.5], model_solution, data)
def test_CRS_env_input_oriented_non_disc_vars(DEA_example_data):
    data = DEA_example_data
    data.add_input_category('I1')
    data.add_input_category('I2')
    data.add_input_category('ND1')
    data.add_output_category('O1')
    data.add_output_category('O2')
    model = EnvelopmentModelBase(
        data,
        EnvelopmentModelInputOrientedWithNonDiscVars(
            set(['ND1']),
            generate_upper_bound_for_efficiency_score),
        DefaultConstraintCreator())

    model_solution = model.run()

    utils_for_tests.check_optimal_solution_status_and_sizes(
        model_solution, data)
    dmus = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
    utils_for_tests.check_efficiency_scores(dmus, [1, 0.62939304, 0.95095971,
                                                   1, 0.42525889,
                                                   1, 1, 0.82672274, 1,
                                                   0.53385106, 1],
                                            model_solution, data)