def setUp(self): # Testing time self.start_time = '3/8/2013' self.final_time = '3/15/2013 23:59' # Set path variable(s) self.MPCPyPath = utility.get_MPCPy_path() # Setup building measurement collection from csv self.csv_filepath = self.MPCPyPath + os.sep + 'resources' + os.sep + 'building' + os.sep + 'OccData.csv' # Measurements self.measurements = {} self.measurements['occupancy'] = { 'Sample': variables.Static('occupancy_sample', 300, units.s) } self.measurement_variable_map = { 'Total People Count for the whole building (+)': ('occupancy', units.unit1) } # Instantiate building measurement source self.building = systems.RealFromCSV(self.csv_filepath, \ self.measurements, self.measurement_variable_map, time_header = 'Date') # Where to save ref occupancy model self.occupancy_model_file = self.get_ref_path( ) + os.sep + 'occupancy_model_estimated.txt'
def setUp(self): # Setup building measurement collection from csv self.csv_filepath = os.path.join(self.get_unittest_path(), 'resources', 'building', 'OccData.csv'); # Measurements self.measurements = {}; self.measurements['occupancy'] = {'Sample' : variables.Static('occupancy_sample', 300, units.s)}; self.measurement_variable_map = {'Total People Count for the whole building (+)' : ('occupancy', units.unit1)}; # Instantiate building measurement source self.building = systems.RealFromCSV(self.csv_filepath, \ self.measurements, self.measurement_variable_map, time_header = 'Date');
def test_estimate_and_validate_missing_measurements(self): '''Test the estimation of a model's coefficients based on measured data. Some of the validation measurement data is missing. ''' plt.close('all') # Check references df_test = self.model.display_measurements('Simulated') self.check_df(df_test, 'simulate_initial_parameters.csv') # Estimate model based on emulated data self.model.estimate(self.start_time_estimation, self.final_time_estimation, self.measurement_variable_list) # Validate model based on estimation data self.model.validate(self.start_time_estimation, self.final_time_estimation, \ os.path.join(self.get_unittest_path(), 'outputs', 'model_estimation_csv'), plot=0) # Check references RMSE = {} for key in self.model.RMSE.keys(): RMSE[key] = {} RMSE[key]['Value'] = self.model.RMSE[key].display_data() df_test = pd.DataFrame(data=RMSE) self.check_df(df_test, 'estimate_RMSE.csv', timeseries=False) # Instantiate validate building building_val = systems.RealFromCSV( self.building_source_file_path_val_missing, self.measurements, self.measurement_variable_map, tz_name=self.weather.tz_name) # Validate on validation data building_val.collect_measurements(self.start_time_validation, self.final_time_validation) self.model.measurements = building_val.measurements self.model.validate(self.start_time_validation, self.final_time_validation, \ os.path.join(self.get_unittest_path(), 'outputs', 'model_validation_csv'), plot=0) # Check references RMSE = {} for key in self.model.RMSE.keys(): RMSE[key] = {} RMSE[key]['Value'] = self.model.RMSE[key].display_data() df_test = pd.DataFrame(data=RMSE) self.check_df(df_test, 'validate_RMSE_missing.csv', timeseries=False)
def _finish_estimate_validate(self, tag): '''Internal method for finishing the estimate and valudate tests.''' # Validate model based on estimation data self.model.validate(self.start_time_estimation, self.final_time_estimation, \ os.path.join(self.get_unittest_path(), 'outputs', 'model_estimation_csv'), plot=0) # Check references RMSE = {} for key in self.model.RMSE.keys(): RMSE[key] = {} RMSE[key]['Value'] = self.model.RMSE[key].display_data() df_test = pd.DataFrame(data=RMSE) self.check_df(df_test, 'estimate_RMSE{0}.csv'.format(tag), timeseries=False) # All estimates if global estimate try: glo_est_data_test = self.model.get_global_estimate_data() self.check_json(glo_est_data_test, 'estimate_gloest{0}.txt'.format(tag)) except: pass # Instantiate validate building self.building_val = systems.RealFromCSV( self.building_source_file_path_val, self.measurements, self.measurement_variable_map, tz_name=self.weather.tz_name) # Validate on validation data self.building_val.collect_measurements(self.start_time_validation, self.final_time_validation) self.model.measurements = self.building_val.measurements self.model.validate(self.start_time_validation, self.final_time_validation, \ os.path.join(self.get_unittest_path(), 'outputs', 'model_validation_csv'), plot=0) # Check references RMSE = {} for key in self.model.RMSE.keys(): RMSE[key] = {} RMSE[key]['Value'] = self.model.RMSE[key].display_data() df_test = pd.DataFrame(data=RMSE) self.check_df(df_test, 'validate_RMSE{0}.csv'.format(tag), timeseries=False)
def setUp(self): ## Setup building fmu emulation self.building_source_file_path_est = os.path.join( self.get_unittest_path(), 'resources', 'building', 'RealMeasurements_est.csv') self.building_source_file_path_val = os.path.join( self.get_unittest_path(), 'resources', 'building', 'RealMeasurements_val.csv') self.building_source_file_path_val_missing = os.path.join( self.get_unittest_path(), 'resources', 'building', 'RealMeasurements_val_missing.csv') self.zone_names = ['wes', 'hal', 'eas'] self.weather_path = os.path.join( self.get_unittest_path(), 'resources', 'weather', 'USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw') 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.control_path = os.path.join(self.get_unittest_path(), 'resources', 'building', 'ControlCSV_0.csv') self.control_variable_map = {'conHeat_wes' : ('conHeat_wes', units.unit1), \ 'conHeat_hal' : ('conHeat_hal', units.unit1), \ 'conHeat_eas' : ('conHeat_eas', units.unit1)} # 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) } self.measurement_variable_map = { 'wesTdb_mea': ('wesTdb', units.K), 'halTdb_mea': ('halTdb', units.K), 'easTdb_mea': ('easTdb', units.K), 'wesPhvac_mea': ('wesPhvac', units.W), 'halPhvac_mea': ('halPhvac', units.W), 'easPhvac_mea': ('easPhvac', units.W), 'Ptot_mea': ('Ptot', units.W) } ## 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 # Instantiate exo data sources self.weather = exodata.WeatherFromEPW(self.weather_path) self.internal = exodata.InternalFromCSV(self.internal_path, self.internal_variable_map, tz_name=self.weather.tz_name) self.control = exodata.ControlFromCSV(self.control_path, self.control_variable_map, tz_name=self.weather.tz_name) # Parameters self.parameters = exodata.ParameterFromCSV( os.path.join(self.get_unittest_path(), 'resources', 'model', 'LBNL71T_Parameters.csv')) self.parameters.collect_data() self.parameters.data['lat'] = {} self.parameters.data['lat']['Value'] = self.weather.lat # Instantiate test building self.building_est = systems.RealFromCSV( self.building_source_file_path_est, self.measurements, self.measurement_variable_map, tz_name=self.weather.tz_name) # Exogenous collection time self.start_time_exodata = '1/1/2015' self.final_time_exodata = '1/30/2015' # Estimation time self.start_time_estimation = '1/1/2015' self.final_time_estimation = '1/4/2015' # Validation time self.start_time_validation = '1/4/2015' self.final_time_validation = '1/5/2015' # Measurement variables for estimate self.measurement_variable_list = ['wesTdb', 'easTdb', 'halTdb'] # Exodata self.weather.collect_data(self.start_time_exodata, self.final_time_exodata) self.internal.collect_data(self.start_time_exodata, self.final_time_exodata) self.control.collect_data(self.start_time_exodata, self.final_time_exodata) # Collect measurement data self.building_est.collect_measurements(self.start_time_estimation, self.final_time_estimation) # Instantiate model self.model = models.Modelica(self.estimate_method, \ self.validation_method, \ self.building_est.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) # Simulate model with initial guess self.model.simulate(self.start_time_estimation, self.final_time_estimation)
def setUp(self): ## Setup building fmu emulation self.building_source_file_path_est = os.path.join( self.get_unittest_path(), 'resources', 'building', 'RealMeasurements_est.csv') self.building_source_file_path_val = os.path.join( self.get_unittest_path(), 'resources', 'building', 'RealMeasurements_val.csv') self.zone_names = ['wes', 'hal', 'eas'] self.weather_path = os.path.join( self.get_unittest_path(), 'resources', 'weather', 'USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw') 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.control_path = os.path.join(self.get_unittest_path(), 'resources', 'building', 'ControlCSV_0.csv') self.control_variable_map = {'conHeat_wes' : ('conHeat_wes', units.unit1), \ 'conHeat_hal' : ('conHeat_hal', units.unit1), \ 'conHeat_eas' : ('conHeat_eas', units.unit1)} # 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) } self.measurement_variable_map = { 'wesTdb_mea': ('wesTdb', units.K), 'halTdb_mea': ('halTdb', units.K), 'easTdb_mea': ('easTdb', units.K), 'wesPhvac_mea': ('wesPhvac', units.W), 'halPhvac_mea': ('halPhvac', units.W), 'easPhvac_mea': ('easPhvac', units.W), 'Ptot_mea': ('Ptot', units.W) } ## 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 # Instantiate exo data sources self.weather = exodata.WeatherFromEPW(self.weather_path) self.internal = exodata.InternalFromCSV(self.internal_path, self.internal_variable_map, tz_name=self.weather.tz_name) self.control = exodata.ControlFromCSV(self.control_path, self.control_variable_map, tz_name=self.weather.tz_name) # Parameters self.parameters = exodata.ParameterFromCSV( os.path.join(self.get_unittest_path(), 'resources', 'model', 'LBNL71T_Parameters.csv')) self.parameters.collect_data() self.parameters.data['lat'] = {} self.parameters.data['lat']['Value'] = self.weather.lat # Instantiate test building self.building_est = systems.RealFromCSV( self.building_source_file_path_est, self.measurements, self.measurement_variable_map, tz_name=self.weather.tz_name) # Instantiate validate building self.building_val = systems.RealFromCSV( self.building_source_file_path_val, self.measurements, self.measurement_variable_map, tz_name=self.weather.tz_name)