CVX constraints violation of inequality

I am working on a problem and one of the constraints violates the cvx rules.

sum(r) <= 1/(sum(x) + 1)

r and x are simple variables. when using less than (<=), we are required that the left side is convex and the right is concave. But this simple equation violates it. Any hint on how to convert it? x and r are equal or greater than zero. So the right side can be represented by inv_pos(sum(x)+1) and the left side is just linear combination of r. We can prove f = (1/x) is convex when x is greater than 0.

sum(r) <= inv_pos(sum(x) + 1);


I am working on the same problem and I do not know what to do. I have to variables R and X,both are vectors.A, B and X are n*1 vectors, each element not less than zero.

sum(R) <= A'*X/(B'*X + C)

The right side of the constraint is linear fraction function of X. When X gt 0, it is quasi-linear. In CVX, Does any one has any hint on how to transform it into a form that CVX accepts? In wikipedia, Linear fractional programming can be transformed. But in constraint, I tried the way.

sum(R) <= A'y;
B'y + C*t = 1;

And according to the transformation:

y = 1/(B'x + C) * X; t = 1/(B'x + C);

It is convex. Google “Nonlinear Optimization with Fractional Constraints” and find the pdf file with the same name. See the proof there. Thanks mcg for your patience.

I think I need a new rule on this forum: claiming convexity/concavity is not enough; you must prove it! That alone would help many CVX users answer their own questions, I suspect. In fact, 1/(sum(x)+1) is neither convex nor concave.

x and r are equal or greater than zero. So it can be represented by sum® <= inv_pos(sum(x)+1), I am sorry I did not make it clear at first.

Yes, but I still do not believe the constraint is convex. Can you prove that it is?

Thanks mcg. I think i am NOT right at the very first, non-convex constraint can not be converted to convex constraints. This constraint is a simplified version of my problem. I have reformulated the problem and it has the form of sum(x) <= A - B*inv_pos(sum(x) + 1); and it is convex.A,B>0, const

This new problem is not linear fractional programming. With linear fractional programming, the fraction is in the objective (and it’s the only term in the objective), not a constraint. Your problem is simply not convex. CVX cannot solve it.

Thanks mcg. I do the transformation and CVX solves it. I think the transformation is equivalent. is it a correct method to do this?

Forget CVX for a moment, and consider: either your problem is convex (it is not); or it can be transformed into convex form (perhaps); or it is completely non-convex. If it is the latter, then CVX will never be able to solve it. Before you even try CVX you need to be answering this question.

I honestly can’t help more here. Only you can be certain that the transformations you are applying to your model preserve equivalence. And whether or not the result is convex, or a valid DCP, is a matter of objective fact!