Skip to content

Commit

Permalink
Merge pull request #172 from TAMUparametric/cons_simp
Browse files Browse the repository at this point in the history
Cons simp
  • Loading branch information
cacodcar committed Sep 14, 2023
2 parents b8c4c60 + fadc462 commit 9c132a2
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 24 deletions.
26 changes: 23 additions & 3 deletions src/energiapy/model/constraints/constraints.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ class Cons(Enum):
X_EQ_SUMCOMP_Y = auto()
X_EQ_CY = auto()
X_EQ_C = auto()
X_EQ_SUMLOCCOST_Y = auto()


def printer(variable_x: str, variable_y: str, type_cons, print_once):
Expand Down Expand Up @@ -163,6 +164,25 @@ def cons_rule(instance, component, *scale):

return Constraint(component_set, *scales, rule=cons_rule, doc=label)

elif type_cons == Cons.X_EQ_SUMLOCCOST_Y:
def cons_rule(instance, location, *scale):
x = getattr(instance, variable_x)[
location, scale[:x_scale_level + 1]]
d_sum = sum(getattr(instance, variable_y)[location, component_, scale[
:y_scale_level + 1]] for component_ in component_set)
return x == d_sum

return Constraint(location_set, *scales, rule=cons_rule, doc=label)

elif type_cons == Cons.X_EQ_SUMCOST_Y:
def cons_rule(instance, *scale):
x = getattr(instance, variable_x)[scale[:x_scale_level + 1]]
d_sum = sum(getattr(instance, variable_y)[location_, scale[
:y_scale_level + 1]] for location_ in location_set)
return x == d_sum

return Constraint(*scales, rule=cons_rule, doc=label)

else:
def cons_rule(instance, location, component, *scale):

Expand All @@ -171,10 +191,10 @@ def cons_rule(instance, location, component, *scale):
x = getattr(instance, variable_x)[
location, scale[:x_scale_level + 1]]

elif type_cons == Cons.X_EQ_SUMCOST_Y:
# elif type_cons == Cons.X_EQ_SUMCOST_Y:

x = getattr(instance, variable_x)[
scale[:x_scale_level + 1]]
# x = getattr(instance, variable_x)[
# scale[:x_scale_level + 1]]

else:

Expand Down
14 changes: 9 additions & 5 deletions src/energiapy/model/constraints/credit.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from ...utils.latex_utils import constraint_latex_render
from ...utils.scale_utils import scale_list


def constraint_credit_process(instance: ConcreteModel, credit_dict: dict, network_scale_level: int = 0) -> Constraint:
"""Credit generated for each process at location in network
Expand All @@ -26,17 +27,18 @@ def constraint_credit_process(instance: ConcreteModel, credit_dict: dict, networ
Returns:
Constraint: credit_process
"""
scales = scale_list(instance=instance, scale_levels=network_scale_level + 1)
scales = scale_list(instance=instance,
scale_levels=network_scale_level + 1)

def credit_process_rule(instance, location, process, *scale_list):
if credit_dict != {}:
if process in credit_dict[location]:
return instance.Credit_process[location, process, scale_list] == credit_dict[location][process] * instance.P_location[
location, process, scale_list]
else:
return Constraint.Skip
return instance.Credit_process[location, process, scale_list] == 0
return Constraint.Skip

