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'])
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, )
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, )
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, )
## 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()
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()
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()