def get_DRinfo(self,start,end,**kwargs):
     self.price = exodata.PriceFromCSV(self.price_file,
                                     self.price_varmap,
                                     tz_name = self.weather.tz_name)
     self.flex_cost = exodata.PriceFromCSV(self.price_file,
                                     self.flex_cost_varmap,
                                     tz_name = self.weather.tz_name)
     self.rho = exodata.PriceFromCSV(self.price_file,
                                     self.rho_varmap,
                                     tz_name = self.weather.tz_name)
     self.ref_profile = exodata.ControlFromCSV(self.control_file,
                                     self.ref_profile_varmap,
                                     tz_name = self.weather.tz_name)
     self.addobj = exodata.ControlFromCSV(self.price_file,
                                     self.addobj_varmap,
                                     tz_name = self.weather.tz_name)
     index = pd.date_range(start, end, freq = str(self.meas_sampl)+'S')
     # Random control signal
     index = pd.date_range(start, end, freq = '1800S') #half-hourly price signal
     price_signal = pd.Series(np.random.rand(len(index))*40,index=index)
     
     for i in index:
         if i.hour >= 7 and i.hour <= 11:
             price_signal[i] = np.random.uniform(0.8,1)*60
         if i.hour >= 18 and i.hour <= 19:
             price_signal[i] = np.random.uniform(0.9,1)*90
         if i.hour >= 20 and i.hour <= 22:
             price_signal[i] = np.random.uniform(0.8,1)*60
     
     index = pd.date_range(start, end, freq = str(self.meas_sampl)+'S')
     flex_signal = pd.Series(0,index=index)
     k = pd.Series(1,index=index)
     ref_signal = pd.Series(0.3,index=index)
     rho_signal = pd.Series(1000,index=index)
     #ref_signal = load_namespace(self.ref_profile_file)[0]
     #print(type(ref_signal))
     
     self.price.data = {"pi_e": variables.Timeseries('pi_e', price_signal,units.cents_kWh,tz_name=self.weather.tz_name)
     }
     
     self.flex_cost.data = {"flex_cost": variables.Timeseries('flex_cost', flex_signal,units.cents_kWh,tz_name=self.weather.tz_name)
     }
     
     self.ref_profile.data = {"ref_profile": variables.Timeseries('ref_profile', ref_signal, units.W,tz_name=self.weather.tz_name)
     }
     
     self.rho.data = {"rho": variables.Timeseries('rho', rho_signal, units.unit1,tz_name=self.weather.tz_name)
     }
     
     self.addobj.data = {}
     
     for item in self.slack_var:
         self.addobj.data[item] = variables.Timeseries(item, pd.Series(0,index=index), units.unit1,tz_name=self.weather.tz_name)
         
     #print(self.addobj.data)
     
     store_namespace('price_'+self.building,self.price)
     store_namespace('flex_cost_'+self.building,self.flex_cost)
     store_namespace('ref_profile_'+self.building,self.ref_profile)
     store_namespace('rho_'+self.building,self.rho)
