forked from utwente-energy/profilesteering
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
76 lines (53 loc) · 2.2 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/usr/bin/python3
# Copyright 2023 University of Twente
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Implementation of the algorithm presented in:
# M.E.T. Gerards et al., "Demand Side Management using Profile Steering", IEEE PowerTech, 2015, Eindhoven.
# https://research.utwente.nl/en/publications/demand-side-management-using-profile-steering
# Interactive demo: https://foreman.virt.dacs.utwente.nl/~gerardsmet/vis/ps.html
# Optimization of devices (OptAlg file) based on the work of Thijs van der Klauw)
# https://ris.utwente.nl/ws/portalfiles/portal/12378855/thesis_T_van_der_Klauw.pdf
# Importing models
from dev.load import Load
from dev.battery import Battery
from dev.electricvehicle import ElectricVehicle
from dev.heatpump import HeatPump
# Import Profile Steering
from profilesteering import ProfileSteering
# Initialisation
devices = []
# Settings
intervals = 96
desired_profile = [0]*intervals # d in the PS paper
power_profile = [0]*intervals # x in the PS paper
e_min = 0.001 # e_min in the PS paper
max_iters = 100 # maximum number of iterations
# Create the model:
# Add some baseloads
for i in range(0,10):
devices.append(Load())
# Add some batteries
for i in range(0,10):
devices.append(Battery())
# Add some EVs
for i in range(0,10):
devices.append(ElectricVehicle())
# Add some Heatpumps
for i in range(0,10):
devices.append(HeatPump())
# Run the Profile Steering algorithm
ps = ProfileSteering(devices)
power_profile = ps.init(desired_profile)
power_profile = ps.iterative(e_min, max_iters)
# And now power_profile has the result
# print("Resulting profile", power_profile)
# Tools like matplotlib let you plot this in a nice way
# Other tools may also have this available