# accim - Adaptive-Comfort-Control-Implemented Model
# Copyright (C) 2021-2025 Daniel Sánchez-García
# accim is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# any later version.
# accim is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
from accim.parametric_and_optimisation.funcs_for_besos import param_accis, param_apmv
import accim.parametric_and_optimisation.params_dicts as params_dicts
from accim.parametric_and_optimisation.utils import descriptor_has_options
[docs]
def accis_parameter(parameter_name, values):
desc_has_options = descriptor_has_options(values)
# all_params = {
# # accim predefined models parameters
# 'ComfStand': param_accis.modify_ComfStand,
# 'CAT': param_accis.modify_CAT,
# 'CATcoolOffset': param_accis.modify_CATcoolOffset,
# 'CATheatOffset': param_accis.modify_CATheatOffset,
# 'ComfMod': param_accis.modify_ComfMod,
# 'SetpointAcc': param_accis.modify_SetpointAcc,
# 'CoolSeasonStart': param_accis.modify_CoolSeasonStart,
# 'CoolSeasonEnd': param_accis.modify_CoolSeasonEnd,
# 'HVACmode': param_accis.modify_HVACmode,
# 'VentCtrl': param_accis.modify_VentCtrl,
# 'MaxTempDiffVOF': param_accis.modify_MaxTempDiffVOF,
# 'MinTempDiffVOF': param_accis.modify_MinTempDiffVOF,
# 'MultiplierVOF': param_accis.modify_MultiplierVOF,
# 'VSToffset': param_accis.modify_VSToffset,
# 'MinOToffset': param_accis.modify_MinOToffset,
# 'MaxWindSpeed': param_accis.modify_MaxWindSpeed,
# 'ASTtol': param_accis.modify_ASTtol,
# # accim custom models parameters
# 'CustAST_ACSTaul': param_accis.modify_CustAST_ACSTaul,
# 'CustAST_ACSTall': param_accis.modify_CustAST_ACSTall,
# 'CustAST_AHSTaul': param_accis.modify_CustAST_AHSTaul,
# 'CustAST_AHSTall': param_accis.modify_CustAST_AHSTall,
# 'CustAST_ASTaul': param_accis.modify_CustAST_ASTaul,
# 'CustAST_ASTall': param_accis.modify_CustAST_ASTall,
# 'CustAST_m': param_accis.modify_CustAST_m,
# 'CustAST_n': param_accis.modify_CustAST_n,
# 'CustAST_ACSToffset': param_accis.modify_CustAST_ACSToffset,
# 'CustAST_AHSToffset': param_accis.modify_CustAST_AHSToffset,
# 'CustAST_ASToffset': param_accis.modify_CustAST_ASToffset,
# #apmv setpoints parameters
# 'Adaptive coefficient': param_apmv.change_adaptive_coeff_all_zones,
# 'Adaptive cooling coefficient': param_apmv.change_adaptive_coeff_cooling_all_zones,
# 'Adaptive heating coefficient': param_apmv.change_adaptive_coeff_heating_all_zones,
# 'PMV setpoint': param_apmv.change_pmv_setpoint_all_zones,
# 'PMV cooling setpoint': param_apmv.change_pmv_cooling_setpoint_all_zones,
# 'PMV heating setpoint': param_apmv.change_pmv_heating_setpoint_all_zones,
# }
if parameter_name.lower() not in [k.lower() for k in params_dicts.all_params.keys()]:
raise KeyError(f'Parameter do not exist.'
f'You need to chose one of the following list: {params_dicts.all_params.keys()}')
name = [i for i in params_dicts.all_params.keys() if i.lower() == parameter_name.lower()][0]
from besos.parameters import Parameter, GenericSelector, CategoryParameter, RangeParameter
import accim.parametric_and_optimisation.funcs_for_besos.param_accis as bf
import numpy as np
if desc_has_options:
parameter = Parameter(
name=name,
# selector=GenericSelector(set=change_adaptive_coeff),
selector=GenericSelector(set=params_dicts.all_params[name]),
# value_descriptors=RangeParameter(name='CustAST_m', min_val=0, max_val=0.7),
value_descriptors=CategoryParameter(
name=name,
options=values
),
),
else:
parameter = Parameter(
name=name,
# selector=GenericSelector(set=change_adaptive_coeff),
selector=GenericSelector(set=params_dicts.all_params[name]),
# value_descriptors=RangeParameter(name='CustAST_m', min_val=0, max_val=0.7),
value_descriptors=RangeParameter(
name=name,
min_val=values[0],
max_val=values[1],
),
),
return parameter[0]
[docs]
def get_available_params_accim_predef_models():
param_dict = [k for k in params_dicts.accim_predef_model_params.keys()]
return param_dict
[docs]
def get_available_params_accim_custom_models():
param_dict = [k for k in params_dicts.accim_custom_model_params.keys()]
return param_dict
[docs]
def get_available_params_apmv_setpoints():
param_dict = [k for k in params_dicts.apmv_setpoints_params.keys()]
return param_dict
[docs]
class Parameter:
def __init__(self, parameter):
parameters_accis = {
'ComfStand': param_accis.modify_ComfStand,
'CAT': param_accis.modify_CAT,
'CATcoolOffset': param_accis.modify_CATcoolOffset,
'CATheatOffset': param_accis.modify_CATheatOffset,
'ComfMod': param_accis.modify_ComfMod,
'SetpointAcc': param_accis.modify_SetpointAcc,
'CustAST_ACSTaul': param_accis.modify_CustAST_ACSTaul,
'CustAST_ACSTall': param_accis.modify_CustAST_ACSTall,
'CustAST_AHSTaul': param_accis.modify_CustAST_AHSTaul,
'CustAST_AHSTall': param_accis.modify_CustAST_AHSTall,
'CustAST_m': param_accis.modify_CustAST_m,
'CustAST_n': param_accis.modify_CustAST_n,
'CustAST_ACSToffset': param_accis.modify_CustAST_ACSToffset,
'CustAST_AHSToffset': param_accis.modify_CustAST_AHSToffset,
'CoolSeasonStart': param_accis.modify_CoolSeasonStart,
'CoolSeasonEnd': param_accis.modify_CoolSeasonEnd,
'HVACmode': param_accis.modify_HVACmode,
'VentCtrl': param_accis.modify_VentCtrl,
'MaxTempDiffVOF': param_accis.modify_MaxTempDiffVOF,
'MinTempDiffVOF': param_accis.modify_MinTempDiffVOF,
'MultiplierVOF': param_accis.modify_MultiplierVOF,
'VSToffset': param_accis.modify_VSToffset,
'MinOToffset': param_accis.modify_MinOToffset,
'MaxWindSpeed': param_accis.modify_MaxWindSpeed,
'ASTtol': param_accis.modify_ASTtol,
}
if parameter.lower() not in [k.lower() for k in parameters_accis.keys()]:
raise KeyError(f'Parameter do not exist.'
f'You need to chose one of the following list: {parameters_accis.keys()}')
self.name = [i for i in parameters_accis.keys() if i.lower() == parameter.lower()][0]
[docs]
def modify(self, idf, value):
parameters_accis = {
'ComfStand': param_accis.modify_ComfStand(idf, value),
'CAT': param_accis.modify_CAT(idf, value),
'CATcoolOffset': param_accis.modify_CATcoolOffset(idf, value),
'CATheatOffset': param_accis.modify_CATheatOffset(idf, value),
'ComfMod': param_accis.modify_ComfMod(idf, value),
'SetpointAcc': param_accis.modify_SetpointAcc(idf, value),
'CustAST_ACSTaul': param_accis.modify_CustAST_ACSTaul(idf, value),
'CustAST_ACSTall': param_accis.modify_CustAST_ACSTall(idf, value),
'CustAST_AHSTaul': param_accis.modify_CustAST_AHSTaul(idf, value),
'CustAST_AHSTall': param_accis.modify_CustAST_AHSTall(idf, value),
'CustAST_m': param_accis.modify_CustAST_m(idf, value),
'CustAST_n': param_accis.modify_CustAST_n(idf, value),
'CustAST_ACSToffset': param_accis.modify_CustAST_ACSToffset(idf, value),
'CustAST_AHSToffset': param_accis.modify_CustAST_AHSToffset(idf, value),
'CoolSeasonStart': param_accis.modify_CoolSeasonStart(idf, value),
'CoolSeasonEnd': param_accis.modify_CoolSeasonEnd(idf, value),
'HVACmode': param_accis.modify_HVACmode(idf, value),
'VentCtrl': param_accis.modify_VentCtrl(idf, value),
'MaxTempDiffVOF': param_accis.modify_MaxTempDiffVOF(idf, value),
'MinTempDiffVOF': param_accis.modify_MinTempDiffVOF(idf, value),
'MultiplierVOF': param_accis.modify_MultiplierVOF(idf, value),
'VSToffset': param_accis.modify_VSToffset(idf, value),
'MinOToffset': param_accis.modify_MinOToffset(idf, value),
'MaxWindSpeed': param_accis.modify_MaxWindSpeed(idf, value),
'ASTtol': param_accis.modify_ASTtol(idf, value),
}
parameters_accis[self.name]
[docs]
class ComfStand:
def __init__(self):
self.name = 'ComfStand'
[docs]
def modify(self, idf, value):
param_accis.modify_ComfStand(idf, value)
[docs]
class CustAST_ACSTaul:
def __init__(self):
self.name = 'CustAST_ACSTaul'
[docs]
def modify(self, idf, value):
param_accis.modify_CustAST_ACSTaul(idf, value)
[docs]
class CustAST_ACSTall:
def __init__(self):
self.name = 'CustAST_ACSTall'
[docs]
def modify(self, idf, value):
param_accis.modify_CustAST_ACSTall(idf, value)
[docs]
class CustAST_AHSTaul:
def __init__(self):
self.name = 'CustAST_AHSTaul'
[docs]
def modify(self, idf, value):
param_accis.modify_CustAST_AHSTaul(idf, value)
[docs]
class CustAST_AHSTall:
def __init__(self):
self.name = 'CustAST_AHSTall'
[docs]
def modify(self, idf, value):
param_accis.modify_CustAST_AHSTall(idf, value)
[docs]
class CustAST_ASTaul:
def __init__(self):
self.name = 'CustAST_ASTaul'
[docs]
def modify(self, idf, value):
param_accis.modify_CustAST_ASTaul(idf, value)
[docs]
class CustAST_ASTall:
def __init__(self):
self.name = 'CustAST_ASTall'
[docs]
def modify(self, idf, value):
param_accis.modify_CustAST_ASTall(idf, value)
[docs]
class CustAST_m:
def __init__(self):
self.name = 'CustAST_m'
[docs]
def modify(self, idf, value):
param_accis.modify_CustAST_m(idf, value)
[docs]
class CustAST_n:
def __init__(self):
self.name = 'CustAST_n'
[docs]
def modify(self, idf, value):
param_accis.modify_CustAST_n(idf, value)
[docs]
class CustAST_ACSToffset:
def __init__(self):
self.name = 'CustAST_ACSToffset'
[docs]
def modify(self, idf, value):
param_accis.modify_CustAST_ACSToffset(idf, value)
[docs]
class CustAST_AHSToffset:
def __init__(self):
self.name = 'CustAST_AHSToffset'
[docs]
def modify(self, idf, value):
param_accis.modify_CustAST_AHSToffset(idf, value)
[docs]
class CustAST_ASToffset:
def __init__(self):
self.name = 'CustAST_ASToffset'
[docs]
def modify(self, idf, value):
param_accis.modify_CustAST_ASToffset(idf, value)
[docs]
class CAT:
def __init__(self):
self.name = 'CAT'
[docs]
def modify(self, idf, value):
param_accis.modify_CAT(idf, value)
[docs]
class CATcoolOffset:
def __init__(self):
self.name = 'CATcoolOffset'
[docs]
def modify(self, idf, value):
param_accis.modify_CATcoolOffset(idf, value)
[docs]
class CATheatOffset:
def __init__(self):
self.name = 'CATheatOffset'
[docs]
def modify(self, idf, value):
param_accis.modify_CATheatOffset(idf, value)
[docs]
class ComfMod:
def __init__(self):
self.name = 'ComfMod'
[docs]
def modify(self, idf, value):
param_accis.modify_ComfMod(idf, value)
[docs]
class HVACmode:
def __init__(self):
self.name = 'HVACmode'
[docs]
def modify(self, idf, value):
param_accis.modify_HVACmode(idf, value)
[docs]
class VentCtrl:
def __init__(self):
self.name = 'VentCtrl'
[docs]
def modify(self, idf, value):
param_accis.modify_VentCtrl(idf, value)
[docs]
class VSToffset:
def __init__(self):
self.name = 'VSToffset'
[docs]
def modify(self, idf, value):
param_accis.modify_VSToffset(idf, value)
[docs]
class MinOToffset:
def __init__(self):
self.name = 'MinOToffset'
[docs]
def modify(self, idf, value):
param_accis.modify_MinOToffset(idf, value)
[docs]
class MaxWindSpeed:
def __init__(self):
self.name = 'MaxWindSpeed'
[docs]
def modify(self, idf, value):
param_accis.modify_MaxWindSpeed(idf, value)
[docs]
class ASTtol:
def __init__(self):
self.name = 'ASTtol'
[docs]
def modify(self, idf, value):
param_accis.modify_ASTtol(idf, value)
[docs]
class CoolSeasonStart:
def __init__(self):
self.name = 'CoolSeasonStart'
[docs]
def modify(self, idf, value):
param_accis.modify_CoolSeasonStart(idf, value)
[docs]
class CoolSeasonEnd:
def __init__(self):
self.name = 'CoolSeasonEnd'
[docs]
def modify(self, idf, value):
param_accis.modify_CoolSeasonEnd(idf, value)
[docs]
class SetpointAcc:
def __init__(self):
self.name = 'SetpointAcc'
[docs]
def modify(self, idf, value):
param_accis.modify_SetpointAcc(idf, value)
[docs]
class MaxTempDiffVOF:
def __init__(self):
self.name = 'MaxTempDiffVOF'
[docs]
def modify(self, idf, value):
param_accis.modify_MaxTempDiffVOF(idf, value)
[docs]
class MinTempDiffVOF:
def __init__(self):
self.name = 'MinTempDiffVOF'
[docs]
def modify(self, idf, value):
param_accis.modify_MinTempDiffVOF(idf, value)
[docs]
class MultiplierVOF:
def __init__(self):
self.name = 'MultiplierVOF'
[docs]
def modify(self, idf, value):
param_accis.modify_MultiplierVOF(idf, value)