Example #1
0
def generated_consumption_history_pre_post_1(request):
    model = TemperatureSensitivityModel(cooling=True,heating=True)
    pre_params = {
        "base_consumption": request.param[0][0],
        "heating_slope": request.param[0][1],
        "heating_reference_temperature": request.param[0][2],
        "cooling_slope": request.param[0][3],
        "cooling_reference_temperature": request.param[0][4]
    }
    post_params = {
        "base_consumption": request.param[1][0],
        "heating_slope": request.param[1][1],
        "heating_reference_temperature": request.param[1][2],
        "cooling_slope": request.param[1][3],
        "cooling_reference_temperature": request.param[1][4]
    }
    start = datetime(2012,1,1)
    retrofit = datetime(2013,6,15)
    end = datetime(2014,12,31)
    pre_periods = generate_periods(start,retrofit,jitter_intensity=0)
    post_periods = generate_periods(retrofit,end,jitter_intensity=0)
    pre_gen = ConsumptionGenerator("electricity", "kWh", "degF", model, pre_params)
    post_gen = ConsumptionGenerator("electricity", "kWh", "degF", model, post_params)
    pre_consumptions = pre_gen.generate(gsod_722880_2012_2014_weather_source(), pre_periods)
    post_consumptions = post_gen.generate(gsod_722880_2012_2014_weather_source(), post_periods)
    ch = ConsumptionHistory(pre_consumptions + post_consumptions)
    return ch, model.param_dict_to_list(pre_params), model.param_dict_to_list(post_params), retrofit
Example #2
0
def prism_outputs_1(request):
    model = TemperatureSensitivityModel(cooling=True,heating=True)
    params = {
        "base_consumption": request.param[0][0],
        "heating_slope": request.param[0][1],
        "heating_reference_temperature": request.param[0][2],
        "cooling_slope": request.param[0][3],
        "cooling_reference_temperature": request.param[0][4]
    }
    start = datetime(2012,1,1)
    end = datetime(2014,12,31)
    retrofit_start_date = datetime(2013,6,1)
    retrofit_completion_date = datetime(2013,8,1)

    periods = generate_periods(start,end,jitter_intensity=0)
    gen = ConsumptionGenerator("electricity", "kWh", request.param[4], model, params)
    consumptions = gen.generate(gsod_722880_2012_2014_weather_source(), periods)
    consumption_kWh_per_day = [c.kWh / c.timedelta.days for c in consumptions]
    consumption_n_days = [p.timedelta.days for p in periods]
    fixture = ConsumptionHistory(consumptions), model.param_dict_to_list(params), \
            request.param[1], request.param[2], \
            request.param[3], request.param[4], \
            retrofit_start_date, retrofit_completion_date, \
            request.param[5], request.param[6], \
            request.param[7], request.param[8], \
            request.param[9], request.param[10], \
            consumption_kWh_per_day, consumption_kWh_per_day, \
            consumption_n_days, \
            request.param[11]
    return fixture
Example #3
0
def test_generate_periods():
    uniform_periods = generate_periods(datetime(2012,1,1),datetime(2013,1,1),period_jitter=timedelta(days=0))
    assert uniform_periods[0].start == datetime(2012,1,1)
    assert uniform_periods[0].end == datetime(2012,1,31)
    assert uniform_periods[11].start == datetime(2012,11,26)
    assert uniform_periods[11].end == datetime(2012,12,26)

    short_uniform_periods = generate_periods(datetime(2012,1,1),datetime(2013,1,1),period_length_mean=timedelta(days=1),period_jitter=timedelta(days=0))
    assert short_uniform_periods[0].start == datetime(2012,1,1)
    assert short_uniform_periods[0].end == datetime(2012,1,2)
    assert short_uniform_periods[330].start == datetime(2012,11,26)
    assert short_uniform_periods[330].end == datetime(2012,11,27)

    jittery_periods = generate_periods(datetime(2012,1,1),datetime(2013,1,1))
    for p in jittery_periods:
        assert p.end - p.start < timedelta(days=34)
        assert p.end - p.start > timedelta(days=26)

    assert not all([p.end - p.start == timedelta(days=30) for p in jittery_periods])
