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 0000000000000000000000000000000000000000..6a2fec60e10ce131e76e14a625db28eef148a974
--- /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