From a3ca44e9255dadcbfa92d9c6217a262835a2c3bf Mon Sep 17 00:00:00 2001 From: Christian Doh Dinga <cdohdinga@tudelft.nl> Date: Sun, 23 Jun 2024 20:22:23 +0200 Subject: [PATCH] solve generator agent's optimization problem --- .../solve_generator_agent.py | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 src/demoses_distibuted_optimization/solve_generator_agent.py diff --git a/src/demoses_distibuted_optimization/solve_generator_agent.py b/src/demoses_distibuted_optimization/solve_generator_agent.py new file mode 100644 index 0000000..6a2fec6 --- /dev/null +++ b/src/demoses_distibuted_optimization/solve_generator_agent.py @@ -0,0 +1,84 @@ +import numpy as np +import pyomo.environ as pyo +from typing import Dict +from build_generator_agent import build_generator_agent + + +def solve_generator_agent(model: pyo.AbstractModel, data: Dict, instance_data: Dict = None) -> pyo.ConcreteModel: + """Solve generator agent's optimization problem.""" + number_of_timesteps = data["General"]["nTimesteps"] + # First delete existing model components if they were previously instantiated + if hasattr(model, 'var_g'): + model.del_component(model.var_g) + if hasattr(model, 'objective_function'): + model.del_component(model.objective_function) + if hasattr(model, 'capacity_limit'): + model.del_component(model.capacity_limit) + # Default instance data + default_instance_data = { + None: { + 'λ_EOM': dict(enumerate(np.zeros(number_of_timesteps))), + 'g_bar': dict(enumerate(np.zeros(number_of_timesteps))), + 'Ï_EOM': {None: data["ADMM"]["rho_EOM"]}, + } + } + # Use default instance data if none is provided + if instance_data is None: + instance_data = default_instance_data + # Reconstruct and instantiate model for next round of solving + model = build_generator_agent(model) + model_instance = model.create_instance(data=instance_data) + solver = pyo.SolverFactory('gurobi') + solver.solve(model_instance) + + return model_instance + + +# # Example usage +# import yaml +# import pandas as pd +# from define_common_parameters import define_common_parameters +# from define_generator_parameters import define_generator_parameters + + +# def read_config(config_file): +# with open(config_file, 'r') as file: +# config = yaml.safe_load(file) +# return config + +# data = read_config('config.yaml') +# generator_agents = [id for id in data['Generators'].keys()] +# ts = pd.read_csv('timeseries.csv', delimiter=';') +# mdict = {m: define_common_parameters(m, data) for m in generator_agents} + +# instance_data_1 = { +# None: { +# 'λ_EOM': dict(enumerate(np.ones(24)*10)), +# 'g_bar': dict(enumerate(np.ones(24)*150)), +# 'Ï_EOM': {None: 1}, +# } +# } + +# instance_data_2 = { +# None: { +# 'λ_EOM': dict(enumerate(np.ones(24)*50)), +# 'g_bar': dict(enumerate(np.ones(24)*300)), +# 'Ï_EOM': {None: 1}, +# } +# } + +# for agent, model in mdict.items(): +# model = define_generator_parameters(agent, model, data, ts) +# zero_model_instance = solve_generator_agent(model, data) +# print(zero_model_instance.name) +# print() +# zero_model_instance.objective_function.display() +# first_model_instance = solve_generator_agent(model, data, instance_data_1) +# print(first_model_instance.name) +# print() +# first_model_instance.objective_function.display() +# print() +# second_model_instance = solve_generator_agent(model, data, instance_data_2) +# print(second_model_instance.name) +# print() +# second_model_instance.objective_function.display() \ No newline at end of file -- GitLab