# Log(1+x/(A+Bx))for channel capacity maximization

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=1
10^-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’+B
p’+p’)./(Pnoise’+Bp’))))
% maximize( sum(log(Pnoise’+B
p’+p’)+log(1./(Pnoise’+Bp’))))
C
p == Ptx
p>=0

cvx_end

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.

Thanks. It seems a hard problem now although the log function is commonly used.

Dear Xiong,

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.

What is DDCP (presuming that’s not a typo)? I didn’t see that acronym associated with cvxpy. If there is a DDCP, how does it differ from DCP?

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)?

The link for the paper is broken. Would you please tell me the paper title? It could be helpful in my work. Thanks

See https://github.com/cvxgrp/dccp and the link https://stanford.edu/~boyd/papers/dccp.html provided there. . The links in that latter link have the actual paper and all work.

• Hello, have you solved this problem yet?

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.

Thank you. But it seems they’re different. The link Tim mentioned is about a paper and code.

The link I provided has the paper and the CVXPY DCCP code, which is at https://github.com/cvxgrp/dccp , which was in the link supplied even earlier by @TimPollington

Oh, thank you Mark. Hi,
Gurobi can solve the problem which is MAX log2(1 + 1 / x ) directly. I have tried it successfully.
Yan bo

1 Like

Hi,
can it solve the problem like ‘MAX log2(1+x)’ ?

`maximize(log(1+x)/log(2))`