trying to get peak simulation to work
This commit is contained in:
parent
e69c04cda2
commit
bc2ef9fb59
@ -1,5 +1,5 @@
|
||||
import numpy as np
|
||||
from Utilities.Time import generate_timestrings
|
||||
from Utilities.Time import generate_timestrings, index_peak_times
|
||||
|
||||
|
||||
def get_no_of_peaks(peak_bounds):
|
||||
@ -15,10 +15,31 @@ def generate_peak_info(c, dt):
|
||||
dt,
|
||||
)
|
||||
peak_times = np.random.choice(operating_hours, no_of_peaks, replace=False)
|
||||
peak_durations = np.random.randint(
|
||||
c["site_info"]["peak_duration"]["min"],
|
||||
c["site_info"]["peak_duration"]["max"],
|
||||
no_of_peaks,
|
||||
)
|
||||
|
||||
print(f"Peak times: {peak_times}")
|
||||
return peak_times
|
||||
return peak_times, peak_durations
|
||||
|
||||
|
||||
def get_load_profile(c, dt):
|
||||
return generate_peak_info(c, dt)
|
||||
def get_load_profile(c, dt, batch_start_time, batch_process_duration):
|
||||
# Generate load profile for each site
|
||||
|
||||
# c is the configuration dictionary
|
||||
# dt is the time step in seconds
|
||||
# batch_start_time is the start time for the batch process in seconds since the epoch
|
||||
# batch_process_duration is the duration of the batch process in seconds
|
||||
|
||||
# start with indexing all the peak occurences
|
||||
# generate timeseries from start to end time
|
||||
start_time = batch_start_time
|
||||
end_time = start_time + batch_process_duration
|
||||
timestamps = np.arange(start_time, end_time, dt)
|
||||
|
||||
# Generate peak times and durations
|
||||
peak_times, peak_durations = generate_peak_info(c, dt)
|
||||
|
||||
# Generate peak times and durations
|
||||
peak_indices = index_peak_times(timestamps, peak_times, peak_durations)
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
import time
|
||||
from datetime import datetime, timedelta
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as pl
|
||||
|
||||
|
||||
def get_current_time():
|
||||
@ -19,3 +21,34 @@ def generate_timestrings(start_time_str, end_time_str, dt):
|
||||
current_time += timedelta(seconds=dt)
|
||||
timestrings = [dt.strftime("%H:%M") for dt in timestamps]
|
||||
return timestrings
|
||||
|
||||
|
||||
def index_peak_times(timestamps, peak_times, peak_durations):
|
||||
"""Converts peak times from HH:MM format to seconds since epoch."""
|
||||
# start_time is the start time of the batch process in seconds since the epoch
|
||||
# peak_times is a list of strings in HH:MM format
|
||||
dt = timestamps[1] - timestamps[0] # time step in seconds
|
||||
peak_indices = np.zeros(len(timestamps), dtype=int)
|
||||
start_datetime = datetime.fromtimestamp(timestamps[0])
|
||||
processed_times = []
|
||||
peak_occurence_no = 1
|
||||
for time_str, duration in zip(peak_times, peak_durations):
|
||||
# convert HH:MM to a datetime object
|
||||
time_obj = datetime.strptime(time_str, "%H:%M")
|
||||
full_datetime = start_datetime.replace(
|
||||
hour=time_obj.hour, minute=time_obj.minute, second=0, microsecond=0
|
||||
)
|
||||
peak_start = int(full_datetime.timestamp())
|
||||
peak_end = peak_start + duration * 60 # duration in minutes to seconds
|
||||
peak_timestamps = np.arange(peak_start, peak_end, dt, dtype=int)
|
||||
|
||||
common, indices_ts, _ = np.intersect1d(
|
||||
timestamps, peak_timestamps, return_indices=True
|
||||
)
|
||||
peak_indices[indices_ts] = peak_occurence_no
|
||||
peak_occurence_no += 1
|
||||
|
||||
pl.plot(peak_indices, label="Peak Indices")
|
||||
pl.show()
|
||||
|
||||
return processed_times
|
||||
|
||||
@ -30,5 +30,5 @@ no_of_peaks:
|
||||
max: 100
|
||||
peak_duration:
|
||||
unit: minutes
|
||||
min: 0.5
|
||||
max: 2
|
||||
min: 1
|
||||
max: 4
|
||||
|
||||
5
main.py
5
main.py
@ -14,8 +14,11 @@ dt = c["sim_time"]["time_step_minutes"] * 60
|
||||
duration = c["sim_time"]["duration_days"] * 24 * 60 * 60
|
||||
c["sim_end_time"] = c["sim_start_time"] + duration
|
||||
|
||||
# batch process hours in seconds
|
||||
c["sim_time"]["batch_process_seconds"] = c["sim_time"]["batch_process_hours"] * 60 * 60
|
||||
|
||||
# load site info
|
||||
c["site_info"] = yaml.safe_load(open(c["paths"]["site_info"]))
|
||||
|
||||
# generate load profiles
|
||||
get_load_profile(c, dt)
|
||||
get_load_profile(c, dt, c["sim_start_time"], c["sim_time"]["batch_process_seconds"])
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user