instance.constraint_credit_process = Constraint(
instance.locations, instance.processes, *scales, rule=credit_process_rule, doc='credit generated for process')
constraint_latex_render(credit_process_rule)
Expand All @@ -53,7 +55,8 @@ def constraint_credit_location(instance: ConcreteModel, network_scale_level: int
Returns:
Constraint: credit_location
"""
scales = scale_list(instance=instance, scale_levels=network_scale_level + 1)
scales = scale_list(instance=instance,
scale_levels=network_scale_level + 1)

def credit_location_rule(instance, location, *scale_list):
return instance.Credit_location[location, scale_list] == sum(
Expand All @@ -75,7 +78,8 @@ def constraint_credit_network(instance: ConcreteModel, network_scale_level: int
Returns:
Constraint: credit_network
"""
scales = scale_list(instance=instance, scale_levels=network_scale_level + 1)
scales = scale_list(instance=instance,
scale_levels=network_scale_level + 1)

def credit_network_rule(instance, *scale_list):
return instance.Credit_network[scale_list] == sum(
Expand Down
75 changes: 59 additions & 16 deletions src/energiapy/model/formulate.py
Original file line number Diff line number Diff line change
Expand Up @@ -285,24 +285,67 @@ def formulate(scenario: Scenario, constraints: Set[Constraints] = None, objectiv
constraint_process_incidental(instance=instance, incidental_dict=scenario.incidental_dict,
network_scale_level=scenario.network_scale_level)

constraint_location_capex(
instance=instance, network_scale_level=scenario.network_scale_level)
constraint_location_fopex(
instance=instance, network_scale_level=scenario.network_scale_level)
constraint_location_vopex(
instance=instance, network_scale_level=scenario.network_scale_level)
constraint_location_incidental(
instance=instance, network_scale_level=scenario.network_scale_level)
# constraint_location_capex(
# instance=instance, network_scale_level=scenario.network_scale_level)
# constraint_location_fopex(
# instance=instance, network_scale_level=scenario.network_scale_level)
# constraint_location_vopex(
# instance=instance, network_scale_level=scenario.network_scale_level)
# constraint_location_incidental(
# instance=instance, network_scale_level=scenario.network_scale_level)

constraint_network_capex(
instance=instance, network_scale_level=scenario.network_scale_level)
constraint_network_fopex(
instance=instance, network_scale_level=scenario.network_scale_level)
constraint_network_vopex(
instance=instance, network_scale_level=scenario.network_scale_level)
# *----------------sum capex, fopex, vopex, incidental costs over location ---------------------------------------------

constraint_network_incidental(
instance=instance, network_scale_level=scenario.network_scale_level)
instance.constraint_location_capex = make_constraint(
instance=instance, type_cons=Cons.X_EQ_SUMLOCCOST_Y, variable_x='Capex_location', variable_y='Capex_process', location_set=instance.locations, component_set=instance.processes,
loc_comp_dict=scenario.loc_pro_dict, x_scale_level=scenario.network_scale_level, y_scale_level=scenario.network_scale_level,
label='sums up capex from process over a location')

instance.constraint_location_fopex = make_constraint(
instance=instance, type_cons=Cons.X_EQ_SUMLOCCOST_Y, variable_x='Fopex_location', variable_y='Fopex_process', location_set=instance.locations, component_set=instance.processes,
loc_comp_dict=scenario.loc_pro_dict, x_scale_level=scenario.network_scale_level, y_scale_level=scenario.network_scale_level,
label='sums up fopex from process over a locations')

instance.constraint_location_vopex = make_constraint(
instance=instance, type_cons=Cons.X_EQ_SUMLOCCOST_Y, variable_x='Vopex_location', variable_y='Vopex_process', location_set=instance.locations, component_set=instance.processes,
loc_comp_dict=scenario.loc_pro_dict, x_scale_level=scenario.network_scale_level, y_scale_level=scenario.network_scale_level,
label='sums up vopex from process over a locations')

instance.constraint_location_incidental = make_constraint(
instance=instance, type_cons=Cons.X_EQ_SUMLOCCOST_Y, variable_x='Incidental_location', variable_y='Incidental_process', location_set=instance.locations, component_set=instance.processes,
loc_comp_dict=scenario.loc_pro_dict, x_scale_level=scenario.network_scale_level, y_scale_level=scenario.network_scale_level,
label='sums up incidental expenditure from process over a location')

# constraint_network_capex(
# instance=instance, network_scale_level=scenario.network_scale_level)
# constraint_network_fopex(
# instance=instance, network_scale_level=scenario.network_scale_level)
# constraint_network_vopex(
# instance=instance, network_scale_level=scenario.network_scale_level)
# constraint_network_incidental(
# instance=instance, network_scale_level=scenario.network_scale_level)

# *----------------sum capex, fopex, vopex, incidental costs over network ---------------------------------------------

instance.constraint_network_capex = make_constraint(
instance=instance, type_cons=Cons.X_EQ_SUMCOST_Y, variable_x='Capex_network', variable_y='Capex_location', location_set=instance.locations, component_set=instance.processes,
loc_comp_dict=scenario.loc_pro_dict, x_scale_level=scenario.network_scale_level, y_scale_level=scenario.network_scale_level,
label='sums up capex from process over all locations in network')

instance.constraint_network_fopex = make_constraint(
instance=instance, type_cons=Cons.X_EQ_SUMCOST_Y, variable_x='Fopex_network', variable_y='Fopex_location', location_set=instance.locations, component_set=instance.processes,
loc_comp_dict=scenario.loc_pro_dict, x_scale_level=scenario.network_scale_level, y_scale_level=scenario.network_scale_level,
label='sums up fopex from process over all locations in network')

instance.constraint_network_vopex = make_constraint(
instance=instance, type_cons=Cons.X_EQ_SUMCOST_Y, variable_x='Vopex_network', variable_y='Vopex_location', location_set=instance.locations, component_set=instance.processes,
loc_comp_dict=scenario.loc_pro_dict, x_scale_level=scenario.network_scale_level, y_scale_level=scenario.network_scale_level,
label='sums up vopex from process over all locations in network')

instance.constraint_network_incidental = make_constraint(
instance=instance, type_cons=Cons.X_EQ_SUMCOST_Y, variable_x='Incidental_network', variable_y='Incidental_location', location_set=instance.locations, component_set=instance.processes,
loc_comp_dict=scenario.loc_pro_dict, x_scale_level=scenario.network_scale_level, y_scale_level=scenario.network_scale_level,
label='sums up incidental expenditure from process over all locations in network')

if Constraints.EMISSION in constraints:
generate_emission_vars(
Expand Down

0 comments on commit 9c132a2

Please sign in to comment.