def create_um(input_data, timesteps): """ Creates an urbs model for given input, time steps Args: input_data: input data timesteps: simulation timesteps Returns: model: a model instance """ # create model print('CREATING urbs MODEL') start = time.perf_counter() model = urbs.create_model(input_data, 1, timesteps) end = time.perf_counter() # solve model and read results optim = SolverFactory('glpk') result = optim.solve(model, logfile='urbs_log.txt', tee=False) # write LP file filename = os.path.join(os.path.dirname(__file__), 'mimo_urbs.lp') model.write(filename, io_options={'symbolic_solver_labels': True}) return model, end - start
def run_scenario(input_file, timesteps, scenario, result_dir, plot_tuples=None, plot_periods=None, report_tuples=None): """ run an urbs model for given input, time steps and scenario Args: input_file: filename to an Excel spreadsheet for urbs.read_excel timesteps: a list of timesteps, e.g. range(0,8761) scenario: a scenario function that modifies the input data dict result_dir: directory name for result spreadsheet and plots plot_tuples: (optional) list of plot tuples (c.f. urbs.result_figures) plot_periods: (optional) dict of plot periods (c.f. urbs.result_figures) report_tuples: (optional) list of (sit, com) tuples (c.f. urbs.report) Returns: the urbs model instance """ # scenario name, read and modify data for scenario sce = scenario.__name__ data = urbs.read_excel(input_file) data = scenario(data) # create model prob = urbs.create_model(data, timesteps) # refresh time stamp string and create filename for logfile now = prob.created log_filename = os.path.join(result_dir, '{}.log').format(sce) # solve model and read results optim = SolverFactory('glpk') # cplex, glpk, gurobi, ... optim = setup_solver(optim, logfile=log_filename) result = optim.solve(prob, tee=True) # copy input file to result directory shutil.copyfile(input_file, os.path.join(result_dir, input_file)) # save problem solution (and input data) to HDF5 file urbs.save(prob, os.path.join(result_dir, '{}.h5'.format(sce))) # write report to spreadsheet urbs.report(prob, os.path.join(result_dir, '{}.xlsx').format(sce), report_tuples=report_tuples) # result plots urbs.result_figures(prob, os.path.join(result_dir, '{}'.format(sce)), plot_title_prefix=sce.replace('_', ' '), plot_tuples=plot_tuples, periods=plot_periods, figure_size=(24, 9)) return prob
def run_scenario(input_file, timesteps, scenario, result_dir, plot_periods={}): """ run an urbs model for given input, time steps and scenario Args: input_file: filename to an Excel spreadsheet for urbs.read_excel timesteps: a list of timesteps, e.g. range(0,8761) scenario: a scenario function that modifies the input data dict result_dir: directory name for result spreadsheet and plots Returns: the urbs model instance """ # scenario name, read and modify data for scenario sce = scenario.__name__ data = urbs.read_excel(input_file) data = scenario(data) # create model prob = urbs.create_model(data, timesteps) if PYOMO3: prob = prob.create() # refresh time stamp string and create filename for logfile now = prob.created log_filename = os.path.join(result_dir, '{}.log').format(sce) # solve model and read results optim = SolverFactory('glpk') # cplex, glpk, gurobi, ... optim = setup_solver(optim, logfile=log_filename) result = optim.solve(prob, tee=True) if PYOMO3: prob.load(result) else: prob.solutions.load_from(result) # copy input file in result directory cdir = os.getcwd() respath = os.path.join(cdir, result_dir) shutil.copy(input_file,respath) # write report to spreadsheet urbs.report( prob, os.path.join(result_dir, '{}.xlsx').format(sce), prob.com_demand, prob.sit) # store optimisation problem for later re-analysis urbs.save( prob, os.path.join(result_dir, '{}.pgz').format(sce)) urbs.result_figures( prob, os.path.join(result_dir, '{}'.format(sce)), plot_title_prefix=sce.replace('_', ' ').title(), periods=plot_periods) return prob
def run_scenario(input_file, timesteps, scenario, result_dir, plot_tuples=None, plot_periods=None, report_tuples=None): """ run an urbs model for given input, time steps and scenario Args: input_file: filename to an Excel spreadsheet for urbs.read_excel timesteps: a list of timesteps, e.g. range(0,8761) scenario: a scenario function that modifies the input data dict result_dir: directory name for result spreadsheet and plots plot_tuples: (optional) list of plot tuples (c.f. urbs.result_figures) plot_periods: (optional) dict of plot periods (c.f. urbs.result_figures) report_tuples: (optional) list of (sit, com) tuples (c.f. urbs.report) Returns: the urbs model instance """ # scenario name, read and modify data for scenario sce = scenario.__name__ data = urbs.read_excel(input_file) data = scenario(data) # create model prob = urbs.create_model(data, timesteps) # refresh time stamp string and create filename for logfile now = prob.created log_filename = os.path.join(result_dir, '{}.log').format(sce) # solve model and read results optim = SolverFactory('glpk') # cplex, glpk, gurobi, ... optim = setup_solver(optim, logfile=log_filename) result = optim.solve(prob, tee=True) # copy input file to result directory shutil.copyfile(input_file, os.path.join(result_dir, input_file)) # save problem solution (and input data) to HDF5 file urbs.save(prob, os.path.join(result_dir, '{}.h5'.format(sce))) # write report to spreadsheet urbs.report( prob, os.path.join(result_dir, '{}.xlsx').format(sce), report_tuples=report_tuples) # result plots urbs.result_figures( prob, os.path.join(result_dir, '{}'.format(sce)), plot_title_prefix=sce.replace('_', ' '), plot_tuples=plot_tuples, periods=plot_periods, figure_size=(24, 9)) return prob
def run_scenario(input_file, timesteps, scenario, result_dir, plot_periods={}): """ run an urbs model for given input, time steps and scenario Args: input_file: filename to an Excel spreadsheet for urbs.read_excel timesteps: a list of timesteps, e.g. range(0,8761) scenario: a scenario function that modifies the input data dict result_dir: directory name for result spreadsheet and plots Returns: the urbs model instance """ # scenario name, read and modify data for scenario sce = scenario.__name__ data = urbs.read_excel(input_file) data = scenario(data) # create model model = urbs.create_model(data, timesteps) prob = model.create() # refresh time stamp string and create filename for logfile now = prob.created log_filename = os.path.join(result_dir, '{}.log').format(sce) # solve model and read results optim = SolverFactory('glpk') # cplex, glpk, gurobi, ... optim = setup_solver(optim, logfile=log_filename) result = optim.solve(prob, tee=True) prob.load(result) # copy input file in result directory cdir = os.getcwd() respath = os.path.join(cdir, result_dir) shutil.copy(input_file, respath) # write report to spreadsheet urbs.report(prob, os.path.join(result_dir, '{}.xlsx').format(sce), prob.com_demand, prob.sit) # store optimisation problem for later re-analysis urbs.save(prob, os.path.join(result_dir, '{}.pgz').format(sce)) urbs.result_figures(prob, os.path.join(result_dir, '{}'.format(sce)), plot_title_prefix=sce.replace('_', ' ').title(), periods=plot_periods) return prob
def run_scenario(input_file, timesteps, scenario, result_dir, plot_periods={}): """ run an urbs model for given input, time steps and scenario Args: input_file: filename to an Excel spreadsheet for urbs.read_excel timesteps: a list of timesteps, e.g. range(0,8761) scenario: a scenario function that modifies the input data dict result_dir: directory name for result spreadsheet and plots Returns: the urbs model instance """ # scenario name, read and modify data for scenario sce = scenario.__name__ data = urbs.read_excel(input_file) data = scenario(data) # create model prob = urbs.create_model(data, timesteps) # refresh time stamp string and create filename for logfile now = prob.created log_filename = os.path.join(result_dir, "{}.log").format(sce) # solve model and read results optim = SolverFactory("glpk") # cplex, glpk, gurobi, ... optim = setup_solver(optim, logfile=log_filename) result = optim.solve(prob, tee=True) # copy input file to result directory shutil.copyfile(input_file, os.path.join(result_dir, input_file)) # write report to spreadsheet urbs.report(prob, os.path.join(result_dir, "{}.xlsx").format(sce), prob.com_demand, prob.sit) urbs.result_figures( prob, os.path.join(result_dir, "{}".format(sce)), plot_title_prefix=sce.replace("_", " ").title(), periods=plot_periods, ) return prob
import pyomo.environ import urbs from pyomo.core import Constraint from pyomo.opt.base import SolverFactory data = urbs.read_excel('mimo-example.xlsx') prob = urbs.create_model(data, timesteps=range(1, 8), dual=True) optim = SolverFactory('glpk') result = optim.solve(prob, tee=True) res_vertex_duals = urbs.get_entity(prob, 'res_vertex') marg_costs = res_vertex_duals.xs(('Elec', 'Demand'), level=('com', 'com_type')) print(marg_costs)
def run_scenario(input_file, timesteps, scenario, result_dir): """ run an urbs model for given input, time steps and scenario Args: input_file: filename to an Excel spreadsheet for urbs.read_excel timesteps: a list of timesteps, e.g. range(0,8761) scenario: a scenario function that modifies the input data dict result_dir: directory name for result spreadsheet and plots Returns: the urbs model instance """ # scenario name, read and modify data for scenario sce = scenario.__name__ data = urbs.read_excel(input_file) data = scenario(data) # create model, solve it, read results model = urbs.create_model(data, timesteps) prob = model.create() optim = SolverFactory('glpk') # cplex, glpk, gurobi, ... result = optim.solve(prob, tee=True) prob.load(result) # refresh time stamp string now = prob.created # write report to spreadsheet urbs.report( prob, os.path.join(result_dir, '{}-{}.xlsx').format(sce, now), prob.com_demand, prob.sit) # store optimisation problem for later re-analysis urbs.save( prob, os.path.join(result_dir, '{}-{}.pgz').format(sce, now)) # add or change plot colors my_colors = { 'Vled Haven': (230, 200, 200), 'Stryworf Key': (200, 230, 200), 'Qlyph Archipelago': (200, 200, 230), 'Jepid Island': (215,215,215)} for country, color in my_colors.iteritems(): urbs.COLORS[country] = color # create timeseries plot for each demand (site, commodity) timeseries for sit, com in prob.demand.columns: # create figure fig = urbs.plot(prob, com, sit) # change the figure title ax0 = fig.get_axes()[0] nice_sce_name = sce.replace('_', ' ').title() new_figure_title = ax0.get_title().replace( 'Energy balance of ', '{}: '.format(nice_sce_name)) ax0.set_title(new_figure_title) # save plot to files for ext in ['png', 'pdf']: fig_filename = os.path.join( result_dir, '{}-{}-{}-{}.{}').format(sce, com, sit, now, ext) fig.savefig(fig_filename, bbox_inches='tight') return prob
def run_scenario(input_file, timesteps, scenario, result_dir): """ run an urbs model for given input, time steps and scenario Args: input_file: filename to an Excel spreadsheet for urbs.read_excel timesteps: a list of timesteps, e.g. range(0,8761) scenario: a scenario function that modifies the input data dict result_dir: directory name for result spreadsheet and plots Returns: the urbs model instance """ # scenario name, read and modify data for scenario sce = scenario.__name__ data = urbs.read_excel(input_file) data = scenario(data) # create model, solve it, read results model = urbs.create_model(data, timesteps) prob = model.create() optim = SolverFactory('glpk') # cplex, glpk, gurobi, ... result = optim.solve(prob, tee=True) prob.load(result) # refresh time stamp string now = prob.created # write report to spreadsheet urbs.report(prob, os.path.join(result_dir, '{}-{}.xlsx').format(sce, now), prob.com_demand, prob.sit) # store optimisation problem for later re-analysis urbs.save(prob, os.path.join(result_dir, '{}-{}.pgz').format(sce, now)) # add or change plot colors my_colors = { 'South': (230, 200, 200), 'Mid': (200, 230, 200), 'North': (200, 200, 230) } for country, color in my_colors.iteritems(): urbs.COLORS[country] = color # create timeseries plot for each demand (site, commodity) timeseries for sit, com in prob.demand.columns: # create figure fig = urbs.plot(prob, com, sit) # change the figure title ax0 = fig.get_axes()[0] nice_sce_name = sce.replace('_', ' ').title() new_figure_title = ax0.get_title().replace( 'Energy balance of ', '{}: '.format(nice_sce_name)) ax0.set_title(new_figure_title) # save plot to files for ext in ['png', 'pdf']: fig_filename = os.path.join(result_dir, '{}-{}-{}-{}.{}').format( sce, com, sit, now, ext) fig.savefig(fig_filename, bbox_inches='tight') return prob
import pyomo.environ import urbs from pyomo.core import Constraint from pyomo.opt.base import SolverFactory data = urbs.read_excel('mimo-example.xlsx') prob = urbs.create_model(data, timesteps=range(1,8), dual=True) optim = SolverFactory('glpk') result = optim.solve(prob, tee=True) res_vertex_duals = urbs.get_entity(prob, 'res_vertex') marg_costs = res_vertex_duals.xs(('Elec', 'Demand'), level=('com', 'com_type')) print(marg_costs)