def find_best_annualized_usage_params(target_annualized_usage, model,
        start_params, params_to_change, weather_normal_source, n_guesses=100):

    best_params = start_params
    meter = AnnualizedUsageMeter(model=model, temperature_unit_str=TEMPERATURE_UNIT_STR)

    best_result = meter.evaluate_raw(model_params=best_params, weather_normal_source=weather_normal_source)
    best_ann_usage = best_result["annualized_usage"][0]

    for n in range(n_guesses):

        resolution = abs((target_annualized_usage - best_ann_usage) / target_annualized_usage)

        param_dict = best_params.to_dict()
        for param_name,scale_factor in params_to_change:
            current_value = param_dict[param_name]
            current_value = norm.rvs(param_dict[param_name], resolution * scale_factor)
            while current_value < 0:
                current_value = norm.rvs(param_dict[param_name], resolution * scale_factor)
            param_dict[param_name] = current_value

        model_params = model.param_type(param_dict)

        result = meter.evaluate_raw(model_params=model_params, weather_normal_source=weather_normal_source)
        ann_usage = result["annualized_usage"][0]

        if abs(target_annualized_usage - ann_usage) < abs(target_annualized_usage - best_ann_usage):

            diff = abs(target_annualized_usage - best_ann_usage)
            best_params = model_params
            best_ann_usage = ann_usage

    return best_params, best_ann_usage
示例#2
0
    def _generate_fuel_consumptions(self, weather_source,
            weather_normal_source, period, model, param_dists,
            param_delta_dists, noise, baseline_period, reporting_period,
            fuel_type, consumption_unit_name, temperature_unit_name):

        baseline_params = model.param_type([param.rvs() for param in param_dists.to_list()])
        reporting_params = model.param_type([bl_param + param_delta.rvs()
            for bl_param, param_delta in zip(baseline_params.to_list(), param_delta_dists.to_list())])

        annualized_usage_meter = AnnualizedUsageMeter(temperature_unit_name,
                model)
        baseline_annualized_usage = annualized_usage_meter.evaluate_raw(
                model_params=baseline_params,
                weather_normal_source=weather_normal_source)["annualized_usage"]
        reporting_annualized_usage = annualized_usage_meter.evaluate_raw(
                model_params=reporting_params,
                weather_normal_source=weather_normal_source)["annualized_usage"]
        estimated_annualized_savings = baseline_annualized_usage - \
                reporting_annualized_usage

        baseline_generator = MonthlyBillingConsumptionGenerator(fuel_type,
                consumption_unit_name, temperature_unit_name, model,
                baseline_params)
        reporting_generator = MonthlyBillingConsumptionGenerator(fuel_type,
                consumption_unit_name, temperature_unit_name, model,
                reporting_params)

        datetimes = generate_monthly_billing_datetimes(period, dist=None)

        baseline_consumption_data = baseline_generator.generate(
                weather_source, datetimes, daily_noise_dist=noise)
        reporting_consumption_data = reporting_generator.generate(
                weather_source, datetimes, daily_noise_dist=noise)

        baseline_data = baseline_consumption_data.data
        reporting_data = reporting_consumption_data.data
        periods = baseline_consumption_data.periods()

        records = []
        for bl_data, rp_data, period in zip(baseline_data, reporting_data,
                periods):
            if period in reporting_period:
                val = rp_data
            else:
                val = bl_data
            record = {"start": period.start, "end": period.end, "value": val}
            records.append(record)

        cd = ConsumptionData(records, fuel_type, consumption_unit_name,
                record_type="arbitrary")

        return cd, estimated_annualized_savings, baseline_params, \
                reporting_params
