New components
When the extension to MIMOSA is significant, it is recommended to create a new component. This component will contain all the new variables, constraints, and parameters that are part of the module.
Create the new component
As an example, we will create a new component called "New component". To do this, create a new file
in the mimosa/components
folder called new_component.py
:
MIMOSA file structure: create a new file
mimosa
│ abstract_model.py
│ mimosa.py
│
└─── components
│ emissions.py
│ mitigation.py
│ new_component.py
│ ...
│
└─── inputdata
│ ...
A component always consists of a function get_constraints(m)
, in which all the new variables, parameters, and constraints are defined. The function needs to return a list of all the newly created constraints:
mimosa/components/new_component.py
from mimosa.common import (
AbstractModel, Param, Var,
GlobalConstraint, GlobalInitConstraint,
RegionalConstraint, RegionalInitConstraint,
quant
)
def get_constraints(m: AbstractModel):
"""
Documentation of what the new component does
"""
# New variables
m.new_var = Var()
# New parameters
m.new_param = Param()
# Create a list of all the new constraints
constraints = [
GlobalConstraint(...),
...
]
# Return the list of constraints
return constraints
Link the new component to the model
To link the new component to the model, import the new component in mimosa/abstract_model.py
:
mimosa/abstract_model.py
from mimosa.components import new_component
def create_model():
m = AbstractModel()
# ... existing code ...
######################
# Components
######################
# Add the new component
constraints.extend(new_component.get_constraints(m))
# ... existing code ...
return m