Solving conic relaxations using CVX: MSK_RES_TRM_STALL ()


(Christian Bingane) #1

Hello,

I am new in this forum. Here is my problem:

I’m solving some conic relaxations of the AC optimal power flow problem using CVX 2.1. Below is the general model. When I solve the SDP relaxation for n>= 1000, everything is ok with MOSEK 8.0.0.60 but when I solve any other conic relaxation (e.g. SOCP), I get this message Mosek error: MSK_RES_TRM_STALL ().
Can anyone tell me what matters? I read somewhere that when the above MOSEK message occures, it is likely due to bad scaling. But why I don’t have this message for the SDP relaxation?

Thank you very much for your help.

n = 1354: number of buses (vertices) in a graph
nGen << n: number of generator buses
busgen: nGen by n 0-1 matrix
nBranch = 1991: number of branches in the network
edges: list of edges in the graph
Yft: cell of nBranch 2 by 2 matrices
incidentF, incidentT: nBranch by n 0-1 matrix

SDP relaxation: replace XXXXXXX in the model by
V == hermitian_semidefinite(n)

SOCP relaxation: replace XXXXXXX in the model by
for l = 1:size(edges,1)
[V(edges(l,1),edges(l,1)) V(edges(l,1),edges(l,2)); V(edges(l,2),edges(l,1)) V(edges(l,2),edges(l,2))] == hermitian_semidefinite(2)
end

cvx_solver mosek
cvx_precision default
cvx_begin
variable V(n,n) hermitian
variables pf(nBranch) qf(nBranch) pt(nBranch) qt(nBranch)
variables pG(nGen) qG(nGen)
minimize ( c2’*(pG.^2) + c1’*pG + sum(c0) + const )
subject to
% CONIC CONSTRAINTS
XXXXXXXXXXXXXXXXXX
% PF EQUATIONS
busgen’*pG - pL - diag(gs)*diag(V) == incidentF’*pf + incidentT’*pt
busgen’*qG - qL + diag(bs)*diag(V) == incidentF’qf + incidentT’qt
% VOLTAGE LIMITS
Vl <= diag(V) <= Vu
% GENERATION LIMITS
pGl <= pG <= pGu
qGl <= qG <= qGu
% BRANCH CONSTRAINTS
for l=1:nBranch
% FLOW INJECTION
pf(l) + 1i
qf(l) == conj(Yft{l}(1,1))V(from(l),from(l)) + conj(Yft{l}(1,2))V(from(l),to(l))
pt(l) + 1i
qt(l) == conj(Yft{l}(2,1))V(to(l),from(l)) + conj(Yft{l}(2,2))V(to(l),to(l))
% FLOW LIMITS
if (su(l) ~= 0)
[su(l) pf(l) + 1i
qf(l); pf(l) - 1i
qf(l) su(l)] == hermitian_semidefinite(2)
[su(l) pt(l) + 1i
qt(l); pt(l) - 1i
qt(l) su(l)] == hermitian_semidefinite(2)
end
end
cvx_end


(Erling D.Andersen) #2

You are aware computations are done in finite precision. Right?

So you have rounding errors all over the place. Normally they are so small that you can ignore them, but for “bad” models they play a role. So maybe you are lucky the SDP case or unlucky in SOCP case.

In any case you are doing powerflow. So I suggest you read the two last posts of

https://groups.google.com/forum/#!category-topic/yalmip/69iDHp2GW8s


(Christian Bingane) #3

Thank you for your reply. I think the source of the problem may be power flow data as suggested in the last two posts of your link.
I also noticed that I have the error message when I assign some useless variables to zero but when I let them free, everything is ok.
Thank you again for your help!