# Is there a more efficient way to solve this problem in cvx?

#1

Hi all,
I have the following problem here which is a inner optimization problem in the iteration of a optimization algorithm. It will be conducted many times during the iterations and I’m not sure if there is a more efficient way to solve this problem in cvx?
\mathop {\min }\limits_{{\mathbf{w}}_i^q,{\mathbf{R}}_i^q} \sum\limits_{q \in \mathcal{Q}} {{\mathbf{w}}_i^q} + \frac{1}{{4\rho \left| {{\mathcal{N}_i}} \right|}}\left\| {{\mathbf{R}}_i^q - \sum\limits_{m \in \mathcal{C}} {w_{m,i}^q} {{\left( {P_{m,i}^q} \right)}^{ - 1}} - \rho \sum\limits_{j \in {\mathcal{N}_i}} {\left( {{\mathbf{G}}_i^q + {\mathbf{G}}_j^q} \right)} } \right\|_{\text{F}}^2
subject to
\sum\limits_{m \in \mathcal{C}} {\sum\limits_{q \in \mathcal{Q}} {w_{m,i}^q} } \leq 1,0 \leq w_{m,i}^q \leq 1 and {\mathbf{R}}_i^q \succeq {\mathbf{0}}
and here is my matlab code

    cvx_begin quiet
variable wn(NT*NW,1)
variable Rn(NT,2,2)
expression Rtn(2,2)
expression t(1,1)
minimize sum(wn) + t
subject to
sum1 = zeros(2,2);
for tt = 1:NT

Ptn(:,:) = Pn(tt,:,:);
Rtn(:,:) = Rn(tt,:,:);

BwR =  Rtn - kron(wn((tt-1)*NW+1:tt*NW),I)'*Ptn;
Gt(:,:,:) = G(tt,:,:,:);
Gtn(:,:) = Ni(n)*G(tt,n,:,:);
Gtn = squeeze(sum(repmat(adjMtx(n,:)',[1 2 2]).*Gt(:,:,:))) + Gtn;
BwR = rau * Gtn - BwR;
sum1 = sum1 + square_pos(norm(BwR,'fro'));
Rtn(:,:) == semidefinite(size(I));
end
norm(wn)<= 1;
sum1 = sum1*(4*rau*Ni(n))^-1;
t >= sum1;

0<= wn(:) <=1;
cvx_end


Your help would be greatly appreciated.

(Mark L. Stone) #2

I don’t know whether there is a more efficient way to solve the problem in CVX. But if you need to solve this problem many times within a larger optimization algorithm, CVX will never be the fastest way of solving it, due to the modeling overhead incurred for each problem instance being called.