Appliances with multiple cycles

An example of an appliance with multiple cycle is a fridge. Fridges usually have different duty cycles, which can be estimated based on seasonal temperature trends and/or frequency of user interaction (e.g., how often the door gets opened).

In this example a fridge with 3 different duty cycles is modelled. The time windows are defined for 3 different cycles across 3 different season types:

season type

Standard cycle

Intermediate cycle

Intensive cycle

Hot

00:00:00 - 04:59:00 & 20:01:00 - 23:59:00

05:00:00 - 07:59:00

08:00:00 - 20:00:00

Warm

00:00:00 - 04:59:00 & 18:01:00 - 23:59:00

05:00:00 - 09:39:00

09:40:00 - 18:00:00

Cold

00:00:00 - 04:59:00 & 20:01:00 - 23:59:00

05:00:00 - 20:00:00

Creating the user and appliance

# importing functions
from ramp import User, UseCase, get_day_type
import pandas as pd
# creating user
household = User()
# creating the appliance
fridge = household.Appliance(
    name="Fridge",
    number=1,
    power=200,
    num_windows=1,
    func_time=1400,
    time_fraction_random_variability=0,
    func_cycle=30,
    fixed="yes",
    fixed_cycle=3,  # number of cycles
)
# setting the functioning windows
fridge.windows([0, 1440])  # always on during the whole year

Assigining the specific cycles

# assiging the specific cycles
# first cycle: standard cycle
fridge.specific_cycle_1(
    p_11=200,
    t_11=20,
    p_12=5,
    t_12=10,
)

# second cycle: intermediate cycle
fridge.specific_cycle_2(
    p_21=200,
    t_21=15,
    p_22=5,
    t_22=15,
)

# third cycle: intensive cycle
fridge.specific_cycle_3(
    p_31=200,
    t_31=10,
    p_32=5,
    t_32=20,
)

After defining the cycle power and duration parameters, the time windows of year at which the cycles happens should be specifid by:

# defining cycle behaviour
fridge.cycle_behaviour(
    cw11=[480, 1200], cw21=[300, 479], cw31=[0, 229], cw32=[1201, 1440]
)

Buidling the profiles

use_case = UseCase(users=[household])
peak_time_range = use_case.calc_peak_time_range()
# days to build the profiles
days = [
    "2020-05-16",
    "2020-08-16",
    "2020-12-16",
]

profiles = pd.DataFrame(index=range(0, 1440), columns=days)

for day_idx, day in enumerate(days):
    profile = household.generate_single_load_profile(
        prof_i=day_idx,  # the day to generate the profile
        peak_time_range=peak_time_range,
        day_type=get_day_type(day),
    )

    profiles[day] = profile
print(profiles)
      2020-05-16  2020-08-16  2020-12-16
0          0.001       5.000       0.001
1          0.001       5.000       0.001
2          0.001       5.000       0.001
3          5.000       5.000       0.001
4          5.000       5.000       0.001
...          ...         ...         ...
1435       0.001       0.001       0.001
1436       0.001       0.001       0.001
1437       0.001       0.001       0.001
1438       0.001       0.001       0.001
1439       0.001       0.001       0.001

[1440 rows x 3 columns]
# plotting a part of the days
profiles.iloc[400:500].plot()
<AxesSubplot:>
../../_images/output_15_1.png