Example #4
0
def test_project_generator(gsod_722880_2012_2014_weather_source,tmy3_722880_weather_source):
    electricity_model = TemperatureSensitivityModel(cooling=True,heating=True)
    gas_model = TemperatureSensitivityModel(cooling=False,heating=True)
    electricity_param_distributions = {
            "cooling_slope": uniform(loc=1, scale=.5),
            "heating_slope": uniform(loc=1, scale=.5),
            "base_consumption": uniform(loc=5, scale=5),
            "cooling_reference_temperature": uniform(loc=70, scale=5),
            "heating_reference_temperature": uniform(loc=60, scale=5)}
    electricity_param_delta_distributions = {
            "cooling_slope": uniform(loc=-.2, scale=.3),
            "heating_slope": uniform(loc=-.2, scale=.3),
            "base_consumption": uniform(loc=-2, scale=3),
            "cooling_reference_temperature": uniform(loc=0, scale=0),
            "heating_reference_temperature": uniform(loc=0, scale=0)}
    gas_param_distributions = {
            "heating_slope": uniform(loc=1, scale=.5),
            "base_consumption": uniform(loc=5, scale=5),
            "heating_reference_temperature": uniform(loc=60, scale=5)}
    gas_param_delta_distributions = {
            "heating_slope": uniform(loc=-.2, scale=.3),
            "base_consumption": uniform(loc=-2, scale=3),
            "heating_reference_temperature": uniform(loc=0, scale=0)}

    generator = ProjectGenerator(electricity_model, gas_model,
                                electricity_param_distributions,
                                electricity_param_delta_distributions,
                                gas_param_distributions,
                                gas_param_delta_distributions)

    periods = generate_periods(datetime(2012,1,1),datetime(2013,1,1),period_jitter=timedelta(days=0))

    retrofit_start_date = datetime(2012,4,1)
    retrofit_completion_date = datetime(2012,5,1)

    results = generator.generate(gsod_722880_2012_2014_weather_source,
                               tmy3_722880_weather_source, periods, periods,
                               retrofit_start_date, retrofit_completion_date,
                               electricity_noise=None,gas_noise=None)

    elec_kwh = [c.to("kWh") for c in results["electricity_consumptions"]]
    gas_therms = [c.to("therms") for c in results["natural_gas_consumptions"]]
    assert results.get("electricity_estimated_savings") is not None
    assert results.get("natural_gas_estimated_savings") is not None
    assert results.get("electricity_pre_params") is not None
    assert results.get("natural_gas_pre_params") is not None
    assert results.get("electricity_post_params") is not None
    assert results.get("natural_gas_post_params") is not None

    assert len(elec_kwh) == 12
    assert len(gas_therms) == 12
    assert elec_kwh[0] > elec_kwh[5]
    assert gas_therms[0] > gas_therms[5]
    assert elec_kwh[0] < 700 # could probably lower this upper bound
    assert gas_therms[0] < 700 # could probably lower this upper bound
Example #5
0
def generated_consumption_history_with_annualized_usage_1(request):
    model = TemperatureSensitivityModel(cooling=True,heating=True)
    params = {
        "base_consumption": request.param[0][0],
        "heating_slope": request.param[0][1],
        "heating_reference_temperature": request.param[0][2],
        "cooling_slope": request.param[0][3],
        "cooling_reference_temperature": request.param[0][4]
    }
    start = datetime(2012,1,1)
    end = datetime(2014,12,31)
    periods = generate_periods(start,end,jitter_intensity=0)
    gen = ConsumptionGenerator("electricity", "kWh", "degF", model, params)
    consumptions = gen.generate(gsod_722880_2012_2014_weather_source(), periods)
    return ConsumptionHistory(consumptions), model.param_dict_to_list(params), request.param[1]
Example #6
0
def generated_consumption_history_with_n_periods_cdd_1(request):
    model = TemperatureSensitivityModel(cooling=True,heating=True)
    params = {
        "base_consumption": request.param[0][0],
        "heating_slope": request.param[0][1],
        "heating_reference_temperature": request.param[0][2],
        "cooling_slope": request.param[0][3],
        "cooling_reference_temperature": request.param[0][4]
    }
    start,end = request.param[1]
    periods = generate_periods(start,end,jitter_intensity=0)
    fuel_type = "electricity"
    gen = ConsumptionGenerator(fuel_type, "kWh", "degF", model, params)
    consumptions = gen.generate(gsod_722880_2012_2014_weather_source(), periods)
    return ConsumptionHistory(consumptions), fuel_type, request.param[2], request.param[3], request.param[4 ]
