# Cvx running:How to understand the result "cvx_optbnd :-Inf"

How to understand the result “cvx_optbnd :-Inf” .
And got the “cvx_optval” and cvx_status “solved” after running the cvx program

`cvx_optbnd` is undocumented, and appears to take the value, `pstr.bound`, whatever that is.

Perhaps you can show at least all the solver and CVX output, or better yet, also a complete repoducible problem, with all input data.

Thanks for your kindly reply.Here are the main part of the optimal problem and the output of CVX .

``````       ite1=0;
obj1=zeros(1,100);
while 1
cvx_begin
variable W(Nt,d,KI) complex
expression rate(1,KI)
expression R1(1,KI)
expression R2(1,KI)
for i=1:KI
rate(i) = square_pos(norm(sqrtm(A)*W(:,:,i), 'fro')) - real(trace(V(:,:,i)*U(:,:,i)'*H(:,:,i)*W(:,:,i))) - ...
- real(trace(V(:,:,i)*W(:,:,i)'*H(:,:,i)'*U(:,:,i))) ;

%square_pos(norm(sum(W(:,:,i),3),'fro')) <= Pbs;
R1(i) = square_pos(norm(W(:,:,i),'fro')) ;

R2(i) = 2*real( eta*( trace(W_(:,:,i)'*G*W(:,:,i))) ) -...
real( eta*( trace(W_(:,:,i)'*G*W_(:,:,i))))  ;
%square_pos(norm(sqrtm(G)*W_(:,:,i), 'fro'));

end
minimize sum(rate)
subject to
sum(R1) <= Pbs;
sum(R2) >= PE;
cvx_end
W_=W;

%judge convergence
ite1 = ite1 + 1;
obj1(ite1) = sum(rate);
if ite1 > 1 && (abs(obj1(ite1)-obj1(ite1-1))/obj1(ite1-1) < 1e-3 || ite1 >= 200)
break
end
end
``````

`cvx_cputime:5.281250000000000`
`cvx_optbnd:-Inf`
`cvx_optval:7.064653103408999e-09`
`cvx_slvitr:20`
`cvx_slvtol:7.819996132118421e-09`
`cvx_status:'Solved'`

Please show the CVX and solver output.corresponding to the CVX instance (within the while loop) in question,.

However, because `cvx_optbnd` is undocumented, I would assume it’s just for “internal” (developer) use, and would not pay attention to its value.

I have the same problem where cvx_optbnd is Inf , but I don’t understand what it means. Does this indicate that my problem is infeasible or unbounded, even though I have received the cvx_status of ‘Solved’ ?

cvx_begin quiet
cvx_solver sedumi
cvx_precision best
variable Wc(M,M) hermitian;
variable Ws(M,M) hermitian;
% variable wc(M,1);
% variable ws(M,1);
maximize (trace((Mr)(Wc+Ws)))
subject to
Wc == hermitian_semidefinite(M);
Ws == hermitian_semidefinite(M);
trace(Wc + Ws) <= Ptx;
trace((Xi_1)
(Wc - gammaWs)) >= gamma(sigma_UE);
trace((Xi_2)(Wc - gammaWs)) >= gamma*(sigma_UE);
trace((Xi_3)(Wc - gammaWs)) >= gamma*(sigma_UE);
cvx_end

Wc_opt = Wc;
Ws_opt = Ws;

% Eigenvalue Decomposition
[Wc_x,Wc_y] = eig(Wc);
lamda_vec_Wc = diag(Wc_y);
[lamda_max_Wc,ii] = max(lamda_vec_Wc);
eigvec_max_c = Wc_x(:,ii);
wc_opt = sqrt(lamda_max_Wc)*eigvec_max_c;

[Ws_x,Ws_y] = eig(Ws);
lamda_vec_Ws = diag(Ws_y);
[lamda_max_Ws,ii] = max(lamda_vec_Ws);
eigvec_max_s = Ws_x(:,ii);
ws_opt = sqrt(lamda_max_Ws)*eigvec_max_s;

The solver output is as follow:
cxv_cputime: 3.2188
cvx_optbnd: Inf
cvx_optval: 13.1237
cvx_slvitr: 46
cvx_slvtol : 5.8434e-14
cvx_status : ‘Solved’

I recommend that `cvx_optbnd` be ignored. It is undocumented. Just pay attention to the solver and CVX output which is dccumented.

1 Like