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.