From f68f4c420531ba3d65b54e06e85248fd1210fee2 Mon Sep 17 00:00:00 2001 From: Jeroen Peters Date: Mon, 17 Jun 2019 16:08:09 +0200 Subject: [PATCH] solve_network.py: add minmax constraint per country --- scripts/solve_network.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/scripts/solve_network.py b/scripts/solve_network.py index f9894261..3fd4aee6 100644 --- a/scripts/solve_network.py +++ b/scripts/solve_network.py @@ -77,6 +77,22 @@ def add_opts_constraints(n, opts=None): ext_gens_i = n.generators.index[n.generators.carrier.isin(conv_techs) & n.generators.p_nom_extendable] n.model.safe_peakdemand = pypsa.opt.Constraint(expr=sum(n.model.generator_p_nom[gen] for gen in ext_gens_i) >= peakdemand - exist_conv_caps) +def add_country_carrier_generation_constraints(n, opts=None): + agg_p_nom_minmax = pd.read_csv("data/agg_p_nom_minmax.csv", index_col=list(range(2))) + + gen_country = n.generators.bus.map(n.buses.country) + + def agg_p_nom_min_rule(model, country, carrier): + return sum(model.generator_p_nom[gen] + for gen in n.generators.index[(gen_country == country) & (n.generators.carrier == carrier)]) >= agg_p_nom_minmax.at[(country, carrier),'min'] + + def agg_p_nom_max_rule(model, country, carrier): + return sum(model.generator_p_nom[gen] + for gen in n.generators.index[(gen_country == country) & (n.generators.carrier == carrier)]) <= agg_p_nom_minmax.at[(country, carrier),'max'] + + n.model.agg_p_nom_min = pypsa.opt.Constraint(list(agg_p_nom_minmax.index), rule=agg_p_nom_min_rule) + n.model.agg_p_nom_max = pypsa.opt.Constraint(list(agg_p_nom_minmax.index), rule=agg_p_nom_max_rule) + def add_lv_constraint(n): line_volume = getattr(n, 'line_volume_limit', None) if line_volume is not None and not np.isinf(line_volume):