Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
return (sus.at[su_name,"p_nom_min"],
sus.at[su_name,"p_nom_max"])
network.model.storage_p_nom = Var(list(ext_sus_i), domain=NonNegativeReals,
bounds=su_p_nom_bounds)
free_pyomo_initializers(network.model.storage_p_nom)
## Define generator dispatch constraints for extendable generators ##
def su_p_upper(model,su_name,snapshot):
return (model.storage_p_dispatch[su_name,snapshot] <=
model.storage_p_nom[su_name]*p_max_pu.at[snapshot, su_name])
network.model.storage_p_upper = Constraint(list(ext_sus_i),snapshots,rule=su_p_upper)
free_pyomo_initializers(network.model.storage_p_upper)
def su_p_lower(model,su_name,snapshot):
return (model.storage_p_store[su_name,snapshot] <=
-model.storage_p_nom[su_name]*p_min_pu.at[snapshot, su_name])
network.model.storage_p_lower = Constraint(list(ext_sus_i),snapshots,rule=su_p_lower)
free_pyomo_initializers(network.model.storage_p_lower)
## Now define state of charge constraints ##
network.model.state_of_charge = Var(list(network.storage_units.index), snapshots,
domain=NonNegativeReals, bounds=(0,None))
upper = {(su,sn) : [[(1,model.state_of_charge[su,sn]),
(-sus.at[su,"max_hours"],model.storage_p_nom[su])],"<=",0.]
## Define generator dispatch constraints for extendable generators ##
def su_p_upper(model,su_name,snapshot):
return (model.storage_p_dispatch[su_name,snapshot] <=
model.storage_p_nom[su_name]*p_max_pu.at[snapshot, su_name])
network.model.storage_p_upper = Constraint(list(ext_sus_i),snapshots,rule=su_p_upper)
free_pyomo_initializers(network.model.storage_p_upper)
def su_p_lower(model,su_name,snapshot):
return (model.storage_p_store[su_name,snapshot] <=
-model.storage_p_nom[su_name]*p_min_pu.at[snapshot, su_name])
network.model.storage_p_lower = Constraint(list(ext_sus_i),snapshots,rule=su_p_lower)
free_pyomo_initializers(network.model.storage_p_lower)
## Now define state of charge constraints ##
network.model.state_of_charge = Var(list(network.storage_units.index), snapshots,
domain=NonNegativeReals, bounds=(0,None))
upper = {(su,sn) : [[(1,model.state_of_charge[su,sn]),
(-sus.at[su,"max_hours"],model.storage_p_nom[su])],"<=",0.]
for su in ext_sus_i for sn in snapshots}
upper.update({(su,sn) : [[(1,model.state_of_charge[su,sn])],"<=",
sus.at[su,"max_hours"]*sus.at[su,"p_nom"]]
for su in fix_sus_i for sn in snapshots})
l_constraint(model, "state_of_charge_upper", upper,
list(network.storage_units.index), snapshots)
network.model.passive_branch_s_nom = Var(list(extendable_passive_branches.index),
domain=NonNegativeReals, bounds=branch_s_nom_bounds)
free_pyomo_initializers(network.model.passive_branch_s_nom)
extendable_links = network.links[network.links.p_nom_extendable]
bounds = {b : (extendable_links.at[b,"p_nom_min"],
extendable_links.at[b,"p_nom_max"])
for b in extendable_links.index}
def branch_p_nom_bounds(model, branch_name):
return bounds[branch_name]
network.model.link_p_nom = Var(list(extendable_links.index),
domain=NonNegativeReals, bounds=branch_p_nom_bounds)
free_pyomo_initializers(network.model.link_p_nom)
## Define energy capacity constraints for extendable generators ##
def store_e_upper(model,store,snapshot):
return (model.store_e[store,snapshot] <=
model.store_e_nom[store]*e_max_pu.at[snapshot,store])
network.model.store_e_upper = Constraint(list(ext_stores), snapshots, rule=store_e_upper)
free_pyomo_initializers(network.model.store_e_upper)
def store_e_lower(model,store,snapshot):
return (model.store_e[store,snapshot] >=
model.store_e_nom[store]*e_min_pu.at[snapshot,store])
network.model.store_e_lower = Constraint(list(ext_stores), snapshots, rule=store_e_lower)
free_pyomo_initializers(network.model.store_e_lower)
## Builds the constraint previous_e - p == e ##
e = {}
for store in stores.index:
for i,sn in enumerate(snapshots):
e[store,sn] = LConstraint(sense="==")
e[store,sn].lhs.variables.append((-1,model.store_e[store,sn]))
elapsed_hours = network.snapshot_weightings[sn]
if i == 0 and not stores.at[store,"e_cyclic"]:
previous_e = stores.at[store,"e_initial"]
## Define storage dispatch variables ##
p_max_pu = get_switchable_as_dense(network, 'StorageUnit', 'p_max_pu', snapshots)
p_min_pu = get_switchable_as_dense(network, 'StorageUnit', 'p_min_pu', snapshots)
bounds = {(su,sn) : (0,None) for su in ext_sus_i for sn in snapshots}
bounds.update({(su,sn) :
(0,sus.at[su,"p_nom"]*p_max_pu.at[sn, su])
for su in fix_sus_i for sn in snapshots})
def su_p_dispatch_bounds(model,su_name,snapshot):
return bounds[su_name,snapshot]
network.model.storage_p_dispatch = Var(list(network.storage_units.index), snapshots,
domain=NonNegativeReals, bounds=su_p_dispatch_bounds)
free_pyomo_initializers(network.model.storage_p_dispatch)
bounds = {(su,sn) : (0,None) for su in ext_sus_i for sn in snapshots}
bounds.update({(su,sn) :
(0,-sus.at[su,"p_nom"]*p_min_pu.at[sn, su])
for su in fix_sus_i
for sn in snapshots})
def su_p_store_bounds(model,su_name,snapshot):
return bounds[su_name,snapshot]
network.model.storage_p_store = Var(list(network.storage_units.index), snapshots,
domain=NonNegativeReals, bounds=su_p_store_bounds)
free_pyomo_initializers(network.model.storage_p_store)
free_pyomo_initializers(network.model.storage_p_dispatch)
bounds = {(su,sn) : (0,None) for su in ext_sus_i for sn in snapshots}
bounds.update({(su,sn) :
(0,-sus.at[su,"p_nom"]*p_min_pu.at[sn, su])
for su in fix_sus_i
for sn in snapshots})
def su_p_store_bounds(model,su_name,snapshot):
return bounds[su_name,snapshot]
network.model.storage_p_store = Var(list(network.storage_units.index), snapshots,
domain=NonNegativeReals, bounds=su_p_store_bounds)
free_pyomo_initializers(network.model.storage_p_store)
## Define spillage variables only for hours with inflow>0. ##
inflow = get_switchable_as_dense(network, 'StorageUnit', 'inflow', snapshots)
spill_sus_i = sus.index[inflow.max()>0] #skip storage units without any inflow
inflow_gt0_b = inflow>0
spill_bounds = {(su,sn) : (0,inflow.at[sn,su])
for su in spill_sus_i
for sn in snapshots
if inflow_gt0_b.at[sn,su]}
spill_index = spill_bounds.keys()
def su_p_spill_bounds(model,su_name,snapshot):
return spill_bounds[su_name,snapshot]
network.model.storage_p_spill = Var(list(spill_index),
domain=NonNegativeReals, bounds=su_p_spill_bounds)
return spill_bounds[su_name,snapshot]
network.model.storage_p_spill = Var(list(spill_index),
domain=NonNegativeReals, bounds=su_p_spill_bounds)
free_pyomo_initializers(network.model.storage_p_spill)
## Define generator capacity variables if generator is extendable ##
def su_p_nom_bounds(model, su_name):
return (sus.at[su_name,"p_nom_min"],
sus.at[su_name,"p_nom_max"])
network.model.storage_p_nom = Var(list(ext_sus_i), domain=NonNegativeReals,
bounds=su_p_nom_bounds)
free_pyomo_initializers(network.model.storage_p_nom)
## Define generator dispatch constraints for extendable generators ##
def su_p_upper(model,su_name,snapshot):
return (model.storage_p_dispatch[su_name,snapshot] <=
model.storage_p_nom[su_name]*p_max_pu.at[snapshot, su_name])
network.model.storage_p_upper = Constraint(list(ext_sus_i),snapshots,rule=su_p_upper)
free_pyomo_initializers(network.model.storage_p_upper)
def su_p_lower(model,su_name,snapshot):
return (model.storage_p_store[su_name,snapshot] <=
-model.storage_p_nom[su_name]*p_min_pu.at[snapshot, su_name])
network.model.storage_p_lower = Constraint(list(ext_sus_i),snapshots,rule=su_p_lower)
def define_branch_extension_variables(network,snapshots):
passive_branches = network.passive_branches()
extendable_passive_branches = passive_branches[passive_branches.s_nom_extendable]
bounds = {b : (extendable_passive_branches.at[b,"s_nom_min"],
extendable_passive_branches.at[b,"s_nom_max"])
for b in extendable_passive_branches.index}
def branch_s_nom_bounds(model, branch_type, branch_name):
return bounds[branch_type,branch_name]
network.model.passive_branch_s_nom = Var(list(extendable_passive_branches.index),
domain=NonNegativeReals, bounds=branch_s_nom_bounds)
free_pyomo_initializers(network.model.passive_branch_s_nom)
extendable_links = network.links[network.links.p_nom_extendable]
bounds = {b : (extendable_links.at[b,"p_nom_min"],
extendable_links.at[b,"p_nom_max"])
for b in extendable_links.index}
def branch_p_nom_bounds(model, branch_name):
return bounds[branch_name]
network.model.link_p_nom = Var(list(extendable_links.index),
domain=NonNegativeReals, bounds=branch_p_nom_bounds)
free_pyomo_initializers(network.model.link_p_nom)