Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
find_bus_controls(sub_network)
_allocate_pf_outputs(network, linear=True)
# get indices for the components on this subnetwork
buses_o = sub_network.buses_o
branches_i = sub_network.branches_i()
# allow all shunt impedances to dispatch as set
shunt_impedances_i = sub_network.shunt_impedances_i()
network.shunt_impedances_t.p.loc[snapshots, shunt_impedances_i] = \
network.shunt_impedances.g_pu.loc[shunt_impedances_i].values
# allow all one ports to dispatch as set
for c in sub_network.iterate_components(network.controllable_one_port_components):
c_p_set = get_switchable_as_dense(network, c.name, 'p_set', snapshots, c.ind)
c.pnl.p.loc[snapshots, c.ind] = c_p_set
# set the power injection at each node
network.buses_t.p.loc[snapshots, buses_o] = \
sum([((c.pnl.p.loc[snapshots, c.ind] * c.df.loc[c.ind, 'sign'])
.groupby(c.df.loc[c.ind, 'bus'], axis=1).sum()
.reindex(columns=buses_o, fill_value=0.))
for c in sub_network.iterate_components(network.one_port_components)]
+
[(- c.pnl["p"+str(i)].loc[snapshots].groupby(c.df["bus"+str(i)], axis=1).sum()
.reindex(columns=buses_o, fill_value=0))
for c in network.iterate_components(network.controllable_branch_components)
for i in [int(col[3:]) for col in c.df.columns if col[:3] == "bus"]])
if not skip_pre and len(branches_i) > 0:
calculate_B_H(sub_network, skip_pre=True)
def define_generator_variables_constraints(network,snapshots):
extendable_gens_i = network.generators.index[network.generators.p_nom_extendable]
fixed_gens_i = network.generators.index[~network.generators.p_nom_extendable & ~network.generators.committable]
fixed_committable_gens_i = network.generators.index[~network.generators.p_nom_extendable & network.generators.committable]
if (network.generators.p_nom_extendable & network.generators.committable).any():
logger.warning("The following generators have both investment optimisation and unit commitment:\n{}\nCurrently PyPSA cannot do both these functions, so PyPSA is choosing investment optimisation for these generators.".format(network.generators.index[network.generators.p_nom_extendable & network.generators.committable]))
p_min_pu = get_switchable_as_dense(network, 'Generator', 'p_min_pu', snapshots)
p_max_pu = get_switchable_as_dense(network, 'Generator', 'p_max_pu', snapshots)
## Define generator dispatch variables ##
gen_p_bounds = {(gen,sn) : (None,None)
for gen in extendable_gens_i | fixed_committable_gens_i
for sn in snapshots}
if len(fixed_gens_i):
var_lower = p_min_pu.loc[:,fixed_gens_i].multiply(network.generators.loc[fixed_gens_i, 'p_nom'])
var_upper = p_max_pu.loc[:,fixed_gens_i].multiply(network.generators.loc[fixed_gens_i, 'p_nom'])
gen_p_bounds.update({(gen,sn) : (var_lower[gen][sn],var_upper[gen][sn])
for gen in fixed_gens_i
for sn in snapshots})
def gen_p_bounds_f(model,gen_name,snapshot):
def describe_lower_dispatch_constraints(n):
description = {}
key = ' Lower Limit'
for c, attr in nominal_attrs.items():
if c in ['Line', 'Transformer', 'Link']:
dispatch_attr = 'p0'
description[c] = pd.Series({'min':
(n.df(c)[attr + '_opt'] *
get_as_dense(n, c, attr[0] + '_max_pu') +
n.pnl(c)[dispatch_attr]).min().min()})
else:
dispatch_attr = attr[0]
description[c + key] = pd.Series({'min':
(-n.df(c)[attr + '_opt'] *
get_as_dense(n, c, attr[0] + '_min_pu') +
n.pnl(c)[dispatch_attr]).min().min()})
return pd.concat(description, axis=1)
def define_link_flows(network,snapshots):
extendable_links_i = network.links.index[network.links.p_nom_extendable]
fixed_links_i = network.links.index[~ network.links.p_nom_extendable]
p_max_pu = get_switchable_as_dense(network, 'Link', 'p_max_pu', snapshots)
p_min_pu = get_switchable_as_dense(network, 'Link', 'p_min_pu', snapshots)
fixed_lower = p_min_pu.loc[:,fixed_links_i].multiply(network.links.loc[fixed_links_i, 'p_nom'])
fixed_upper = p_max_pu.loc[:,fixed_links_i].multiply(network.links.loc[fixed_links_i, 'p_nom'])
network.model.link_p = Var(list(network.links.index), snapshots)
p_upper = {(cb, sn) : LConstraint(LExpression([(1, network.model.link_p[cb, sn])],
-fixed_upper.at[sn, cb]),"<=")
for cb in fixed_links_i for sn in snapshots}
p_upper.update({(cb,sn) : LConstraint(LExpression([(1, network.model.link_p[cb, sn]),
(-p_max_pu.at[sn, cb], network.model.link_p_nom[cb])]),
"<=")
for cb in extendable_links_i for sn in snapshots})
l_constraint(network.model, "link_p_upper", p_upper,
sub_network_pf_fun = sub_network_lpf
sub_network_prepare_fun = calculate_B_H
else:
sub_network_pf_fun = sub_network_pf
sub_network_prepare_fun = calculate_Y
if not skip_pre:
network.determine_network_topology()
calculate_dependent_values(network)
_allocate_pf_outputs(network, linear)
snapshots = _as_snapshots(network, snapshots)
#deal with links
if not network.links.empty:
p_set = get_switchable_as_dense(network, 'Link', 'p_set', snapshots)
network.links_t.p0.loc[snapshots] = p_set.loc[snapshots]
for i in [int(col[3:]) for col in network.links.columns if col[:3] == "bus" and col != "bus0"]:
eff_name = "efficiency" if i == 1 else "efficiency{}".format(i)
efficiency = get_switchable_as_dense(network, 'Link', eff_name, snapshots)
links = network.links.index[network.links["bus{}".format(i)] != ""]
network.links_t['p{}'.format(i)].loc[snapshots, links] = -network.links_t.p0.loc[snapshots, links]*efficiency.loc[snapshots, links]
itdf = pd.DataFrame(index=snapshots, columns=network.sub_networks.index, dtype=int)
difdf = pd.DataFrame(index=snapshots, columns=network.sub_networks.index)
cnvdf = pd.DataFrame(index=snapshots, columns=network.sub_networks.index, dtype=bool)
for sub_network in network.sub_networks.obj:
if not skip_pre:
find_bus_controls(sub_network)
branches_i = sub_network.branches_i()
if len(branches_i) > 0:
def define_link_flows(network,snapshots):
extendable_links_i = network.links.index[network.links.p_nom_extendable]
fixed_links_i = network.links.index[~ network.links.p_nom_extendable]
p_max_pu = get_switchable_as_dense(network, 'Link', 'p_max_pu', snapshots)
p_min_pu = get_switchable_as_dense(network, 'Link', 'p_min_pu', snapshots)
fixed_lower = p_min_pu.loc[:,fixed_links_i].multiply(network.links.loc[fixed_links_i, 'p_nom'])
fixed_upper = p_max_pu.loc[:,fixed_links_i].multiply(network.links.loc[fixed_links_i, 'p_nom'])
network.model.link_p = Var(list(network.links.index), snapshots)
p_upper = {(cb, sn) : LConstraint(LExpression([(1, network.model.link_p[cb, sn])],
-fixed_upper.at[sn, cb]),"<=")
for cb in fixed_links_i for sn in snapshots}
p_upper.update({(cb,sn) : LConstraint(LExpression([(1, network.model.link_p[cb, sn]),
(-p_max_pu.at[sn, cb], network.model.link_p_nom[cb])]),
"<=")
for cb in extendable_links_i for sn in snapshots})
find_bus_controls(sub_network)
_allocate_pf_outputs(network, linear=True)
# get indices for the components on this subnetwork
buses_o = sub_network.buses_o
branches_i = sub_network.branches_i()
# allow all shunt impedances to dispatch as set
shunt_impedances_i = sub_network.shunt_impedances_i()
network.shunt_impedances_t.p.loc[snapshots, shunt_impedances_i] = \
network.shunt_impedances.g_pu.loc[shunt_impedances_i].values
# allow all one ports to dispatch as set
for c in sub_network.iterate_components(network.controllable_one_port_components):
c_p_set = get_switchable_as_dense(network, c.name, 'p_set', snapshots, c.ind)
c.pnl.p.loc[snapshots, c.ind] = c_p_set
# set the power injection at each node
network.buses_t.p.loc[snapshots, buses_o] = \
sum([((c.pnl.p.loc[snapshots, c.ind] * c.df.loc[c.ind, 'sign'])
.groupby(c.df.loc[c.ind, 'bus'], axis=1).sum()
.reindex(columns=buses_o, fill_value=0.))
for c in sub_network.iterate_components(network.one_port_components)]
+
[(- c.pnl["p"+str(i)].loc[snapshots].groupby(c.df["bus"+str(i)], axis=1).sum()
.reindex(columns=buses_o, fill_value=0))
for c in network.iterate_components(network.controllable_branch_components)
for i in [int(col[3:]) for col in c.df.columns if col[:3] == "bus"]])
if not skip_pre and len(branches_i) > 0:
calculate_B_H(sub_network, skip_pre=True)
#Add any other buses to which the links are attached
for i in [int(col[3:]) for col in network.links.columns if col[:3] == "bus" and col not in ["bus0","bus1"]]:
efficiency = get_switchable_as_dense(network, 'Link', 'efficiency{}'.format(i), snapshots)
for cb in network.links.index[network.links["bus{}".format(i)] != ""]:
bus = network.links.at[cb, "bus{}".format(i)]
for sn in snapshots:
network._p_balance[bus,sn].variables.append((efficiency.at[sn,cb],network.model.link_p[cb,sn]))
for gen in network.generators.index:
bus = network.generators.at[gen,"bus"]
sign = network.generators.at[gen,"sign"]
for sn in snapshots:
network._p_balance[bus,sn].variables.append((sign,network.model.generator_p[gen,sn]))
load_p_set = get_switchable_as_dense(network, 'Load', 'p_set', snapshots)
for load in network.loads.index:
bus = network.loads.at[load,"bus"]
sign = network.loads.at[load,"sign"]
for sn in snapshots:
network._p_balance[bus,sn].constant += sign*load_p_set.at[sn,load]
for su in network.storage_units.index:
bus = network.storage_units.at[su,"bus"]
sign = network.storage_units.at[su,"sign"]
for sn in snapshots:
network._p_balance[bus,sn].variables.append((sign,network.model.storage_p_dispatch[su,sn]))
network._p_balance[bus,sn].variables.append((-sign,network.model.storage_p_store[su,sn]))
for store in network.stores.index:
bus = network.stores.at[store,"bus"]
sign = network.stores.at[store,"sign"]