Source code for omegalpes.general.optimisation.units

#! usr/bin/env python3
#  -*- coding: utf-8 -*-

""""
    Copyright 2018 G2Elab / MAGE

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

         http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
"""

from .elements import Quantity, Constraint, Objective

__docformat__ = "restructuredtext en"


[docs]class Unit: """ **Description** Unit class is used as an "abstract class", i.e. it defines some general attributes and methods but doesn't contain variable, constraint nor objective. In the OMEGAlpes package, all the subsystem models are represented by a unit. A model is then generated adding Unit to it. Variable, objective and constraints declarations are usually done using the __init__ method of the Unit class. **Attributes** - name - description **Methods** - __str__: defines the - __repr__: defines the unit with its name - add_unit_attributes_in_lists - get_constraints_list - get_constraints_name_list - get_objectives_list - get_objectives_name_list - get_quantities_list - get_quantities_name_list .. note:: The Unit class shouldn't be instantiated in a python script, except if you want to create your own model from the beginning. In this case, one should consider creating a new class NewModel(Unit). """ def __init__(self, name='U0', description="General unit"): self.name = name self.description = description self.units_list = [] self.quantities_list = [] self.constraints_list = [] self.objectives_list = [] print(("Creating the {0}.".format(name))) def __str__(self): """" Add in the expression of the unit the variables, constraints and objectives :return: string """ import numpy var = {} cst = {} cstr = {} obj = {} exp = '<OMEGALPES.general.units.Unit: \nname: {0} \ndescription: {1}' \ '\n'.format(self.name, self.description) for u_key in list(self.__dict__.keys()): key: (Quantity, Constraint, Objective) = getattr(self, u_key) if isinstance(key, Quantity): if isinstance(key.opt, bool): if key.opt: var[u_key] = key else: cst[u_key] = key elif isinstance(key.opt, dict): if numpy.array(list(key.opt.values())).all(): var[u_key] = key else: cst[u_key] = key elif isinstance(key, Constraint): cstr[u_key] = key elif isinstance(key, Objective): obj[u_key] = key exp += '\nOptimization variables:\n' for u_key in list(var.keys()): exp += 'name: ' + getattr(self, u_key).name + '\n' exp += '\nConstants:\n' for u_key in list(cst.keys()): exp += 'name: ' + getattr(self, u_key).name + ', value: ' + \ str(getattr(self, u_key).value) + '\n' exp += '\nConstraints:\n' for u_key in list(cstr.keys()): exp += '[' + str(getattr(self, u_key).active) + ']' + ' name: ' + \ getattr(self, u_key).name + ' exp: ' + \ str(getattr(self, u_key).exp) + '\n' exp += '\nObjective:\n' for u_key in list(obj.keys()): exp += '[' + str(getattr(self, u_key).active) + ']' + 'name: ' \ + getattr(self, u_key).name + ' exp: ' + \ str(getattr(self, u_key).exp) + '\n' return exp def __repr__(self): """ Return the description of the unit considering the name :return: string """ return "<OMEGALPES.general.optimisation.units.Unit: name:\'{0}\'>" \ .format(self.name)
[docs] def add_unit_attributes_in_lists(self) -> None: """ Adds : - The name of the Quantity elements contained in the unit to the list of quantities self.quantities_list - The name of the Constraint elements contained in the unit to the list of constraints self.constraints_list - The name of the Objective elements contained in the unit to the list of objectives self.objectives_list """ try: for key in list(self.__dict__.keys()): child = getattr(self, key) if isinstance(child, Quantity) and child not in \ self.quantities_list: self.quantities_list.append(child) elif isinstance(child, Constraint) and child.active and \ child not in self.constraints_list: self.constraints_list.append(child) elif isinstance(child, Objective) and child not in \ self.objectives_list: self.objectives_list.append(child) except AttributeError: pass
[docs] def get_constraints_list(self): """ Get the constraints associated with the unit """ return self.constraints_list
[docs] def get_constraints_name_list(self): """ Get the names of the constraints associated with the unit """ constraints_name_list = [] for constraint in self.constraints_list: constraints_name_list.append(constraint.name) return constraints_name_list
[docs] def get_objectives_list(self): """ Get objectives associated with the unit """ return self.objectives_list
[docs] def get_objectives_name_list(self): """ Get the names of the objectives associated with the unit """ objectives_name_list = [] for objective in self.objectives_list: objectives_name_list.append(objective.name) return objectives_name_list
[docs] def get_quantities_list(self): """ Get the quantities associated with the unit """ return self.quantities_list
[docs] def get_quantities_name_list(self): """ Get the names of the quantities associated with the unit """ quantities_name_list = [] for quantity in self.quantities_list: quantities_name_list.append(quantity.name) return quantities_name_list