-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuc_data_generator_utils.jl
102 lines (92 loc) · 3.35 KB
/
uc_data_generator_utils.jl
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
using PowerModels
using Random
using StatsBase
function write_file(arr, dir)
io = open(dir, "w") do io
for x in arr
println(io, x)
end
end
end
# This generates random minimum uptime and downtime and startup/shutdown costs, assuming all units are on at the beginning
# Example:
# mfile_dir = "data/case118.m"
# output_dir = "data/multiperiod_data/case118_gen"
function uc_data_generator_initial_all_on(mfile_dir, output_dir; seed = 0)
Random.seed!(seed)
data = PowerModels.parse_file(mfile_dir)
ngen = sum([v["gen_status"] for (k,v) in data["gen"]])
v0 = ones(Int, ngen)
tu = rand(0:6, ngen)
td = rand(0:6, ngen)
hu = Int[rand(0:tu[i]÷2) for i in 1:ngen]
hd = zeros(Int, ngen)
con = Float64[ rand() * 3000 + 2000 for i in 1:ngen]
coff = Float64[ rand() * 2000 + 1000 for i in 1:ngen]
write_file(v0, "$(output_dir).v0")
write_file(tu, "$(output_dir).tu")
write_file(td, "$(output_dir).td")
write_file(hu, "$(output_dir).hu")
write_file(hd, "$(output_dir).hd")
write_file(con, "$(output_dir).con")
write_file(coff, "$(output_dir).coff")
end
# This generates random minimum uptime and downtime and startup/shutdown costs, assuming all units are on at the beginning
# Example:
# mfile_dir = "data/case118.m"
# output_dir = "data/multiperiod_data/case118_gen"
function uc_data_generator(mfile_dir, output_dir; seed = 0)
Random.seed!(seed)
data = PowerModels.parse_file(mfile_dir)
ngen = sum([v["gen_status"] for (k,v) in data["gen"]])
v0 = rand(0:1, ngen)
tu = rand(0:6, ngen)
td = rand(0:6, ngen)
hu = zeros(Int, ngen)
hd = zeros(Int, ngen)
for i in 1:ngen
if v0[i] == 1
hu[i] = rand(0:tu[i]÷2)
else
hd[i] = rand(0:td[i]÷2) # this may lead to infeasible cases
end
end
con = Float64[ rand() * 3000 + 2000 for i in 1:ngen]
coff = Float64[ rand() * 2000 + 1000 for i in 1:ngen]
write_file(v0, "$(output_dir).v0")
write_file(tu, "$(output_dir).tu")
write_file(td, "$(output_dir).td")
write_file(hu, "$(output_dir).hu")
write_file(hd, "$(output_dir).hd")
write_file(con, "$(output_dir).con")
write_file(coff, "$(output_dir).coff")
end
# v2 version of uc data generator, with the following assumptions
# - setting hd = 0 for all generators (so no unit is forced to be off at the beginning)
# - 75% of generators are on initially
function uc_data_generator_v2(mfile_dir, output_dir; seed = 0)
Random.seed!(seed)
data = PowerModels.parse_file(mfile_dir)
ngen = sum([v["gen_status"] for (k,v) in data["gen"]])
v0 = zeros(Int, ngen)
v0[sample(collect(1:ngen),round(Int,0.75*ngen);replace=false)] .= 1
tu = rand(0:6, ngen)
td = rand(0:6, ngen)
hu = Int[rand(0:tu[i]÷2) for i in 1:ngen]
hu = zeros(Int, ngen)
hd = zeros(Int, ngen)
for i in 1:ngen
if v0[i] == 1
hu[i] = rand(0:tu[i]÷2)
end
end
con = Float64[ rand() * 3000 + 2000 for i in 1:ngen]
coff = Float64[ rand() * 2000 + 1000 for i in 1:ngen]
write_file(v0, "$(output_dir).v0")
write_file(tu, "$(output_dir).tu")
write_file(td, "$(output_dir).td")
write_file(hu, "$(output_dir).hu")
write_file(hd, "$(output_dir).hd")
write_file(con, "$(output_dir).con")
write_file(coff, "$(output_dir).coff")
end