示例#3
0
def find_best_annualized_usage_params(target_annualized_usage,
                                      model,
                                      start_params,
                                      params_to_change,
                                      weather_normal_source,
                                      n_guesses=100):

    best_params = start_params
    meter = AnnualizedUsageMeter(model=model,
                                 temperature_unit_str=TEMPERATURE_UNIT_STR)

    best_result = meter.evaluate_raw(
        model_params=best_params, weather_normal_source=weather_normal_source)
    best_ann_usage = best_result["annualized_usage"][0]

    for n in range(n_guesses):

        resolution = abs((target_annualized_usage - best_ann_usage) /
                         target_annualized_usage)

        param_dict = best_params.to_dict()
        for param_name, scale_factor in params_to_change:
            current_value = param_dict[param_name]
            current_value = norm.rvs(param_dict[param_name],
                                     resolution * scale_factor)
            while current_value < 0:
                current_value = norm.rvs(param_dict[param_name],
                                         resolution * scale_factor)
            param_dict[param_name] = current_value

        model_params = model.param_type(param_dict)

        result = meter.evaluate_raw(
            model_params=model_params,
            weather_normal_source=weather_normal_source)
        ann_usage = result["annualized_usage"][0]

        if abs(target_annualized_usage -
               ann_usage) < abs(target_annualized_usage - best_ann_usage):

            diff = abs(target_annualized_usage - best_ann_usage)
            best_params = model_params
            best_ann_usage = ann_usage

    return best_params, best_ann_usage
示例#4
0
def runeemetermodel(meta, temp, building, model):
    
    timezone = meta.T[building].timezone
    start = meta.T[building].datastart
    end = meta.T[building].dataend
    building_data = pd.DataFrame(temp[building].tz_convert(timezone).truncate(before=start,after=end))
    weatherDataSet_directory = "C:/Users/behzad/Dropbox/3 Research Projects/2 Data for Building/BuildingDataGenomeProject/the-building-data-genome-project/data/external/weather/"
    weatherfilename = meta.T[building].newweatherfilename
    weatherfile_path = weatherDataSet_directory+weatherfilename
    weather = pd.read_csv(weatherfile_path,index_col='timestamp', parse_dates=True, na_values='-9999')
    weather = weather.tz_localize(timezone, ambiguous = 'infer')
    
    weatherdata = CustomDailyWeatherSource2(weather)
   # df_t = pd.Series(weatherdata.data)
    df_t = pd.Series(weatherdata.tempC)
    df_t.index = df_t.index.to_datetime()
    df_t = pd.DataFrame(df_t)
    
    df_t.columns = ["TempC"]

    to_load = building_data.resample('D').sum().tz_localize(None)
    to_load.columns = ['Consumption']
    to_load['StartDateTime'] = to_load.index.format('%Y-%m-%d %H:%M:%S.%f')[1:]
    end=to_load.index+timedelta(days=1)
    to_load['EndDateTime'] = end.format('%Y-%m-%d %H:%M:%S.%f')[1:]
    to_load['UnitofMeasure'] = 'kWh'
    to_load['FuelType'] = 'electricity'
    to_load['ReadingType'] = 'actual'
    to_load = to_load.reset_index(drop=True)
    consumptions = import_pandas(to_load)
    
    param_optimization_meter = TemperatureSensitivityParameterOptimizationMeter("degC",model)
    annualized_usage_meter = AnnualizedUsageMeter("degC",model)
    params = param_optimization_meter.evaluate_raw(
                        consumption_data=consumptions,
                        weather_source=weatherdata,
                        energy_unit_str="kWh")["temp_sensitivity_params"]

    names1 = ['Baseload', 'HeatBalPtF', 'HeatSlope','CoolBalPtF','CoolSlope']
    df_par = pd.DataFrame(params.to_list())
    df_par['Parameter'] = index=names1
    df_par.columns = ['Value', 'Parameter']
    df_par = df_par.set_index('Parameter')
    
    df_m = building_data.resample('D').sum().tz_localize(None).join(df_t.resample('1D').mean(), how='inner')
    params_list = params.to_list()

    df_m['model_Consumption'] = params_list[0] + params_list[2]*(np.where(df_m.TempC<params_list[1], params_list[1]-df_m.TempC, 0)) + params_list[4]*(np.where(df_m.TempC>params_list[3], df_m.TempC - params_list[3], 0))
    df_m['modelbase'] = params_list[0]
    df_m['modelheating'] = params_list[2]*(np.where(df_m.TempC<params_list[1], params_list[1]-df_m.TempC, np.nan))
    df_m['modelcooling'] = params_list[4]*(np.where(df_m.TempC>params_list[3], df_m.TempC - params_list[3], np.nan))
    
    df_par.loc['totalNMBE'] = 100*((df_m[building] - df_m.model_Consumption).sum()/((df_m[building].count()-1) * df_m[building].mean()))
    df_par.loc['totalCVRMSE'] = 100*((((df_m[building] - df_m.model_Consumption)**2).sum()/(df_m[building].count()-1))**(0.5))/df_m[building].mean()
    
    return df_m, df_par
