Progress is bad or primal infeas has deteriorated too much


(zy) #1

I was using bisection to solve a quasi-concave problem, but a little problem appeared. My initial set of bot = 0, top = 6. t = (bot + top) / 2. Before the fourteenth iteration, the program was correct. Iteration to 13 times, t = 1.87866211, after that t=1.87902832. When t = 1.87902832, the program is wrong. the final is progress is bad or primal infeas has deteriorated too much. Can anyone help me?
%% ---------------------------------------------------------------------
clc
clear all
load(‘BETAA.mat’);
load(‘Phii.mat’);
M = 100; K = 40; tau = 20; B = 20;
power_f=0.2; %downlink power: 200 mW
noise_p = 10^((-203.975+10log10(B10^6)+9)/10); %noise power
Pd = power_f/noise_p;%nomalized receive SNR
Pp=Pd/2;%pilot power: 100 mW
Gamma = Cellfree_Create_Gamma( BETAA, Phii, M, K ,tau,Pp);
top = 6;
bot = 0;
err = 1e-5;
while abs(top-bot)>err
t=(bot+top)/2;
%% --------------------------------------------------------------CVX
cvx_begin
variable rou(K,K)
variable V(M) nonnegative
variable cauy(M,K)
sb1_left = cvx(zeros(K,1));
sb1_right = cvx(zeros(K,1));
sb2_left = cvx(zeros(M,1));
sb3_left = cvx(zeros(K,K));
%%-----------------------------subject 1 left
for k=1:K
I = eye(K);
I(:,k)=[];
vk1 = (Phii’*Phii(:,k).*rou(:,k)).‘I;
vk2 = ((BETAA(:,k).^(1/2)).V).’;
vk3 = 1/(Pd^(1/2));
sb1_left(k) = norm([vk1 vk2 vk3].’);
end
%%-----------------------------calculate subject 1 right
for k=1:K
sb1_right(k) = sum(Gamma(:,k) .
cauy(:,k)) * (1/(t^0.5));
end
%%-----------------------------calculate subject 2 left
%%converge to norm
for m=1:M
sb2_left(m) = norm( ((Gamma(m,:).^(1/2)) .
cauy(m,:)).’ );
end
%%-----------------------------calculate subject 3 left

for k=1:K
for kk=[1:k-1,k+1:K]
sb3_left(kk,k) = sum(Gamma(:,kk) ./ BETAA(:,kk) .* cauy(:,kk) .* BETAA(:,k) );
end
end
%%-----------------------------subject------------------------------
subject to
for k=1:K
sb1_left(k) - sb1_right(k) <= 0;
end
for m=1:M
sb2_left(m) - V(m)<= 0 ;
end
for k=1:K
for kk=[1:k-1,k+1:K]
sb3_left(kk,k) - rou(kk,k) <= 0;
end
end
for m=1:M
0 <= V(m) <=1;
end
for m=1:M
for k=1:K
-cauy(m,k) <= 0;
end
end
cvx_end
%% ---------------------------------------------------------------------
TF = isinf(cvx_optval);
if TF==0
bot = t;
elseif TF
top = t;
end
end

Calling SDPT3 4.0: 15680 variables, 5770 equality constraints
For improved efficiency, SDPT3 is solving the dual problem.

Status: Failed
Optimal value (cvx_optval): NaN

then I used Sedumi and Mosek,here is the result

Sedumi:Status: Inaccurate/Solved
Optimal value (cvx_optval): +0.0126067

Mosek:Status: Failed
Optimal value (cvx_optval): NaN