Example #1
0
 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'
Example #2
0
 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');
Example #3
0
    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)
Example #4
0
 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)
Example #5
0
 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)
Example #6
0
 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)