示例#5
0
    def _generate_fuel_consumptions(self, weather_source, weather_normal_source, periods,
            model, param_dists, param_delta_dists, noise,
            retrofit_start_date, retrofit_completion_date,
            fuel_type, consumption_unit_name, temperature_unit_name):

        pre_params = {}
        post_params = {}
        for k,v in param_dists.items():
            pre_params[k] = v.rvs()
            post_params[k] = pre_params[k] + param_delta_dists[k].rvs()

        annualized_usage_meter = AnnualizedUsageMeter(temperature_unit_name,model)
        pre_annualized_usage = annualized_usage_meter.evaluate(
                temp_sensitivity_params=model.param_dict_to_list(pre_params),
                weather_normal_source=weather_normal_source)["annualized_usage"]
        post_annualized_usage = annualized_usage_meter.evaluate(
                temp_sensitivity_params=model.param_dict_to_list(post_params),
                weather_normal_source=weather_normal_source)["annualized_usage"]
        estimated_annualized_savings = pre_annualized_usage - post_annualized_usage

        pre_generator = ConsumptionGenerator(fuel_type, consumption_unit_name,
                temperature_unit_name, model, pre_params)
        post_generator = ConsumptionGenerator(fuel_type, consumption_unit_name,
                temperature_unit_name, model, post_params)

        pre_consumptions = pre_generator.generate(weather_source, periods, noise)
        post_consumptions = post_generator.generate(weather_source, periods, noise)

        final_consumptions = []
        for pre_c, post_c, period in zip(pre_consumptions,post_consumptions,periods):
            pre_retrofit_completion = period.start < retrofit_completion_date
            post_retrofit_start = period.end > retrofit_start_date
            if not pre_retrofit_completion:
                consumption = post_c
            elif not post_retrofit_start:
                consumption = pre_c
            else:
                usage = (pre_c.to(consumption_unit_name) + post_c.to(consumption_unit_name)) / 2
                consumption = Consumption(usage,consumption_unit_name,fuel_type,period.start,period.end)

            final_consumptions.append(consumption)

        return final_consumptions, estimated_annualized_savings, pre_params, post_params
示例#6
0
to_load['EndDateTime'] = end.format('%Y-%m-%d %H:%M:%S.%f')[1:]
to_load['UnitofMeasure'] = 'kWh'
to_load['FuelType'] = 'electricity'
to_load['ReadingType'] = 'actual'


to_load = to_load.reset_index(drop=True)

to_load.head()

consumptions = import_pandas(to_load)

param_optimization_meter = TemperatureSensitivityParameterOptimizationMeter("degC", model)


annualized_usage_meter = AnnualizedUsageMeter("degC", model)

params = param_optimization_meter.evaluate_raw(consumption_data=consumptions,  weather_source=formattedWeatherData2,energy_unit_str="kWh")["temp_sensitivity_params"]
params_list = params.to_list()
 

names1 = ['Baseload', 'HeatBalPtF', 'HeatSlope','CoolBalPtF','CoolSlope']
df_par = pd.DataFrame(params.to_list())
df_par['Parameter'] = index=names1
df_par.columns = ['Value', 'Parameter']
df_par = df_par.set_index('Parameter')


df_m = ExtractedData_chosenBuilding.resample('D').sum().tz_localize(None).join(df_t.resample('1D').mean(), how='inner')
df_m.tail()
df_m['model_Consumption'] = params_list[0] + params_list[2]*(np.where(df_m.TempC<params_list[1], params_list[1]-df_m.TempC, 0)) + params_list[4]*(np.where(df_m.TempC>params_list[3], df_m.TempC - params_list[3], 0))