Example #7
0
def bpi_2400_1(request):
    elec_params = {
        "base_consumption": request.param[0][0],
        "heating_slope": request.param[0][1],
        "heating_reference_temperature": request.param[0][2],
        "cooling_slope": request.param[0][3],
        "cooling_reference_temperature": request.param[0][4]
    }
    gas_params = {
        "base_consumption": request.param[1][0],
        "heating_slope": request.param[1][1],
        "heating_reference_temperature": request.param[1][2],
    }

    normal_cdd = request.param[2]
    normal_hdd = request.param[3]
    cvrmse_electricity = request.param[4]
    cvrmse_natural_gas = request.param[5]
    n_periods = request.param[6]
    time_span = request.param[7]
    total_cdd = request.param[8]
    total_hdd = request.param[9]
    temp_unit = request.param[10]

    start = datetime(2012,1,1)
    end = datetime(2014,12,31)
    periods = generate_periods(start,end,jitter_intensity=0)
    elec_model = TemperatureSensitivityModel(cooling=True,heating=True)
    gas_model = TemperatureSensitivityModel(cooling=False,heating=True)
    gen_elec = ConsumptionGenerator("electricity", "kWh", temp_unit, elec_model, elec_params)
    gen_gas = ConsumptionGenerator("natural_gas", "therms", temp_unit, gas_model, gas_params)
    elec_consumptions = gen_elec.generate(gsod_722880_2012_2014_weather_source(), periods)
    gas_consumptions = gen_gas.generate(gsod_722880_2012_2014_weather_source(), periods)
    ch = ConsumptionHistory(elec_consumptions + gas_consumptions)

    elec_param_list = elec_model.param_dict_to_list(elec_params)
    gas_param_list = gas_model.param_dict_to_list(gas_params)

    average_daily_usages_elec = [c.kWh/c.timedelta.days for c in elec_consumptions]
    average_daily_usages_gas = [c.therms/c.timedelta.days for c in gas_consumptions]


    return ch, elec_param_list, gas_param_list, normal_cdd, normal_hdd, \
            cvrmse_electricity, cvrmse_natural_gas, \
            n_periods, time_span, total_cdd, total_hdd, temp_unit, \
            average_daily_usages_elec, average_daily_usages_gas
Example #8
0
def time_span_1(request):
    model = TemperatureSensitivityModel(cooling=True,heating=True)
    params = {
        "base_consumption": request.param[0][0],
        "heating_slope": request.param[0][1],
        "heating_reference_temperature": request.param[0][2],
        "cooling_slope": request.param[0][3],
        "cooling_reference_temperature": request.param[0][4]
    }
    fuel_type = request.param[1]
    start, end = request.param[2]
    n_days = request.param[3]
    periods = generate_periods(start,end,jitter_intensity=0)
    gen = ConsumptionGenerator(fuel_type, "kWh", "degF", model, params)
    consumptions = gen.generate(gsod_722880_2012_2014_weather_source(), periods)
    param_list = model.param_dict_to_list(params)
    return ConsumptionHistory(consumptions), fuel_type, n_days
Example #9
0
                                 electricity_param_distributions,electricity_param_delta_distributions,
                                 gas_param_distributions,gas_param_delta_distributions)

    start_date = datetime.strptime(args.start_date,"%Y-%m-%d")
    n_days = (datetime.now() - start_date).days
    if n_days < 30:
        message = "start_date ({}) must be at least 30 days before today".format(start_date)
        raise ValueError(message)

    weather_source = GSODWeatherSource(args.weather_station,start_date.year,datetime.now().year)
    weather_normal_source = TMY3WeatherSource(args.weather_station)

    project_data = []
    consumption_data = []
    for _ in range(args.n_projects):
        elec_periods = generate_periods(start_date,datetime.now())
        gas_periods = generate_periods(start_date,datetime.now())

        retrofit_start_date = start_date + timedelta(days=random.randint(0,n_days-30))
        retrofit_completion_date = retrofit_start_date + timedelta(days=30)

        electricity_noise = None
        gas_noise = None

        elec_consumption, gas_consumption, estimated_elec_savings,\
                estimated_gas_savings = generator.generate(weather_source, weather_normal_source, elec_periods, gas_periods,
                                                           retrofit_start_date, retrofit_completion_date,
                                                           electricity_noise,gas_noise)
        custom_id = uuid.uuid4()

        p_data = {