How can i represent x^1.15 in cvx

pow_p can’t support
微信截图_20231205164239

object fromula
微信截图_20231205170923

my code is

Presuming z_k is the only variable, and \gamma_k \ge 0, \alpha \ge 0, then I believe the expression is convex for z_k \ge 0, but not for z_k < 0.

Because it is not convex over its entire natural domain, it seems doubtful this can be reformulated as a DCP-compliant expression. I don’t rule out the possibility that one of the more clever conic reformulators among the forum readers can figure out how to do so.

As for the question in the topic title, if x is a CVX variable or an affine expression, x^1.15 can be entered directed as such in CVX, and is a convex expression. But that is not necessarily usable in a larger expression which does not allow a convex sub-expression, as in the expression in your first post.

Edit: The very clever conic reformulator @Michal_Adamaszek did indeed come up with a conic (DCP) reformulation,under my assumptions above, in his answer below.

Thank you for your reply very much!

Am I the first person to use the term "“conic reformulator”. There were no google hits just now. Although I am surprised that Google didn’t find this page.

@Michal_Adamaszek
@hfriberg
@Erling
@Joachim_Dahl

I, at best, qualify for conic reformulator, J.V. (junior varsity)

In the CVX code you showed H looks like a variable and z_k looks like some norm/sum of squares. So it seems very unlikely that will be convex or representable.

Moreover you write your constraint as log(1+gama_k*inv_pos(...))>=0 which is confusing since it is either always satisfied or not depending just on gama_k.

On the other hand if you really just have constant H and z_k is a scalar variable as in @Mark_L_Stone 's answer , then you are essentially asking for a model of t\geq \mathrm{log}(1+\frac{1}{x^\alpha}) and that should be possible the same way as log-sum-inv in 5 Exponential cone optimization — MOSEK Modeling Cookbook 3.3.0

1 Like

Sorry, i am first use cvx tool to slove problem.
And original problem is

and my code is

clc; clear;

Q = 1e5;%throughput
Qk = [0.1,0.1,0.1];


%UAV参数
Wei = 20;%UAV重量
p_air = 1.225;%air density kg/m^3
R_UAV = 0.4;%UAV扇叶半径
A_UAV = 0.503;%UAV扇叶面积
V_BLADE = 300;%叶片角速度
U_tip = 120;%叶片尖端速度
b = 4;%叶片数量
c = 0.0157;%叶片或翼型弦长度
s = 0.05;%Rotor solidity
S_PF = 0.0151;%Fuselage euivalent flat plate area in m^2
d0 = 0.6;%Fuselage drag ratio
k = 0.1;%Incremental correction factor to induced power
v0 = 4.03;%Mean rotor induced velocity in hover
f_p = 0.012;%Profile drag coefficient


%位置信息
v_max = 30;%UAV最大飞行速度
qi = [0;
      0];%UAV initial location
qf = [800;
      800];%UAV final location

%通信相关参数
H = 100;%UAV的高度
B = 1e6;%带宽
gama_0 = 52.5;%信噪比
Pc = 5;%UAV通信功率
P = 20;%发射功率

%GN参数
K_GN = 3;%GN numbers GN1 = [500;500];%GN1的位置GN2 = [390;900];%GN2的位置GN3 = [390;100];%GN3的位置
wk = [390,500,390;
      100,500,900];%GN location

%LOS
C = 10;%环境参数
D = 0.6;
k_los = 0.2;%附加因子
a = 2.3;%路径损失的指数



P0 = (f_p/8)*p_air*s*A_UAV*V_BLADE^3*R_UAV^3;%P0 constant
Pi = ((1+k)*Wei^(3/2))/sqrt(2*p_air*A_UAV);%Pi constant
Ph = P0+Pi;%Ph


%%%%%%%%%%%%%%%%%%%%%%%Algorithm1

qk = [0,390,500,390,800;
      0,100,500,900,800];%initial location

 qk_l = [0,390,500,390,800;
         0,100,500,900,800];%iteration location


pklos=1/(1+C*exp(-D*(90-C)));
gama_k = (pklos+(1-pklos)*k_los)*gama_0; %cal gama_K

v_mr = 18;%Vmr
E0_new = P0*(1/v_mr+3*v_mr/U_tip^2)+Pi*(sqrt(sqrt(v_mr^(-4)+1/(4*v0^2))-1/(2*v0^2)))+1/2*d0*p_air*s*A_UAV*v_mr^2;%E0*


cvx_clear;
for cy=1:3;
    qk_l1=qk_l;%update hovering location

     cvx_begin gp

        variables Dtr(1) yita_k(1,3) qk_l(2,5);

        expression temp(1,3);
            for i=1:K_GN
                temp(:,i) = Qk(:,i)*inv_pos(yita_k(:,i));
            end

        OBJ = E0_new*Dtr+(Ph+Pc)*sum(temp);

        minimize(OBJ);

        subject to

        Dtr_l = 0;
        for i=1:K_GN
            Dtr_l=Dtr_l+norm(qk_l1(:,i+1)-qk_l1(:,i));
        end 
        Dtr_l<=Dtr;
        
        for i=1:K_GN
            yita_k(:,i)>=0;
        end

        for i=1 :K_GN
            temp_bk=(gama_k*(a/2)*(log(exp(1))/log(2)))*inv_pos((pow_pos(H,2)+pow_pos(norm(qk_l1(:,i+1)-wk(:,i)),2))*(pow_pos((pow_pos(H,2)+pow_pos(norm(qk_l1(:,i+1)-wk(:,i)),2)),a/2)+gama_k));

            yita_k(:,i)<=log(1+gama_k*inv_pos(pow_pos(pow_pos(H,2)+pow_pos(norm(qk_l1(:,i+1)-wk(:,i)),2),a/2)))/log(2)-temp_bk*(pow_pos(norm(qk(:,i+1)-wk(:,i)),2)-pow_pos(norm(qk_l1(:,i+1)-wk(:,i)),2));
        end

    cvx_end

end

but cvx answer so strange