Power flow optimization

The data for example is taken from MATPOWER website. MATPOWER is Matlab package for solving power flow and optimal power flow problems.

using Convex, SCS
using Test
using MAT   #Pkg.add("MAT")
aux(str) = joinpath(@__DIR__, "aux_files", str) # path to auxiliary files

TOL = 1e-2;
input = matopen(aux("Data.mat"))
varnames = names(input)
Data = read(input, "inj", "Y");

n = size(Data[2], 1);
Y = Data[2];
inj = Data[1];
W = ComplexVariable(n, n);
objective = real(sum(diag(W)));
c1 = Constraint[];
for i in 2:n
    push!(c1, dot(Y[i, :], W[i, :]) == inj[i])
end
c2 = isposdef(W)
c3 = real(W[1, 1]) == 1.06^2;
push!(c1, c2)
push!(c1, c3)
p = maximize(objective, c1);
solve!(p, SCS.Optimizer; silent = true)
Problem statistics
  problem is DCP         : true
  number of variables    : 1 (392 scalar elements)
  number of constraints  : 15 (811 scalar elements)
  number of coefficients : 248
  number of atoms        : 66

Solution summary
  termination status : OPTIMAL
  primal status      : FEASIBLE_POINT
  dual status        : FEASIBLE_POINT
  objective value    : 15.1275

Expression graph
  maximize
   └─ real (affine; real)
      └─ sum (affine; complex)
         └─ diag (affine; complex)
            └─ …
  subject to
   ├─ == constraint (affine)
   │  └─ + (affine; complex)
   │     ├─ sum (affine; complex)
   │     │  └─ …
   │     └─ complex constant
   ├─ == constraint (affine)
   │  └─ + (affine; complex)
   │     ├─ sum (affine; complex)
   │     │  └─ …
   │     └─ complex constant
   ├─ == constraint (affine)
   │  └─ + (affine; complex)
   │     ├─ sum (affine; complex)
   │     │  └─ …
   │     └─ complex constant
   ⋮
p.optval
15.127504333586348
evaluate(objective)
15.127504333586351
output = matopen(joinpath(@__DIR__, "Res.mat"))
names(output)
outputData = read(output, "Wres");
Wres = outputData
real_diff = real(evaluate(W)) - real(Wres);
imag_diff = imag(evaluate(W)) - imag(Wres);
@test real_diff ≈ zeros(n, n) atol = TOL
@test imag_diff ≈ zeros(n, n) atol = TOL

real_diff = real(evaluate(W)) - (real(evaluate(W)))';
imag_sum = imag(evaluate(W)) + (imag(evaluate(W)))';
@test real_diff ≈ zeros(n, n) atol = TOL
@test imag_diff ≈ zeros(n, n) atol = TOL
Test Passed

This page was generated using Literate.jl.