Cvx solution is unbounded

Hello!Dear Everyone!I meet a new problem! By using cvx,I can’t solve a feasible solution.Everytime I run my program,the status is unbounded.the result is +Inf.
I don’t know what’s the Problem ?

clc;
clear;
cvx_setup
%=================================
%SystemSetup
%=================================
%numbers of antennas
N=4;
%numbers of users
K=2;
sigma = 1.0;% set noise 1.
dr=1;%源到中继的距离
d1=1;%用户1的距离
d2=0.2;%用户2的距离(近)

coe_dr=sqrt(dr^(-2));% 系数
coe_d1=sqrt(d1^(-2));
coe_d2=sqrt(d2^(-2));
r_2 = [];
% for Pr_dB=10:5:30
%     Pr=10^(0.1*Pr_dB);
Ps=80;%w不是dB
Pr=100;%w不是dB
%Pr=20;%according to fig to set power of relay.(dB)
% P1=0.8*Ps;    %when 0 interation the value of p1.(dB)
% P1=0.6*Ps;
% P2=Ps-P1;    %when 0 interation the value of p2.(dB)
CH_iter_max=10;%信道的数目
bug_iter=0;%解不出来的迭代次数(个数)
r2_sum=0;%r2速率的总和
%     for CH_iter=1:CH_iter_max  %换信道
n=16;% the dimension of f

% h=coe_dr*(randn(N,1)+1i*randn(N,1));
% g1=coe_d1*(randn(N,1)+1i*randn(N,1));
% g2=coe_d2*(randn(N,1)+1i*randn(N,1));

h=coe_dr*(rand(N,1)+1i*rand(N,1));
g1=coe_d1*(rand(N,1)+1i*rand(N,1));
g2=coe_d2*(rand(N,1)+1i*rand(N,1));

F=randn(N,N);
I1=eye(N);%setup unit matrix N dimension.
I2=eye(N^2);
f=vec(F);
W=f*f';

G_pre=0.1;
a=60;
b=90;
P1=SelectP( a,b,1 );
P2=Ps-P1;

B_1_1=P1*kron((conj(h)*h.'),g1*g1');%(13)k=1,j=1
B_2_1=P1*kron((conj(h)*h.'),g2*g2');%(13)k=1,j=2
B_2_2=P2*kron((conj(h)*h.'),g2*g2');%(13)k=2,j=2
b_1=kron((conj(h)*h.'),g1*g1');%mu_1没有P1,后面需要
b_2=kron((conj(h)*h.'),g2*g2');%mu_2

C_1_1=P2*kron(conj(h)*h.',g1*g1')+kron(sigma*sigma*I1,g1*g1');%(14)k=1,j=1
C_2_1=P2*kron(conj(h)*h.',g2*g2')+kron(sigma*sigma*I1,g2*g2');%(14)k=1,j=2
C_2_2=kron(sigma*sigma*I1,g2*g2');%(14)k=2,j=2
c_1=kron(sigma*sigma*I1,g1*g1');%C_1_1后面的一部分
c_2=kron(sigma*sigma*I1,g2*g2');

D=Ps*kron(conj(h)*h.',I1)+sigma*sigma*I2;%(16)

Q_1_1=C_1_1+sigma*sigma*D/Pr;%(21)k=1,j=1
Q_2_1=C_2_1+sigma*sigma*D/Pr;%(21)k=1,j=2
Q_2_2=C_2_2+sigma*sigma*D/Pr;%(21)k=2,j=2

r1=0.6;
t1=2^(2*r1)-1;%(7)

R1=B_1_1-t1*Q_1_1;
R2=B_2_1-t1*Q_2_1;

%=================================
%Initialize
%=================================


%=================================
%Repeat
%=================================
%==================================
%obtain f(m)  by solving (34)iteratively with {Pk(m-1)}
% %==================================
% G_pre=0.1;
% a=60;
% b=90;
% P1=SelectP( a,b,1 );
 while(1)
    cvx_begin sdp quiet
    variables W(N*N,N*N)  
    maximize  real(P2*trace(b_2*W)/(trace((c_2+D*Pr^(-1)))))
    subject to
     real(P1*trace(b_1*W))-real(P2*trace(b_1*W))*t1-real(trace(c_1+D*Pr^(-1)))*t1>=0;
     real(P1*trace(b_2*W))-real(P2*trace(b_2*W))*t1-real(trace(c_2+D*Pr^(-1)))*t1>=0;
    P2==Ps-P1;
    cvx_end
    cvx_optval
    W
    a
    b
    
    if cvx_optval>G_pre
        a=P1;
        P1=SelectP(a,b,1);
        G_pre=cvx_optval;
    else
        b=P1;
        P1=SelectP(a,b,2);
         G_pre=cvx_optval;
    end
    if abs(b-a)<0.1
        break;
    end
    
end

image

转换一下表达式,比如分子分母同时除以一个变量啥的

请问,问什么需要这么做呢?这样做的原因是?

之前我也遇到这种问题,就是傻瓜式地改了一下表达式。虽然也许你的函数本身就没错,但CVX本身可能就有一些这种毛病,具体为什么我也不知道。你就自己写个简单类似的模型然后一点一点改成你的目标函数。w

Your code is not reproducible, because you have not provided SelectP. Nevertheless, setting P1 = 90 or 1 resulted in a finite optimal solution (the first time through CVX, which is all I ran)., whereas P1 = 60 resulted in unbounded.

Whether your iterative approach makes any sense, I leave to you. Even if it does, the starting value of P1 can be critical, as well as how to update it. But these matters are really outside the scope of this forum.

SORRY,the function SelectP is:
function P1= SelectP( a,b,flag )
if flag==1
P1=a+0.618*(b-a);
else
P1=b-0.618*(b-a);
end

OK,I know the problem of my code,maybe there is something eror in my thinking when I mixed the 1-D search and cvx.
Anyway, thank you so much for answering my questions.

谢谢你!不过之前我的约束条件是因为用除法去写有问题,我才将它变成减法的。不过可能是因为这是我的逻辑有点问题。谢谢你哦!