working on load profiling simulation
This commit is contained in:
commit
e69c04cda2
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
venv/
|
||||
*.pyc
|
||||
24
LoadProfile.py
Normal file
24
LoadProfile.py
Normal file
@ -0,0 +1,24 @@
|
||||
import numpy as np
|
||||
from Utilities.Time import generate_timestrings
|
||||
|
||||
|
||||
def get_no_of_peaks(peak_bounds):
|
||||
peak_occurences = np.random.randint(peak_bounds["min"], peak_bounds["max"], 1)
|
||||
return peak_occurences
|
||||
|
||||
|
||||
def generate_peak_info(c, dt):
|
||||
no_of_peaks = get_no_of_peaks(c["site_info"]["no_of_peaks"])
|
||||
operating_hours = generate_timestrings(
|
||||
c["site_info"]["operating hours"]["start"],
|
||||
c["site_info"]["operating hours"]["end"],
|
||||
dt,
|
||||
)
|
||||
peak_times = np.random.choice(operating_hours, no_of_peaks, replace=False)
|
||||
|
||||
print(f"Peak times: {peak_times}")
|
||||
return peak_times
|
||||
|
||||
|
||||
def get_load_profile(c, dt):
|
||||
return generate_peak_info(c, dt)
|
||||
21
Utilities/Time.py
Normal file
21
Utilities/Time.py
Normal file
@ -0,0 +1,21 @@
|
||||
import time
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
|
||||
def get_current_time():
|
||||
"""Returns the current time in seconds since the epoch."""
|
||||
return time.time()
|
||||
|
||||
|
||||
def generate_timestrings(start_time_str, end_time_str, dt):
|
||||
"""Generates a list of timestamps from start_time to end_time, which are strings such
|
||||
as 19:00."""
|
||||
|
||||
timestamps = []
|
||||
current_time = datetime.strptime(start_time_str, "%H:%M")
|
||||
end_time = datetime.strptime(end_time_str, "%H:%M")
|
||||
while current_time <= end_time:
|
||||
timestamps.append(current_time)
|
||||
current_time += timedelta(seconds=dt)
|
||||
timestrings = [dt.strftime("%H:%M") for dt in timestamps]
|
||||
return timestrings
|
||||
7
YAMLs/config.yml
Normal file
7
YAMLs/config.yml
Normal file
@ -0,0 +1,7 @@
|
||||
sim_time:
|
||||
time_step_minutes: 1
|
||||
batch_process_hours: 24 # compute load profile of 24 hours at a time
|
||||
duration_days: 60
|
||||
|
||||
paths:
|
||||
site_info: YAMLs/site_info.yaml
|
||||
34
YAMLs/site_info.yaml
Normal file
34
YAMLs/site_info.yaml
Normal file
@ -0,0 +1,34 @@
|
||||
# site consumption info to simulate load profile with
|
||||
|
||||
sites:
|
||||
- name: Aetas Damansara
|
||||
daily_consumption_kWh: 308
|
||||
maximum_demand_kW: 145
|
||||
location: 3.132000, 101.623000
|
||||
- name: Alora
|
||||
daily_consumption_kWh: 432
|
||||
maximum_demand_kW: 203
|
||||
location: 2.997419, 101.589894
|
||||
- name: Alira
|
||||
daily_consumption_kWh: 449
|
||||
maximum_demand_kW: 211
|
||||
location: 3.057000, 101.582000
|
||||
- name: Amika
|
||||
daily_consumption_kWh: 533
|
||||
maximum_demand_kW: 251
|
||||
location: 3.048500, 101.634000
|
||||
- name: Lakeside Sanderling
|
||||
daily_consumption_kWh: 736
|
||||
maximum_demand_kW: 346
|
||||
location: 3.040300, 101.610100
|
||||
operating hours:
|
||||
start: "07:00"
|
||||
end: "19:00"
|
||||
time zone: Asia/Kuala_Lumpur
|
||||
no_of_peaks:
|
||||
min: 30
|
||||
max: 100
|
||||
peak_duration:
|
||||
unit: minutes
|
||||
min: 0.5
|
||||
max: 2
|
||||
21
main.py
Normal file
21
main.py
Normal file
@ -0,0 +1,21 @@
|
||||
import yaml
|
||||
from Utilities.Time import get_current_time
|
||||
from LoadProfile import get_load_profile
|
||||
|
||||
# read config file
|
||||
c = yaml.safe_load(open("YAMLs/config.yml"))
|
||||
|
||||
## simulation time setup
|
||||
# get current time
|
||||
c["sim_start_time"] = get_current_time()
|
||||
# get time step in minutes, then convert to seconds
|
||||
dt = c["sim_time"]["time_step_minutes"] * 60
|
||||
# compute end time based on duration in days
|
||||
duration = c["sim_time"]["duration_days"] * 24 * 60 * 60
|
||||
c["sim_end_time"] = c["sim_start_time"] + duration
|
||||
|
||||
# load site info
|
||||
c["site_info"] = yaml.safe_load(open(c["paths"]["site_info"]))
|
||||
|
||||
# generate load profiles
|
||||
get_load_profile(c, dt)
|
||||
6
requirements.txt
Normal file
6
requirements.txt
Normal file
@ -0,0 +1,6 @@
|
||||
numpy==2.3.1
|
||||
pandas==2.3.1
|
||||
python-dateutil==2.9.0.post0
|
||||
pytz==2025.2
|
||||
six==1.17.0
|
||||
tzdata==2025.2
|
||||
Loading…
x
Reference in New Issue
Block a user