Help!DCP error: Invalid quadratic form(s): not a square

I’m trying to solve a max-min fair optimization problem as follows.


And here is my cvx code:

cvx_begin sdp
    variable t;
    variable Q(64,64,serve_ue_num) complex semidefinite;
    expression received_power(1,serve_ue_num);
    expression  denominator;
    maximize t;
    subject to 
        for c=1:serve_ue_num
            for cc=1:serve_ue_num
                received_power(1,cc)=trace(H_cell{i,serve_ue_index_cell{1,1}(c)}*Q(:,:,cc));
            end
            real(received_power(1,c))...
                >=t*(sum(real(received_power(1,[1:c-1 c+1:serve_ue_num])))+NoisePowerReceived_W);
            trace(Q(:,:,c))==400;
        end
cvx_end

I got error message in the first constraint.But I have no idea about how to modify the code in a manner allowed by cvx.

The error message is because you are multiplying t and Q, which is non-convex, hence not allowed by CVX.

If that were permissible, I would have suggested that when you first asked how to formulate this problem in CVX at CVX programming error: Cannot perform the operation: {convex} ./ {convex} - #2 by Mark_L_Stone .

这是一个max-min问题,不是这样建模的,两个变量不能相乘,参考二分法相关内容,设置一个初始变量t,给定一个区间,将CVX放进循环中。

Yeah, but I’m not sure how to formulate the problem in cvx. And I got error message cannot convert the NaN into logical at the claim of variable Q after trying to reformulate the problem into a gp problem as follow. Do you have any suggestions about the error?

是的,我看到一些早期的论文中都是使用二分法求解的,但是也有提到转化为几何规划,省去搜索过程的。我正在尝试转化为几何规划,但是遇到了报错。或者你还有什么别的建议吗?

You’ve now had two people hinting at using the bisection method, as discussed in section 4.2.5 “Quasiconvex optimization” of Convex Optimization – Boyd and Vandenberghe

As for Geometric Programming, you haven’t shown us your reproducible code. Did you follow the rules in Geometric programming mode — CVX Users' Guide ? You can’t mix code which follows the “regular” CVX DCP rules with code which follows gp rules in one CVX invocation. You have to pick one or the other set of rules and diligently follow those rules (use cvx_begin gp if following the gp rules).