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.optval15.127504333586348evaluate(objective)15.127504333586351output = 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 = TOLTest PassedThis page was generated using Literate.jl.