def test_scaling_solve():
    md = ModelData.read(tiny_uc_7_fn)

    assert md.data['system']['baseMVA'] == 1.
    mdo_unscaled = solve_unit_commitment(md, test_solver, relaxed=True)

    md.data['system']['baseMVA'] = 100.
    mdo_scaled = solve_unit_commitment(md, test_solver, relaxed=True)

    assert math.isclose(mdo_scaled.data['system']['total_cost'],
                        mdo_unscaled.data['system']['total_cost'])
Exemple #2
0
    def test_individual_generator_stack_graph(self):
        """Tests stack graph generation when plotting individual generators."""
        current_dir = os.path.dirname(os.path.abspath(__file__))
        test_cases = [
            os.path.join(current_dir, '..', '..', 'models', 'tests',
                         'uc_test_instances', 'test_case_{}.json'.format(i))
            for i in range(1, 2)
        ]

        for test_case in test_cases:
            with open(test_case, 'r') as f:
                md_dict = json.load(f)
            md = ModelData(md_dict)

            solved_md = solve_unit_commitment(
                md,
                'cbc',
                mipgap=0.001,
                timelimit=None,
                solver_tee=True,
                symbolic_solver_labels=False,
                solver_options=None,
                uc_model_generator=create_tight_unit_commitment_model,
                relaxed=False,
                return_model=False)

            with self.assertRaises(ValueError):
                # The number of generators in the test case exceeds the maximum for this feature.
                fig, ax = generate_stack_graph(
                    solved_md,
                    title=repr(test_case),
                    show_individual_components=False,
                    plot_individual_generators=True,
                )
Exemple #3
0
    def test_individual_component_stack_graph(self):
        """Tests stack graph generation when breaking out individual components per generation type."""
        current_dir = os.path.dirname(os.path.abspath(__file__))
        test_cases = [
            os.path.join(current_dir, '..', '..', 'models', 'tests',
                         'uc_test_instances', 'test_case_{}.json'.format(i))
            for i in range(1, 2)
        ]

        for test_case in test_cases:
            with open(test_case, 'r') as f:
                md_dict = json.load(f)
            md = ModelData(md_dict)

            solved_md = solve_unit_commitment(
                md,
                'cbc',
                mipgap=0.001,
                timelimit=None,
                solver_tee=True,
                symbolic_solver_labels=False,
                solver_options=None,
                uc_model_generator=create_tight_unit_commitment_model,
                relaxed=False,
                return_model=False)

            fig, ax = generate_stack_graph(
                solved_md,
                title=repr(test_case),
                show_individual_components=True,
                plot_individual_generators=False,
            )
Exemple #4
0
    def test_individual_generator_stack_graph_exception(self):
        """Tests for stack graph generation to fail when both 'show_individual_components' and 'plot_individual_generators' are simultaneously True."""
        current_dir = os.path.dirname(os.path.abspath(__file__))
        test_cases = [
            os.path.join(current_dir, '..', '..', 'models', 'tests',
                         'uc_test_instances', 'test_case_{}.json'.format(i))
            for i in range(1, 2)
        ]

        for test_case in test_cases:
            with open(test_case, 'r') as f:
                md_dict = json.load(f)
            md = ModelData(md_dict)

            solved_md = solve_unit_commitment(
                md,
                'cbc',
                mipgap=0.001,
                timelimit=None,
                solver_tee=True,
                symbolic_solver_labels=False,
                solver_options=None,
                uc_model_generator=create_tight_unit_commitment_model,
                relaxed=False,
                return_model=False)

            with self.assertRaises(ValueError):
                # You cannot set both options to True simultaneously.
                fig, ax = generate_stack_graph(
                    solved_md,
                    title=repr(test_case),
                    show_individual_components=True,
                    plot_individual_generators=True,
                )
Exemple #5
0
## Example of solving a unit commitment problem in egret format
## from the test instance library
import os

from egret.data.model_data import ModelData
from egret.models.unit_commitment import solve_unit_commitment

this_module_path = os.path.dirname(os.path.abspath(__file__))
## Create an Egret "ModelData" object, which is just a lightweight
## wrapper around a python dictionary, from an Egret json test instance
print('Creating and solving tiny_uc_tc')
md = ModelData.read(
    os.path.join(this_module_path, '..', '..', 'egret', 'models', 'tests',
                 'uc_test_instances', 'tiny_uc_tc.json'))

## solve the unit commitment instance using solver cbc
md_sol = solve_unit_commitment(md,
                               'cbc',
                               mipgap=0.01,
                               timelimit=300,
                               solver_tee=True)
print('Solved!')

## print the objective value to the screen
print('Objective value:', md_sol.data['system']['total_cost'])

