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

Merge branch 'dev_cvo_results' into 'main'

Results and models

See merge request focus/tooling!19
parents 0961692d 5d24df67
No related branches found
No related tags found
No related merge requests found
......@@ -26,56 +26,58 @@ from pyomo.opt import SolverStatus, TerminationCondition
import matplotlib.pyplot as plot
import os
def pareto_analysis(prosumer, strategy_name_1, strategy_name_2):
def pareto_analysis(prosumer, model, strategy_names):
strategy_name_1 = strategy_names[0]
strategy_name_2 = strategy_names[1]
solver = pyomo.SolverFactory("gurobi")
solver.options['MIPGap'] = 0.01
solver.options['Presolve'] = 2
solver.options['TimeLimit'] = 200
payoff = [[0.0, 0.0], [0.0, 0.0]]
f1 = getattr(prosumer._model_sizing, 'f' + strategy_name_1)
O1 = getattr(prosumer._model_sizing, 'O' + strategy_name_1)
f2 = getattr(prosumer._model_sizing, 'f' + strategy_name_2)
O2 = getattr(prosumer._model_sizing, 'O' + strategy_name_2)
f1 = getattr(model, 'f' + strategy_name_1)
O1 = getattr(model, 'O' + strategy_name_1)
f2 = getattr(model, 'f' + strategy_name_2)
O2 = getattr(model, 'O' + strategy_name_2)
O2.deactivate()
solver.solve(prosumer._model_sizing)
solver.solve(model)
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()
O2.activate()
solver.solve(prosumer._model_sizing)
solver.solve(model)
payoff[0][1] = pyomo.value(f2)
prosumer._model_sizing.del_component(prosumer._model_sizing.cp11)
solver.solve(prosumer._model_sizing)
model.del_component(model.cp11)
solver.solve(model)
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()
O1.activate()
solver.solve(prosumer._model_sizing)
solver.solve(model)
payoff[1][0] = pyomo.value(f1)
r2 = payoff[1][1] - payoff[0][1]
g2 = 4
i2 = 0
number_of_solutions = 0
prosumer._model_sizing.s2 = pyomo.Var(bounds = (0, None))
prosumer._model_sizing.e2 = pyomo.Param(mutable = True)
prosumer._model_sizing.del_component(prosumer._model_sizing.cp22)
model.s2 = pyomo.Var(bounds = (0, None))
model.e2 = pyomo.Param(mutable = True)
model.del_component(model.cp22)
if O2.sense == pyomo.maximize:
factor = -1
else:
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()
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 = []
f2_list = []
pareto_rsl = dict()
while i2 <= g2:
prosumer._model_sizing.e2 = payoff[0][1] + (i2 / g2) * r2
solver_result = solver.solve(prosumer._model_sizing)
model.e2 = payoff[0][1] + (i2 / g2) * r2
solver_result = solver.solve(model)
if solver_result.solver.status == SolverStatus.ok and solver_result.solver.termination_condition == TerminationCondition.optimal:
f1_list.append(pyomo.value(f1))
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
i2 += 1
else:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment