Skip to content

Commit 5c8e9fd

Browse files
committed
runic
1 parent a746473 commit 5c8e9fd

2 files changed

Lines changed: 76 additions & 74 deletions

File tree

Lines changed: 75 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ function get_power_data_ref(filename)
3636
return PowerModels.build_ref(data)[:it][:pm][:nw][0]
3737
end
3838

39-
convert_data(data::N, backend) where {names,N<:NamedTuple{names}} =
39+
convert_data(data::N, backend) where {names, N <: NamedTuple{names}} =
4040
NamedTuple{names}(ExaModels.convert_array(d, backend) for d in data)
4141
parse_ac_power_data(filename, backend) =
4242
convert_data(parse_ac_power_data(filename), backend)
@@ -53,65 +53,65 @@ function parse_ac_power_data(filename)
5353
return (
5454
bus = [
5555
begin
56-
bus_loads = [ref[:load][l] for l in ref[:bus_loads][k]]
57-
bus_shunts = [ref[:shunt][s] for s in ref[:bus_shunts][k]]
58-
pd = sum(load["pd"] for load in bus_loads; init = 0.0)
59-
gs = sum(shunt["gs"] for shunt in bus_shunts; init = 0.0)
60-
qd = sum(load["qd"] for load in bus_loads; init = 0.0)
61-
bs = sum(shunt["bs"] for shunt in bus_shunts; init = 0.0)
62-
(i = busdict[k], pd = pd, gs = gs, qd = qd, bs = bs)
63-
end for (k, v) in ref[:bus]
56+
bus_loads = [ref[:load][l] for l in ref[:bus_loads][k]]
57+
bus_shunts = [ref[:shunt][s] for s in ref[:bus_shunts][k]]
58+
pd = sum(load["pd"] for load in bus_loads; init = 0.0)
59+
gs = sum(shunt["gs"] for shunt in bus_shunts; init = 0.0)
60+
qd = sum(load["qd"] for load in bus_loads; init = 0.0)
61+
bs = sum(shunt["bs"] for shunt in bus_shunts; init = 0.0)
62+
(i = busdict[k], pd = pd, gs = gs, qd = qd, bs = bs)
63+
end for (k, v) in ref[:bus]
6464
],
6565
gen = [
6666
(
67-
i = gendict[k],
68-
cost1 = v["cost"][1],
69-
cost2 = v["cost"][2],
70-
cost3 = v["cost"][3],
71-
bus = busdict[v["gen_bus"]],
72-
) for (k, v) in ref[:gen]
67+
i = gendict[k],
68+
cost1 = v["cost"][1],
69+
cost2 = v["cost"][2],
70+
cost3 = v["cost"][3],
71+
bus = busdict[v["gen_bus"]],
72+
) for (k, v) in ref[:gen]
7373
],
7474
arc = [
7575
(i = k, rate_a = ref[:branch][l]["rate_a"], bus = busdict[i]) for
76-
(k, (l, i, j)) in enumerate(ref[:arcs])
76+
(k, (l, i, j)) in enumerate(ref[:arcs])
7777
],
7878
branch = [
7979
begin
80-
f_idx = arcdict[i, branch["f_bus"], branch["t_bus"]]
81-
t_idx = arcdict[i, branch["t_bus"], branch["f_bus"]]
82-
g, b = PowerModels.calc_branch_y(branch)
83-
tr, ti = PowerModels.calc_branch_t(branch)
84-
ttm = tr^2 + ti^2
85-
g_fr = branch["g_fr"]
86-
b_fr = branch["b_fr"]
87-
g_to = branch["g_to"]
88-
b_to = branch["b_to"]
89-
c1 = (-g * tr - b * ti) / ttm
90-
c2 = (-b * tr + g * ti) / ttm
91-
c3 = (-g * tr + b * ti) / ttm
92-
c4 = (-b * tr - g * ti) / ttm
93-
c5 = (g + g_fr) / ttm
94-
c6 = (b + b_fr) / ttm
95-
c7 = (g + g_to)
96-
c8 = (b + b_to)
97-
(
98-
i = branchdict[i],
99-
j = 1,
100-
f_idx = f_idx,
101-
t_idx = t_idx,
102-
f_bus = busdict[branch["f_bus"]],
103-
t_bus = busdict[branch["t_bus"]],
104-
c1 = c1,
105-
c2 = c2,
106-
c3 = c3,
107-
c4 = c4,
108-
c5 = c5,
109-
c6 = c6,
110-
c7 = c7,
111-
c8 = c8,
112-
rate_a_sq = branch["rate_a"]^2,
113-
)
114-
end for (i, branch) in ref[:branch]
80+
f_idx = arcdict[i, branch["f_bus"], branch["t_bus"]]
81+
t_idx = arcdict[i, branch["t_bus"], branch["f_bus"]]
82+
g, b = PowerModels.calc_branch_y(branch)
83+
tr, ti = PowerModels.calc_branch_t(branch)
84+
ttm = tr^2 + ti^2
85+
g_fr = branch["g_fr"]
86+
b_fr = branch["b_fr"]
87+
g_to = branch["g_to"]
88+
b_to = branch["b_to"]
89+
c1 = (-g * tr - b * ti) / ttm
90+
c2 = (-b * tr + g * ti) / ttm
91+
c3 = (-g * tr + b * ti) / ttm
92+
c4 = (-b * tr - g * ti) / ttm
93+
c5 = (g + g_fr) / ttm
94+
c6 = (b + b_fr) / ttm
95+
c7 = (g + g_to)
96+
c8 = (b + b_to)
97+
(
98+
i = branchdict[i],
99+
j = 1,
100+
f_idx = f_idx,
101+
t_idx = t_idx,
102+
f_bus = busdict[branch["f_bus"]],
103+
t_bus = busdict[branch["t_bus"]],
104+
c1 = c1,
105+
c2 = c2,
106+
c3 = c3,
107+
c4 = c4,
108+
c5 = c5,
109+
c6 = c6,
110+
c7 = c7,
111+
c8 = c8,
112+
rate_a_sq = branch["rate_a"]^2,
113+
)
114+
end for (i, branch) in ref[:branch]
115115
],
116116
ref_buses = [busdict[i] for (i, k) in ref[:ref_buses]],
117117
vmax = [v["vmax"] for (k, v) in ref[:bus]],
@@ -130,7 +130,7 @@ function exa_ac_power_model(backend, data)
130130