Beispiel #2
0
    def get_DRinfo(self, start, end, **kwargs):
        self.price = exodata.PriceFromCSV(self.price_file,
                                          self.price_varmap,
                                          tz_name=self.weather.tz_name)
        self.flex_cost = exodata.PriceFromCSV(self.price_file,
                                              self.flex_cost_varmap,
                                              tz_name=self.weather.tz_name)
        self.ref_profile = exodata.ControlFromCSV(self.control_file,
                                                  self.ref_profile_varmap,
                                                  tz_name=self.weather.tz_name)
        index = pd.date_range(start, end, freq=str(self.meas_sampl) + 'S')
        # Random control signal
        price_signal = pd.Series(np.random.rand(len(index)) * 40, index=index)
        flex_signal = pd.Series(0, index=index)
        k = pd.Series(1, index=index)
        ref_signal = pd.Series(25000, index=index)
        #ref_signal = load_namespace(self.ref_profile_file)[0]
        #print(type(ref_signal))
        for i in index:
            if i.hour >= 7 and i.hour <= 11:
                price_signal[i] = np.random.uniform(0.8, 1) * 60
            if i.hour >= 17 and i.hour <= 19:
                price_signal[i] = np.random.uniform(0.8, 1) * 90
            if i.hour >= 20 and i.hour <= 22:
                price_signal[i] = np.random.uniform(0.8, 1) * 60

        self.price.data = {
            "pi_e":
            variables.Timeseries('pi_e',
                                 price_signal,
                                 units.cents_kWh,
                                 tz_name=self.weather.tz_name)
        }
        self.flex_cost.data = {
            "flex_cost":
            variables.Timeseries('flex_cost',
                                 flex_signal,
                                 units.cents_kWh,
                                 tz_name=self.weather.tz_name)
        }
        self.ref_profile.data = {
            "ref_profile":
            variables.Timeseries('ref_profile',
                                 ref_signal,
                                 units.W,
                                 tz_name=self.weather.tz_name)
        }

        #pheat_max = pd.Series(10000,index=index)
        #self.control.collect_data(self.sim_start, self.sim_end)
        #print(self.price.display_data())
        #print(self.flex_cost.display_data())
        #print(self.ref_profile.display_data())
        store_namespace('price_' + self.building, self.price)
        store_namespace('flex_cost_' + self.building, self.flex_cost)
        store_namespace('ref_profile_' + self.building, self.ref_profile)
Beispiel #3
0
 def setUp(self):
     csv_filepath = os.path.join(self.get_unittest_path(), 'resources',
                                 'optimization', 'PriceCSV.csv')
     variable_map = {
         'pi_e': ('pi_e', units.unit1)
     }
     # Instantiate weather object
     self.prices = exodata.PriceFromCSV(csv_filepath, \
                                        variable_map)
Beispiel #4
0
    def test_set_problem_type(self):
        '''Test the dynamic setting of a problem type.

        '''

        modelpath = 'Simple.RC'
        # Instantiate model
        parameter_data = {}
        parameter_data['heatCapacitor.C'] = {}
        parameter_data['heatCapacitor.C']['Free'] = variables.Static(
            'C_free', False, units.boolean)
        parameter_data['heatCapacitor.C']['Value'] = variables.Static(
            'C_value', 3e6, units.boolean)
        model = models.Modelica(models.JModelica, \
                                models.RMSE, \
                                self.measurements, \
                                moinfo = (self.mopath, modelpath, {}), \
                                control_data = self.controls.data, \
                                parameter_data = parameter_data)
        # Instantiate optimization problem
        opt_problem = optimization.Optimization(model, \
                                                optimization.EnergyMin, \
                                                optimization.JModelica, \
                                                'q_flow', \
                                                constraint_data = self.constraints.data)
        # Solve optimization problem
        opt_problem.optimize(self.start_time, self.final_time)
        # Update model
        model = opt_problem.Model
        # Check references
        df_test = model.display_measurements('Simulated')
        self.check_df_timeseries(df_test, 'optimize_energy.csv')
        # Set new problem type
        opt_problem.set_problem_type(optimization.EnergyCostMin)
        # Gather prices
        price_csv_filepath = os.path.join(utility.get_MPCPy_path(),
                                          'resources', 'optimization',
                                          'SimpleRC_Prices.csv')
        price_variable_map = {
            'energy': ('pi_e', units.unit1)
        }
        price = exodata.PriceFromCSV(price_csv_filepath, price_variable_map)
        price.collect_data(self.start_time, self.final_time)
        opt_problem.optimize(self.start_time,
                             self.final_time,
                             price_data=price.data)
        # Update model
        model = opt_problem.Model
        # Check references
        df_test = model.display_measurements('Simulated')
        self.check_df_timeseries(df_test, 'optimize_energycost.csv')
    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)