def setUp(self): self.start_time = '1/1/2017' self.final_time = '1/2/2017' # Set .mo path self.mopath = os.path.join(utility.get_MPCPy_path(), 'resources', 'model', 'Simple.mo') # Gather inputs control_csv_filepath = utility.get_MPCPy_path( ) + os.sep + 'resources' + os.sep + 'model' + os.sep + 'SimpleRC_Input.csv' control_variable_map = { 'q_flow_csv': ('q_flow', units.W) } self.controls = exodata.ControlFromCSV(control_csv_filepath, control_variable_map) self.controls.collect_data(self.start_time, self.final_time) # Set measurements self.measurements = {} self.measurements['T_db'] = { 'Sample': variables.Static('T_db_sample', 1800, units.s) } self.measurements['q_flow'] = { 'Sample': variables.Static('q_flow_sample', 1800, units.s) } # Gather constraints constraint_csv_filepath = utility.get_MPCPy_path( ) + os.sep + 'resources' + os.sep + 'optimization' + os.sep + 'SimpleRC_Constraints.csv' constraint_variable_map = {'q_flow_min' : ('q_flow', 'GTE', units.W), \ 'T_db_min' : ('T_db', 'GTE', units.K), \ 'T_db_max' : ('T_db', 'LTE', units.K)} self.constraints = exodata.ConstraintFromCSV(constraint_csv_filepath, constraint_variable_map) self.constraints.collect_data(self.start_time, self.final_time) self.constraints.data['T_db']['Initial'] = variables.Static( 'T_db_start', 295, units.K)
def get_constraints(self,start,end, **kwargs): self.constraints = exodata.ConstraintFromCSV(self.constraint_csv, self.optcon_varmap) index = pd.date_range(start, end, freq = str(self.meas_sampl) +'S') # Set points based on UCL paper on set points!!! High variability? Commercial? mor_start = np.random.randint(7,8) mor_end = np.random.randint(7,8) eve_start = np.random.randint(17,18) eve_end = np.random.randint(19,23) dem_temp = np.random.randint(19,21) t_min = pd.Series(16+273.15,index=index) # Contracted? t_max = pd.Series(24+273.15,index=index) # Contracted? ppl_nr = np.random.randint(1,5) radgain = pd.Series(np.random.rand(len(index))*100,index=index) zero_signal = pd.Series(np.zeros(len(index)),index=index) control_signal1 = pd.Series(np.random.rand(len(index))*0,index=index) for i in index: if i.hour >= mor_start and i.hour <= mor_end: t_min[i] = dem_temp-1+273.15 t_max[i] = dem_temp+1+273.15 radgain[i] = np.random.uniform(0,1)*50*np.random.randint(0,ppl_nr) control_signal1[i] = np.random.uniform(0.2,0.6) if i.hour >= eve_start and i.hour <= eve_end: t_min[i] = dem_temp-1+273.15 t_max[i] = dem_temp+1+273.15 radgain[i] = np.random.uniform(0,1)*50*np.random.randint(0,ppl_nr) control_signal1[i] = np.random.uniform(0.2,0.6) pheat_min = pd.Series(0,index=index) pheat_max = pd.Series(1,index=index) if 'set_change' in kwargs.keys(): set_change = kwargs['set_change'] else: set_change = 1 #print(t_min) self.constraints.data = { 'HPPower': {'GTE': variables.Timeseries('HPPower_GTE', pheat_min, units.W, tz_name=self.weather.tz_name), 'LTE': variables.Timeseries('HPPower_LTE', pheat_max, units.W,tz_name=self.weather.tz_name)}, 'TAir': {'Slack_GTE': variables.Timeseries('TAir_Slack_GTE', t_min, units.K, tz_name=self.weather.tz_name), 'Slack_LTE': variables.Timeseries('TAir_Slack_LTE', t_max, units.K, tz_name=self.weather.tz_name)} } self.constraints_reg = self.constraints # Regular constraints self.other_input.data = {"ConvGain1": variables.Timeseries('ConvGain1', zero_signal,units.W,tz_name=self.weather.tz_name), "RadGain": variables.Timeseries('RadGain', radgain,units.W,tz_name=self.weather.tz_name) } if "upd_control" in kwargs.keys(): self.control.data = {"HPPower": variables.Timeseries('HPPower', control_signal1,units.W,tz_name=self.weather.tz_name)} store_namespace('control_'+self.building,self.control) store_namespace('constraints_'+self.building,self.constraints) store_namespace('other_input_'+self.building,self.other_input)
def get_constraints(self, start, end): self.constraints = exodata.ConstraintFromCSV(self.constraint_csv, self.optcon_varmap) #print("%%%% constraint data %%%%") #print(self.constraints) #print(self.constraints.data) index = pd.date_range(start, end, freq=str(self.meas_sampl) + 'S') # Set points based on UCL paper on set points!!! High variability? Commercial? mor_start = np.random.randint(5, 9) mor_end = np.random.randint(9, 12) eve_start = np.random.randint(15, 19) eve_end = np.random.randint(19, 23) dem_temp = np.random.randint(18, 23) t_min = pd.Series(14 + 273.15, index=index) # Contracted? t_max = pd.Series(28 + 273.15, index=index) # Contracted? for i in index: if i.hour >= mor_start and i.hour <= mor_end: t_min[i] = dem_temp - 1 + 273.15 t_max[i] = dem_temp + 1 + 273.15 if i.hour >= eve_start and i.hour <= eve_end: t_min[i] = dem_temp - 1 + 273.15 t_max[i] = dem_temp + 1 + 273.15 pheat_min = pd.Series(0, index=index) pheat_max = pd.Series(10000, index=index) #print(t_min) self.constraints.data = { 'TAir': { 'GTE': variables.Timeseries('TAir_GTE', t_min, units.K, tz_name=self.weather.tz_name), 'LTE': variables.Timeseries('TAir_LTE', t_max, units.K, tz_name=self.weather.tz_name) }, 'ConvGain2': { 'GTE': variables.Timeseries('ConvGain2_GTE', pheat_min, units.W, tz_name=self.weather.tz_name), 'LTE': variables.Timeseries('ConvGain2_LTE', pheat_max, units.W, tz_name=self.weather.tz_name) } } store_namespace('constraints_' + self.building, self.constraints)
def setUp(self): csv_filepath = os.path.join(self.get_unittest_path(), 'resources', 'optimization', 'sampleConstraintCSV_Setback.csv'); variable_map = {'wesTdb_min' : ('wesTdb', 'GTE', units.degC), \ 'wesTdb_max' : ('wesTdb', 'LTE', units.degC), \ 'easTdb_min' : ('easTdb', 'GTE', units.degC), \ 'easTdb_max' : ('easTdb', 'LTE', units.degC), \ 'halTdb_min' : ('halTdb', 'GTE', units.degC), \ 'halTdb_max' : ('halTdb', 'LTE', units.degC), \ 'conHeat_wes_min' : ('conHeat_wes', 'GTE', units.unit1), \ 'conHeat_wes_max' : ('conHeat_wes', 'LTE', units.unit1), \ 'conHeat_hal_min' : ('conHeat_hal', 'GTE', units.unit1), \ 'conHeat_hal_max' : ('conHeat_hal', 'LTE', units.unit1), \ 'conHeat_eas_min' : ('conHeat_eas', 'sGTE', units.unit1, 100), \ 'conHeat_eas_max' : ('conHeat_eas', 'sLTE', units.unit1, 200)}; # Instantiate weather object self.constraints = exodata.ConstraintFromCSV(csv_filepath, \ variable_map);
def setUp(self): self.start_time = '1/1/2017'; self.final_time = '1/2/2017'; # Set .mo path self.mopath = os.path.join(self.get_unittest_path(), 'resources', 'model', 'Simple.mo'); # Gather inputs start_time_exo = '1/1/2017'; final_time_exo = '1/10/2017'; control_csv_filepath = os.path.join(self.get_unittest_path(), 'resources', 'model', 'SimpleRC_Input.csv'); control_variable_map = {'q_flow_csv' : ('q_flow', units.W)}; self.controls = exodata.ControlFromCSV(control_csv_filepath, control_variable_map); self.controls.collect_data(start_time_exo, final_time_exo); # Set measurements self.measurements = {}; self.measurements['T_db'] = {'Sample' : variables.Static('T_db_sample', 1800, units.s)}; self.measurements['q_flow'] = {'Sample' : variables.Static('q_flow_sample', 1800, units.s)}; # Gather constraints constraint_csv_filepath = os.path.join(self.get_unittest_path(), 'resources', 'optimization', 'SimpleRC_Constraints.csv'); constraint_variable_map = {'q_flow_min' : ('q_flow', 'GTE', units.W), \ 'T_db_min' : ('T_db', 'GTE', units.K), \ 'T_db_max' : ('T_db', 'LTE', units.K)}; self.constraints = exodata.ConstraintFromCSV(constraint_csv_filepath, constraint_variable_map); self.constraints.collect_data(start_time_exo, final_time_exo);
def setUp(self): ## Setup model self.mopath = os.path.join(self.get_unittest_path(), 'resources', 'model', 'LBNL71T_MPC.mo') self.modelpath = 'LBNL71T_MPC.MPC' self.libraries = os.environ.get('MODELICAPATH') self.estimate_method = models.JModelica self.validation_method = models.RMSE self.zone_names = ['wes', 'hal', 'eas'] # Measurements self.measurements = {} self.measurements['wesTdb'] = { 'Sample': variables.Static('wesTdb_sample', 1800, units.s) } self.measurements['halTdb'] = { 'Sample': variables.Static('halTdb_sample', 1800, units.s) } self.measurements['easTdb'] = { 'Sample': variables.Static('easTdb_sample', 1800, units.s) } self.measurements['wesPhvac'] = { 'Sample': variables.Static('easTdb_sample', 1800, units.s) } self.measurements['halPhvac'] = { 'Sample': variables.Static('easTdb_sample', 1800, units.s) } self.measurements['easPhvac'] = { 'Sample': variables.Static('easTdb_sample', 1800, units.s) } self.measurements['Ptot'] = { 'Sample': variables.Static('easTdb_sample', 1800, units.s) } ## Exodata # Exogenous collection time self.start_time_exodata = '1/1/2015' self.final_time_exodata = '1/30/2015' # Optimization time self.start_time_optimization = '1/2/2015' self.final_time_optimization = '1/3/2015' # Weather self.weather_path = os.path.join( self.get_unittest_path(), 'resources', 'weather', 'USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw') self.weather = exodata.WeatherFromEPW(self.weather_path) self.weather.collect_data(self.start_time_exodata, self.final_time_exodata) # Internal self.internal_path = os.path.join(self.get_unittest_path(), 'resources', 'internal', 'sampleCSV.csv') self.internal_variable_map = {'intRad_wes' : ('wes', 'intRad', units.W_m2), \ 'intCon_wes' : ('wes', 'intCon', units.W_m2), \ 'intLat_wes' : ('wes', 'intLat', units.W_m2), \ 'intRad_hal' : ('hal', 'intRad', units.W_m2), \ 'intCon_hal' : ('hal', 'intCon', units.W_m2), \ 'intLat_hal' : ('hal', 'intLat', units.W_m2), \ 'intRad_eas' : ('eas', 'intRad', units.W_m2), \ 'intCon_eas' : ('eas', 'intCon', units.W_m2), \ 'intLat_eas' : ('eas', 'intLat', units.W_m2)} self.internal = exodata.InternalFromCSV(self.internal_path, self.internal_variable_map, tz_name=self.weather.tz_name) self.internal.collect_data(self.start_time_exodata, self.final_time_exodata) # Control (as initialization) self.control_path = os.path.join(self.get_unittest_path(), 'resources', 'optimization', 'ControlCSV.csv') self.control_variable_map = {'conHeat_wes' : ('conHeat_wes', units.unit1), \ 'conHeat_hal' : ('conHeat_hal', units.unit1), \ 'conHeat_eas' : ('conHeat_eas', units.unit1)} self.control = exodata.ControlFromCSV(self.control_path, self.control_variable_map, tz_name=self.weather.tz_name) self.control.collect_data(self.start_time_exodata, self.final_time_exodata) # Parameters self.parameters_path = os.path.join(self.get_unittest_path(), 'outputs', 'model_parameters.txt') self.parameters = exodata.ParameterFromCSV(self.parameters_path) self.parameters.collect_data() # Constraints self.constraints_path = os.path.join( self.get_unittest_path(), 'resources', 'optimization', 'sampleConstraintCSV_Constant.csv') self.constraints_variable_map = {'wesTdb_min' : ('wesTdb', 'GTE', units.degC), \ 'wesTdb_max' : ('wesTdb', 'LTE', units.degC), \ 'easTdb_min' : ('easTdb', 'GTE', units.degC), \ 'easTdb_max' : ('easTdb', 'LTE', units.degC), \ 'halTdb_min' : ('halTdb', 'GTE', units.degC), \ 'halTdb_max' : ('halTdb', 'LTE', units.degC), \ 'der_wesTdb_min' : ('wesTdb', 'dGTE', units.K), \ 'der_wesTdb_max' : ('wesTdb', 'dLTE', units.K), \ 'der_easTdb_min' : ('easTdb', 'dGTE', units.K), \ 'der_easTdb_max' : ('easTdb', 'dLTE', units.K), \ 'der_halTdb_min' : ('halTdb', 'dGTE', units.K), \ 'der_halTdb_max' : ('halTdb', 'dLTE', units.K), \ 'conHeat_wes_min' : ('conHeat_wes', 'GTE', units.unit1), \ 'conHeat_wes_max' : ('conHeat_wes', 'LTE', units.unit1), \ 'conHeat_hal_min' : ('conHeat_hal', 'GTE', units.unit1), \ 'conHeat_hal_max' : ('conHeat_hal', 'LTE', units.unit1), \ 'conHeat_eas_min' : ('conHeat_eas', 'GTE', units.unit1), \ 'conHeat_eas_max' : ('conHeat_eas', 'LTE', units.unit1)} self.constraints = exodata.ConstraintFromCSV( self.constraints_path, self.constraints_variable_map, tz_name=self.weather.tz_name) self.constraints.collect_data(self.start_time_exodata, self.final_time_exodata) self.constraints.data['wesTdb']['Cyclic'] = variables.Static( 'wesTdb_cyclic', 1, units.boolean_integer) self.constraints.data['easTdb']['Cyclic'] = variables.Static( 'easTdb_cyclic', 1, units.boolean_integer) self.constraints.data['halTdb']['Cyclic'] = variables.Static( 'halTdb_cyclic', 1, units.boolean_integer) # Prices self.prices_path = os.path.join(self.get_unittest_path(), 'resources', 'optimization', 'PriceCSV.csv') self.price_variable_map = { 'pi_e': ('pi_e', units.unit1) } self.prices = exodata.PriceFromCSV(self.prices_path, self.price_variable_map, tz_name=self.weather.tz_name) self.prices.collect_data(self.start_time_exodata, self.final_time_exodata) ## Parameters self.parameters.data['lat'] = {} self.parameters.data['lat']['Value'] = self.weather.lat ## Instantiate model self.model = models.Modelica(self.estimate_method, \ self.validation_method, \ self.measurements, \ moinfo = (self.mopath, self.modelpath, self.libraries), \ zone_names = self.zone_names, \ weather_data = self.weather.data, \ internal_data = self.internal.data, \ control_data = self.control.data, \ parameter_data = self.parameters.data, \ tz_name = self.weather.tz_name)