Skip to content
Snippets Groups Projects
Commit 5d24df67 authored by Christoph von Oy's avatar Christoph von Oy
Browse files

Made Prosumer not store its own sizing model

parent 58ddc14b
Branches
No related tags found
No related merge requests found
...@@ -26,7 +26,7 @@ from pyomo.opt import SolverStatus, TerminationCondition ...@@ -26,7 +26,7 @@ from pyomo.opt import SolverStatus, TerminationCondition
import matplotlib.pyplot as plot import matplotlib.pyplot as plot
import os import os
def pareto_analysis(prosumer, strategy_names): def pareto_analysis(prosumer, model, strategy_names):
strategy_name_1 = strategy_names[0] strategy_name_1 = strategy_names[0]
strategy_name_2 = strategy_names[1] strategy_name_2 = strategy_names[1]
solver = pyomo.SolverFactory("gurobi") solver = pyomo.SolverFactory("gurobi")
...@@ -34,50 +34,50 @@ def pareto_analysis(prosumer, strategy_names): ...@@ -34,50 +34,50 @@ def pareto_analysis(prosumer, strategy_names):
solver.options['Presolve'] = 2 solver.options['Presolve'] = 2
solver.options['TimeLimit'] = 200 solver.options['TimeLimit'] = 200
payoff = [[0.0, 0.0], [0.0, 0.0]] payoff = [[0.0, 0.0], [0.0, 0.0]]
f1 = getattr(prosumer._model_sizing, 'f' + strategy_name_1) f1 = getattr(model, 'f' + strategy_name_1)
O1 = getattr(prosumer._model_sizing, 'O' + strategy_name_1) O1 = getattr(model, 'O' + strategy_name_1)
f2 = getattr(prosumer._model_sizing, 'f' + strategy_name_2) f2 = getattr(model, 'f' + strategy_name_2)
O2 = getattr(prosumer._model_sizing, 'O' + strategy_name_2) O2 = getattr(model, 'O' + strategy_name_2)
O2.deactivate() O2.deactivate()
solver.solve(prosumer._model_sizing) solver.solve(model)
payoff[0][0] = pyomo.value(f1) payoff[0][0] = pyomo.value(f1)
prosumer._model_sizing.cp11 = pyomo.Constraint(expr = f1 == payoff[0][0]) model.cp11 = pyomo.Constraint(expr = f1 == payoff[0][0])
O1.deactivate() O1.deactivate()
O2.activate() O2.activate()
solver.solve(prosumer._model_sizing) solver.solve(model)
payoff[0][1] = pyomo.value(f2) payoff[0][1] = pyomo.value(f2)
prosumer._model_sizing.del_component(prosumer._model_sizing.cp11) model.del_component(model.cp11)
solver.solve(prosumer._model_sizing) solver.solve(model)
payoff[1][1] = pyomo.value(f2) payoff[1][1] = pyomo.value(f2)
prosumer._model_sizing.cp22 = pyomo.Constraint(expr = f2 == payoff[1][1]) model.cp22 = pyomo.Constraint(expr = f2 == payoff[1][1])
O2.deactivate() O2.deactivate()
O1.activate() O1.activate()
solver.solve(prosumer._model_sizing) solver.solve(model)
payoff[1][0] = pyomo.value(f1) payoff[1][0] = pyomo.value(f1)
r2 = payoff[1][1] - payoff[0][1] r2 = payoff[1][1] - payoff[0][1]
g2 = 4 g2 = 4
i2 = 0 i2 = 0
number_of_solutions = 0 number_of_solutions = 0
prosumer._model_sizing.s2 = pyomo.Var(bounds = (0, None)) model.s2 = pyomo.Var(bounds = (0, None))
prosumer._model_sizing.e2 = pyomo.Param(mutable = True) model.e2 = pyomo.Param(mutable = True)
prosumer._model_sizing.del_component(prosumer._model_sizing.cp22) model.del_component(model.cp22)
if O2.sense == pyomo.maximize: if O2.sense == pyomo.maximize:
factor = -1 factor = -1
else: else:
factor = 1 factor = 1
prosumer._model_sizing.cp2 = pyomo.Constraint(expr = f2 + factor * prosumer._model_sizing.s2 == prosumer._model_sizing.e2) model.cp2 = pyomo.Constraint(expr = f2 + factor * model.s2 == model.e2)
O1.deactivate() O1.deactivate()
prosumer._model_sizing.O = pyomo.Objective(expr = f1 + 0.001 * (prosumer._model_sizing.s2 / r2), sense = O1.sense) model.O = pyomo.Objective(expr = f1 + 0.001 * (model.s2 / r2), sense = O1.sense)
f1_list = [] f1_list = []
f2_list = [] f2_list = []
pareto_rsl = dict() pareto_rsl = dict()
while i2 <= g2: while i2 <= g2:
prosumer._model_sizing.e2 = payoff[0][1] + (i2 / g2) * r2 model.e2 = payoff[0][1] + (i2 / g2) * r2
solver_result = solver.solve(prosumer._model_sizing) solver_result = solver.solve(model)
if solver_result.solver.status == SolverStatus.ok and solver_result.solver.termination_condition == TerminationCondition.optimal: if solver_result.solver.status == SolverStatus.ok and solver_result.solver.termination_condition == TerminationCondition.optimal:
f1_list.append(pyomo.value(f1)) f1_list.append(pyomo.value(f1))
f2_list.append(pyomo.value(f2)) f2_list.append(pyomo.value(f2))
pareto_rsl[number_of_solutions] = (pyomo.value(prosumer._model_sizing.x1), pyomo.value(prosumer._model_sizing.x2)) pareto_rsl[number_of_solutions] = (pyomo.value(model.x1), pyomo.value(model.x2))
number_of_solutions += 1 number_of_solutions += 1
i2 += 1 i2 += 1
else: else:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment