Matlab 仍然不知道如何在优化问题中添加松弛变量

Matlab 仍然不知道如何在优化问题中添加松弛变量,matlab,cvx,Matlab,Cvx,现在,我尝试向这个优化问题添加一个松弛变量: 这是我关于在这个网站中添加slack变量第6节的参考资料 这是网站的松弛代码。有些事情我不明白 slack1 = sdpvar(N,1); slack2 = sdpvar(N,1); Constraints = [slack1>=0] for i = 1:N Constraints = [Constraints, something1 <= slack1(i)]; Constraints = [Constraints, somethi

现在,我尝试向这个优化问题添加一个松弛变量:

这是我关于在这个网站中添加slack变量第6节的参考资料

这是网站的松弛代码。有些事情我不明白

slack1 = sdpvar(N,1);
slack2 = sdpvar(N,1);
Constraints = [slack1>=0]
for i = 1:N
 Constraints = [Constraints, something1 <= slack1(i)];
 Constraints = [Constraints, something2 == slack2(i)];
end
关于这个例子,我的问题是:

如果我有三个约束,我是否需要生成三个松弛变量

我还需要构建约束=[slack2>=0]吗

在他的示例代码中,something是什么意思?它是一个值、一个向量、一个矩阵还是一个公式

如何定义N?在一个约束中,不仅有一个向量,还有另一个向量,有些向量可能是5乘1,有些可能是4乘1,所以我不知道N的值应该是多少

下面是我的代码,我不认为这是正确的,除非我知道我问的问题的解释,我假设N是4,因为我只有一种向量;4乘1矢量

我的最优问题代码和公式如下


按顺序回答您的问题:

理想情况下,如果您试图解决的问题依赖于您的所有三个约束条件,则可以

否。如果第一个松弛变量的值大于零,并且将是逻辑值布尔值,则在此仅通过比较来初始化变量约束。这假设所有松弛变量将具有相同的数组大小

something变量是您将松弛变量与之进行比较的对象

你可以根据你想要的数字来定义N,但我个人会在第一行代码中定义N

您的约束矩阵将包含0和1,这是基于您将要比较松弛变量的内容。每次for循环处于活动状态时,都会附加约束


阅读MATLAB文档中有关数组比较的更多信息。

我不理解第3和第4部分的解释,我在问题中添加了我的优化代码,您能否举例详细解释第3和第4部分的解释?由于此问题的性质,第3和第4部分是只有您才能回答的问题。同样,somethings是您与slack变量进行比较的结果,N由您的问题陈述确定。这两个都是根据它看起来的样子预先确定的。仍然不明白,你有没有像我这样的最佳公式的例子?没有。这里的问题更倾向于找出为什么代码可能不起作用。通常情况下,代码的结构就是在这一点上编写的。对不起,我不能帮你优化配方。
slack_for_C3 = sdpvar(4,1);
slack_for_C5  = sdpvar(4,1);
slack_for_C10  = sdpvar(4,1);
Constraints = [ slack_for_C3 >=0]
for i = 1:4
 Constraints = [Constraints, something1 <= slack_for_C3(i)];
 Constraints = [Constraints, something2 == slack_for_C5(i)];
 Constraints = [Constraints, something3 == slack_for_C10(i)];
end
 hat_p_up=0.0824
%OP4
%declare
K=4;
N=4;
L=5;%distance between RX & TX
xi=10^-4%tolerence between 
nois_var_hk_2pow=0.1*(L^(-2.5));%W,0.1*(L^(-2.5)),if this unit is dbm
nois_var_ak_2pow=[1.0000e-10 1.0000e-10 1.0000e-10 1.0000e-10 ];
nois_var_dk_2pow=[1.0000e-08 1.0000e-08 1.0000e-08 1.0000e-08 ];
bar_r=[10 10 10 10]
P_T=10

h_1=normrnd( 0,sqrt(0.1*(L^(-2.5))) ,[4,1])+1i*normrnd( 0,sqrt(0.1*(L^(-2.5))) ,[4,1])
h_2=normrnd( 0,sqrt(0.1*(L^(-2.5))) ,[4,1])+1i*normrnd( 0,sqrt(0.1*(L^(-2.5))) ,[4,1])
h_3=normrnd( 0,sqrt(0.1*(L^(-2.5))) ,[4,1])+1i*normrnd( 0,sqrt(0.1*(L^(-2.5))) ,[4,1])
h_4=normrnd( 0,sqrt(0.1*(L^(-2.5))) ,[4,1])+1i*normrnd( 0,sqrt(0.1*(L^(-2.5))) ,[4,1])
h_kk=cat(2,h_1 ,h_2 ,h_3, h_4)
 for n=1:4
    h_k{n}=h_kk(1:4 , n);
    n=n+1;
 end

%==========================
cvx_begin

    variable FNNK_up(N,N,K) semidefinite;%c7
    variable rho_k_up(1,1,K) semidefinite;
%==========================
%combine lots of Fkk
Fkk_up=cat(2,FNNK_up);

    up=0
   for o_up=1:4
       Fk_up{o_up}=Fkk_up(1:4,o_up+3*up:4*o_up)
       up=up+1;
   end
   tr_ace_up=0
   for t=1:K
       tr_ace_up=tr_ace_up+trace(Fk_up{t})  
   end
%====================================    
%object function
    minimize( tr_ace_up )
%==================================== 
%Constraint 
subject to 

%Constraint3
rho_k_up<=1;

%===================================================
%
%Constraint5
       c5_left_hand_up = 0;
        for k = 1:K
            sum_5_up = 0;
            for j = 1:K
                if j ~= k  
                 sum_5_up = sum_5_up +  h_k{k}' * Fk_up{j} * h_k{k};
                end
            end      
            c5_left_hand_up = c5_left_hand_up - sum_5_up+ (h_k{k}' * Fk_up{k} * h_k{k}*inv_pos(bar_r(1)))
            c5_right_hand_up= nois_var_ak_2pow(1)+ ( nois_var_dk_2pow(1)*inv_pos(rho_k_up(k)) )
            %c5_left_hand_up  >=   c5_right_hand_up
            real( c5_left_hand_up ) >=   c5_right_hand_up
        end

%===================================================   
%Constraint10
    c10_left_hand_up = 0;
        %for k = 1:K           
            sum_10_up = 0;
            for j = 1:K                  
                 sum_10_up= sum_10_up +  h_k{k}' * Fk_up{j} * h_k{k}; 
            end
            c10_left_hand_up = c10_left_hand_up + sum_10_up+nois_var_ak_2pow(1)
            c10_right_hand_up=hat_p_up*inv_pos(1-rho_k_up(k))  
            real(c10_left_hand_up)>=  c10_right_hand_up
        %end     
cvx_end