131131
w = ExaModels.ExaCore(backend = backend)
132132

133-
va = ExaModels.variable(w, length(data.bus);)
133+
va = ExaModels.variable(w, length(data.bus))
134134

135135
vm = ExaModels.variable(
136136
w,
@@ -157,35 +157,35 @@ function exa_ac_power_model(backend, data)
157157
c2 = ExaModels.constraint(
158158
w,
159159
p[b.f_idx] - b.c5 * vm[b.f_bus]^2 -
160-
b.c3 * (vm[b.f_bus] * vm[b.t_bus] * cos(va[b.f_bus] - va[b.t_bus])) -
161-
b.c4 * (vm[b.f_bus] * vm[b.t_bus] * sin(va[b.f_bus] - va[b.t_bus])) for
162-
b in data.branch
160+
b.c3 * (vm[b.f_bus] * vm[b.t_bus] * cos(va[b.f_bus] - va[b.t_bus])) -
161+
b.c4 * (vm[b.f_bus] * vm[b.t_bus] * sin(va[b.f_bus] - va[b.t_bus])) for
162+
b in data.branch
163163
)
164164

165165
c3 = ExaModels.constraint(
166166
w,
167167
q[b.f_idx] +
168-
b.c6 * vm[b.f_bus]^2 +
169-
b.c4 * (vm[b.f_bus] * vm[b.t_bus] * cos(va[b.f_bus] - va[b.t_bus])) -
170-
b.c3 * (vm[b.f_bus] * vm[b.t_bus] * sin(va[b.f_bus] - va[b.t_bus])) for
171-
b in data.branch
168+
b.c6 * vm[b.f_bus]^2 +
169+
b.c4 * (vm[b.f_bus] * vm[b.t_bus] * cos(va[b.f_bus] - va[b.t_bus])) -
170+
b.c3 * (vm[b.f_bus] * vm[b.t_bus] * sin(va[b.f_bus] - va[b.t_bus])) for
171+
b in data.branch
172172
)
173173

174174
c4 = ExaModels.constraint(
175175
w,
176176
p[b.t_idx] - b.c7 * vm[b.t_bus]^2 -
177-
b.c1 * (vm[b.t_bus] * vm[b.f_bus] * cos(va[b.t_bus] - va[b.f_bus])) -
178-
b.c2 * (vm[b.t_bus] * vm[b.f_bus] * sin(va[b.t_bus] - va[b.f_bus])) for
179-
b in data.branch
177+
b.c1 * (vm[b.t_bus] * vm[b.f_bus] * cos(va[b.t_bus] - va[b.f_bus])) -
178+
b.c2 * (vm[b.t_bus] * vm[b.f_bus] * sin(va[b.t_bus] - va[b.f_bus])) for
179+
b in data.branch
180180
)
181181

182182
c5 = ExaModels.constraint(
183183
w,
184184
q[b.t_idx] +
185-
b.c8 * vm[b.t_bus]^2 +
186-
b.c2 * (vm[b.t_bus] * vm[b.f_bus] * cos(va[b.t_bus] - va[b.f_bus])) -
187-
b.c1 * (vm[b.t_bus] * vm[b.f_bus] * sin(va[b.t_bus] - va[b.f_bus])) for
188-
b in data.branch
185+
b.c8 * vm[b.t_bus]^2 +
186+
b.c2 * (vm[b.t_bus] * vm[b.f_bus] * cos(va[b.t_bus] - va[b.f_bus])) -
187+
b.c1 * (vm[b.t_bus] * vm[b.f_bus] * sin(va[b.t_bus] - va[b.f_bus])) for
188+
b in data.branch
189189
)
190190

191191
c6 = ExaModels.constraint(
@@ -216,8 +216,8 @@ function exa_ac_power_model(backend, data)
216216
c14 = ExaModels.constraint!(w, c10, g.bus => -qg[g.i] for g in data.gen)
217217

218218
return ExaModels.ExaModel(w; prod = true),
219-
(va, vm, pg, qg, p, q),
220-
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10)
219+
(va, vm, pg, qg, p, q),
220+
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10)
221221

222222
end
223223

@@ -227,9 +227,11 @@ end
227227
examodel = first(exa_ac_power_model(backend, data))
228228
res = ipopt(examodel, print_level = 0)
229229
milp = CoolPDLP.MILP(QuadraticModel(examodel, res.solution), ignore_islp = true)
230-
sol, cres = CoolPDLP.solve(milp, PDLP(
231-
Float32, Int32, SparseMatrixCSC; backend,
232-
termination_reltol = 1.0f-4, time_limit = 10.0,
233-
))
230+
sol, cres = CoolPDLP.solve(
231+
milp, PDLP(
232+
Float32, Int32, SparseMatrixCSC; backend,
233+
termination_reltol = 1.0f-4, time_limit = 10.0,
234+
)
235+
)
234236
@test cres.termination_status == CoolPDLP.OPTIMAL
235-
end
237+
end

test/runtests.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@ using Test
2121
include("moi.jl")
2222
end
2323
@testset "QuadraticModels Wrapper" begin
24-
include("extensions/QuadraticModels/power.jl")
24+
include("QuadraticModels.jl")
2525
end
2626
end

0 commit comments

Comments
 (0)