I have a function which is exprssed as f = xlog( 1+ y/(x+y) ). I have verified that function f is jointly concave over x and y, but this form is not accepted by CVX. How can I tconvert into a built-in function of CVX?
I have tried to use the -rel_entr( , ) in cvx, but I did not succeed.
Who can provide me any suggestions or hints?
Your help would be highly appreciated.
We have : xlog( 1+ y/(x+y) ) = xlog( 1+ z/(1+z) ) for z=y/x. and
The second term can be handled with the result from the wizard of conic reformulation @Michal_Adamaszek in Writing x*log(1+x/y) , that x*log(1+x/y) = rel_entr(x+y,y) + rel_entr(y,x+y) , which in this case becomes -(rel_entr(x+2*y,x+y) + rel_entr(x+y,x+2*y)))
Hello @Mark_L_Stone , just to be sure, this approach can still be used for a function like xlog(1+ay/(by+x)), where a and b are nonnegative constants. Thus, the CVX expression is -2*rel_entr(x+y,x+(a+b)*y) - rel_entr(x+(a+b)*y,x+y), right?
Yes, its Hessian has one negative eigenvalue, and one eigenvalue equal to zero. So it is jointly concave in x and y, but not jointly strictly concave.
If x and y are both variables, the decomposition I used does not produce a formulation which can be entered in CVX, although it is still mathematically correct. That is because A*log(1+y/(x+A) is neither convex nor concave jointly in x; and y, and therefore can;'t be reformulated for CVX, even though x*log(1+y/(x+A)) is jointly concave in x and y.