My SDP optimization result is negative infinity, and my parameter settings are all correct. Could you please tell me why this is happening?

cvx_begin sdp
variable V(L, L) semidefinite;
expression Xi;
Xi = 0;
for k = 1:K
for i = 1:Ik

                [U_bar_k_i, U_k_i, U_k_i_tilde, beta_k_i_star, chi_k_i_star] = compute_results(k, i, h_RB, g, pk_i, V_tilde, sigma1, L);
                
                tr_UkVi = real(trace(U_k_i * V_tilde)); 
                tr_UbarkVi = real(trace(U_bar_k_i * V_tilde)); 
                tr_UktildeVi = real(trace(U_k_i_tilde * V_tilde));
                disp(tr_UkVi)
                disp(tr_UbarkVi)
                disp(tr_UktildeVi)
                expression tr_UkV; 
                expression tr_UktildeV; 
                tr_UkV = real(trace(U_k_i * V));
                tr_UktildeV = real(trace(U_k_i_tilde * V));
                
                C1_k_i = m_k(k) * log(1 + tr_UkVi / (tr_UbarkVi + sigma2));
                C2_k_i = m_k(k) * (tr_UkVi / (tr_UbarkVi + sigma2));
                
                Gamma = C1_k_i + C2_k_i * ( ...
                    (2 * sqrt(tr_UkV)/sqrt(tr_UkVi)) ...
                    - ((tr_UktildeV+sigma1^2) / (tr_UktildeVi + sigma1)) - 1);
                
                E1_k_i = 0.5 * sqrt((2 * tr_UkVi) / (tr_UktildeVi + sigma1));
                E2_k_i = 0.5 * sqrt((2 * tr_UkVi) / (tr_UkVi + sigma1));
            
                Omega1 = E1_k_i + (beta_k_i_star * ( ...
                    sqrt(2 * tr_UkVi) + 2 * tr_UkV / sqrt(2 * tr_UkVi)) ...
                    - abs(beta_k_i_star)^2 * (tr_UktildeV + sigma1)) / (4 * E1_k_i);
                
                Omega2 = E2_k_i + (chi_k_i_star * ( ...
                    sqrt(2 * tr_UkVi) + 2 * tr_UkV / sqrt(2 * tr_UkVi)) ...
                    - abs(chi_k_i_star)^2 * (tr_UktildeV + sigma1)) / (4 * E2_k_i);           
            
                if i ~= Ik
                    Xi_k_i = Gamma - Omega1;
                else
                    Xi_k_i = m_k(k) * log(1 + tr_UkV) - Omega2;
                end
                Xi = Xi + Xi_k_i;
            end
        end

        maximize(Xi); 
        subject to

            for k = 1:K
                for i = 1:Ik

                    [U_bar_k_i, U_k_i, ~, ~, ~] = compute_results(k, i, h_RB, g, pk_i, V_tilde, sigma1, L);
                    
                    if i ~= Ik
  
                        real(trace(U_k_i * V)) >= gamma0 * (real(trace(U_bar_k_i * V)) + sigma1);
                    else
                        real(trace(U_k_i * V)) >= gamma0 * sigma1;
                    end
                end
            end

            for k = 1:K

                [~, U_k_i, ~, ~, ~] = compute_results(k, 1, h_RB, g, pk_i, V_tilde, sigma1, L);
                U_k_i_temp1 = U_k_i; 
                [~, U_k_i, ~, ~, ~] = compute_results(k, 2, h_RB, g, pk_i, V_tilde, sigma1, L);
                U_k_i_temp2 = U_k_i; 
         
                real(trace(U_k_i_temp1 * V)) >= real(trace(U_k_i_temp2 * V));
            end

            for l = 1:L
                V(l, l) == 1; 
            end
    cvx_end

I am a beginner. Could you please help me?

  • Please post the log output from the optimizer. (I prefer Mosek.)
  • Also try another optimizer e.g. SeDuMi and Mosek.
1 Like

Thank you for your response, but it seems like there is still an issue with my code.

If you are lucky someone has time to debug your code but I would not hold my breath while waiting.

Thank you for your reply.