Hi, everyone, here I encounter a maximization problem, the function log(1+x/(A+Bx)) I believe is concave. But it is hard to write a expression based on the DCP rules for me. I tried many build-in functions.
Anyone help me out? Thanks a lot.

%%
n = 16; %
% g = eye(n)randn(n,n); %
Hn=1;
A=110^-1; %
B=110^-1; %
Pnoise=abs(rand(n,1)/5); %
SNR=Hn./Pnoise; %
g=diag(SNR);
Ptx = 1; % Power budget
C = ones(1,n);
cvx_begin
variable p(n)
maximize( sum(log((Pnoise’+Bp’+p’)./(Pnoise’+Bp’))))
% maximize( sum(log(Pnoise’+Bp’+p’)+log(1./(Pnoise’+Bp’))))
C p == Ptx
p>=0

I think your objective function is neither concave nor convex. Take for example, f(x) = log((1+x)/(1+1.1*x)) . Its second derivative can be positive or negative depending on the value of x. That holds true for log(1+x/(A+Bx)) as well.

Dear Mark, thanks a lot. But my function is constrained p>0, which means it is concave in this range, the same as your function. So I cannot maximize the function by using CVX in this case? Thanks in advance.

Given that Pnoise >= 0 due to use of abs, then your objective function is concave for p >= 0. However, I don’t see how to enter this is a way which CVX will accept. Dealing with a function which is not convex (or concave as appropriate) over its whole domain, but which is convex (concave) over a restricted region specified by the constraints, can often not be formulated so that CVX can accept it.

I do not rule out that someone else can figure out a way to formulate your problem so that CVX can accept it.

I’m also interested in the problem. I’m working in a group trying to maximise the sum of loglog(1+SINR), where SINR=Sp/Ip+sigma. This is a problem from Boyd & Vandenberghe’s most excellent additional exercises, Q12.11. (https://web.stanford.edu/~boyd/cvxbook/bv_cvxbook_extra_exercises.pdf) Although this is not an answer maybe the problem stated in a different way may give a hint?
We’re finding it impossible to write in DCP in cvxpy. DDCP (only available in cvxpy not MATLAB) seemed promising as one could write log(x/y)=log(x)-log(y) but cvxpy did not seem to like a log nested within a log for the loglog function. The MATLAB program was attractive as one could write a custom loglog function outside the cvx environment and include it in the objective function but I haven’t got further here yet as it doesn’t support DDCP.

Hello Mark, apologies that was a typo, I meant DCCP (https://github.com/cvxgrp/dccp), an extension that only seems available in cvxpy at the moment for ‘difference of convex programming’.

Xiong: You may find this article I found today useful. Liang Zheng has maximised the ‘sum of weighted log (1+SINR)’ already (paper). On Fig 1 (p670), she says the above problem isn’t convex but with some assumptions can be made convex. Her MATLAB code uses cvx with a branch-and-bound algorithm.

Perhaps the method she has used is applicable to Boyd’s similar problem i.e. maximising the sum of log log (1+SINR)?

Hello TimPollington, thank you for your sharing. I’ve been working on similar optimizations recently, my objective function is same with the paper you mentioned, but the link is not working. So would you please tell me the paper name, thank you so much.