Convergence rate is slow, and finally failed

My optimization problem is to maximize the minimum rate of the user under the transmit power constraint. I put the transmit power very small, for example -10dBm, the objective function value is convergent. However, when I amplified the transmission power, the value of the objective function increased slowly, and the result was failed. I’ve used different solvers, mosek/sedumi, and this problem comes up. How to solve this problem?

Here’s my code

cvx_begin
cvx_quiet true

variable z_opt(para.Ne, para.Na) 'complex'
variable MM2

expression r

    z_opt_vec = vec(z_opt.');

    for k = 1:para.K
        r(k) = real(a(k)) + 2 * real(b{k} * z_opt_vec) - pow_pos(norm(sqrtm(C{k}) * z_opt_vec, 'fro'), 2);
        MM2 <= r(k);
    end

maximize MM2

subject to
    pow_pos(norm(sqrtm(delta) * z_opt_vec, 'fro'), 2) <= 4 * para.P;    

cvx_end
cvx_status

Remove cvx_quiet, and show us all the CVX and (Mosek) solver output for both the case which worked and the case which failed. It would be better if you can also show is the input data and make them into complete reproducible examples.

Perhaps you can improve things numerically by not squaring the LHS of the constraint, and instead taking the square root of the RHS.

Thank you for your reply. Now I can solve my problem correctly

I changed my optimization problem and my code is as follows

cvx_begin
variable z_opt(para.Ne, para.Na) 'complex'
variable lambda_r

expression r
expression penalty_term
expression obj_fun

    z_opt_vec = vec(z_opt.');
    penalty_term = pow_pos(norm(z_opt_vec - J - exp(complex(0,1) * vec(theta.')),'fro'), 2);
    
    obj_fun = gamma * penalty_term - lambda_r;
        
minimize obj_fun 

subject to
    quad_form(z_opt_vec, delta) <= 4 * para.P;
    for k = 1:para.K
        r(k) = real(a(k)) + 2 * real(b{k} * z_opt_vec) - quad_form(z_opt_vec, C{k});
        lambda_r <= r(k);
    end

cvx_end
cvx_status

My results are as follows


Due to numerical problems Mosek cannot solve the problem to high accuracy. It seems to find a decent primal solution.

Why do you square in the above penalty term.

You could do

and then adjust the gamma. That leads to a better conditioned problem.

Thank you for your reply. I tried as you suggested, the initial value of gamma is 10^(-4), increasing gamma->1.2gamma, but I still failed.


When both SeDuMi and Mosek fails then it is a good indication that your problem is broken numerically.

Mosek even tells you

MSK_RES_ERR_HUGE_AIJ

which is a nice way of telling you that your problem is most likely garbage.

Thank you very much for your answer, so is there any effective way to solve this problem in the cvx toolbox?

My guess is you do SCA:

https://twitter.com/themarklstone/status/1586795881168265216

Yes, I used SCA. Thank you very much.

Yes, the outputs and subsequent inputs of SCA can get more and more extreme, until at some point the solver fails. Of course, by that point, the algorithm is probably not converging to anything, let alone a global or even local optimum of the original problem.