## write the solution to an Egret *.json file
md_sol.write(os.path.join(this_module_path, 'tiny_uc_tc_solution.json'))
print('Wrote solution to tiny_uc_tc_solution.json')
def main():
    import json
    from egret.models.unit_commitment import solve_unit_commitment, create_tight_unit_commitment_model

    current_dir = os.path.dirname(os.path.abspath(__file__))

    TEST_WITH_RTS_GMLC = False

    if TEST_WITH_RTS_GMLC:
        # Test using RTS-GMLC case, if available
        from egret.parsers.rts_gmlc_parser import create_ModelData

        rts_gmlc_dir = os.path.join(current_dir, '..', '..', '..', 'RTS-GMLC')
        begin_time = "2020-07-01"
        end_time = "2020-07-02"

        md = create_ModelData(
            rts_gmlc_dir,
            begin_time,
            end_time,
            # simulation="DAY_AHEAD", t0_state = None,
        )

        solved_md = solve_unit_commitment(
            md,
            'cbc',
            mipgap=0.001,
            timelimit=None,
            solver_tee=True,
            symbolic_solver_labels=False,
            solver_options=None,
            uc_model_generator=create_tight_unit_commitment_model,
            relaxed=False,
            return_model=False)

        fig, ax = generate_stack_graph(
            solved_md,
            title=begin_time,
            show_individual_components=False,
            plot_individual_generators=False,
            x_tick_frequency=4,
        )
    else:
        ## Test using built-in unit commitment unit test case(s)
        from egret.data.model_data import ModelData

        test_cases = [
            os.path.join(current_dir, '..', 'models', 'tests',
                         'uc_test_instances', 'tiny_uc_{}.json'.format(i))
            for i in range(1, 7)
        ]

        for test_case in test_cases:
            with open(test_case, 'r') as f:
                md_dict = json.load(f)
            md = ModelData(md_dict)

            solved_md = solve_unit_commitment(
                md,
                'cbc',
                mipgap=0.001,
                timelimit=None,
                solver_tee=True,
                symbolic_solver_labels=False,
                solver_options=None,
                uc_model_generator=create_tight_unit_commitment_model,
                relaxed=False,
                return_model=False)

            fig, ax = generate_stack_graph(
                solved_md,
                title=test_case,
                show_individual_components=True,
                plot_individual_generators=False,
                x_tick_frequency=4,
            )

    plt.show()
Exemple #7
0
    end_time = "2020-07-06"

    md = create_ModelData(
        rts_gmlc_dir,
        begin_time,
        end_time,
        simulation="DAY_AHEAD",
        t0_state=None,
    )

    solved_md = solve_unit_commitment(
        md,
        'gurobi',
        mipgap=0.001,
        timelimit=None,
        solver_tee=True,
        symbolic_solver_labels=False,
        options=None,
        uc_model_generator=create_tight_unit_commitment_model,
        relaxed=False,
        return_model=False)

    fig, ax = generate_stack_graph(
        solved_md,
        title=begin_time,
        show_individual_components=False,
        plot_individual_generators=False,
        x_tick_frequency=4,
    )

    plt.show()
Exemple #8
0
def main():
    import json
    from egret.models.unit_commitment import solve_unit_commitment, create_tight_unit_commitment_model

    current_dir = os.path.dirname(os.path.abspath(__file__))

    ## Test using unit commitment unit test case(s)
    from egret.data.model_data import ModelData

    test_cases = [
        os.path.join(current_dir, '..', 'models', 'tests', 'uc_test_instances',
                     'test_case_{}.json'.format(i)) for i in range(1, 6)
    ]

    for test_case in test_cases:
        with open(test_case, 'r') as f:
            md_dict = json.load(f)
        md = ModelData(md_dict)

        solved_md = solve_unit_commitment(
            md,
            'cbc',
            mipgap=0.001,
            timelimit=None,
            solver_tee=True,
            symbolic_solver_labels=False,
            options=None,
            uc_model_generator=create_tight_unit_commitment_model,
            relaxed=False,
            return_model=False)

        fig, ax = generate_stack_graph(
            solved_md,
            title=repr(test_case),
            show_individual_components=True,
            plot_individual_generators=False,
        )

    ## Test using RTS-GMLC case
    # from egret.parsers.rts_gmlc_parser import create_ModelData

    # rts_gmlc_dir = os.path.join(current_dir, '..', '..', '..', 'RTS-GMLC')
    # begin_time = "2020-07-01"
    # end_time = "2020-07-02"

    # md = create_ModelData(
    #     rts_gmlc_dir, begin_time, end_time,
    #     # simulation="DAY_AHEAD", t0_state = None,
    #     )

    # solved_md = solve_unit_commitment(md,
    #                 'cbc',
    #                 mipgap = 0.001,
    #                 timelimit = None,
    #                 solver_tee = True,
    #                 symbolic_solver_labels = False,
    #                 options = None,
    #                 uc_model_generator=create_tight_unit_commitment_model,
    #                 relaxed=False,
    #                 return_model=False)

    # fig, ax = generate_stack_graph(
    #     solved_md,
    #     title=begin_time,
    #     show_individual_components=False,
    #     plot_individual_generators=False,
    #     x_tick_frequency=4,
    # )

    plt.show()