My objective function to be maximized is as follows:

\left(c-\sum_{i=1}^Ma_ix_i\right)\ln\left(1+\left(\sum_{i=1}^M\sqrt{b_ix_i}\right)^2\right)

Here a_i, b_i and c are constants and 0\leq x_i\leq 1\forall i are the optimization variables.

For \left\{\mathbf{x}\in[0,1]^M\middle|\sum_{i=1}^Ma_ix_i< c\right\}, the objective function is the product of the non-increasing positive linear function c-\sum_{i=1}^Ma_ix_i and the non-decreasing, positive concave (can be shown) function \ln\left(1+\left(\sum_{i=1}^M\sqrt{b_ix_i}\right)^2\right) and hence concave (e.g., see Boyd & Vandenberghe, Convex Optimization, Excercise 3.32(b)). Thus the problem is convex on this domain.

Is there a way to write out this problem in CVX using DCP rules? I know DCP rules avoid products, but is there another way?

You are misinterpreting Exercise 3.32(b). That only applies to products of variables of the *same function*. In other words, it works for f(x)g(x), but not f(x)g(y).

I’m sorry, I don’t get you. f(x)g(x) is the product of two *different functions* f and g in the *same variable* x, which is exactly my case.

Anyway, I just want to know if there is a way to make CVX recognize that functions of the form \left(\sum_{i=1}^M x_i^p\right)^{1/p} with p<1 and p\neq 0 are concave on x\succ 0? That should solve my problem.

They need to be *exactly* the same variable—and a scalar variable at that—in order for that exercise to apply. Yours is basically f(h1(x)) * g(h2(x)), where x is a vector. Trust me this is a very common error. If you expect me to believe that function is convex or concave you’ll have to prove it from more basic principles.

Regardless, there is no way CVX will be able to handle this for you, sorry.

On this pseudonorm example, I’m pretty sure people have implemented DCP-compliant versions of that, but I don’t know how to do so myself, I’m sorry!

In my case, h1(x) and h2(x) are just linear transformations of x, so the concavity of f(h1(x)) and g(h2(x)) still hold in x. Thanks for the comments.

And I don’t see why you say that x should be a scalar variable.

I see now. Ex. 3.32(b) talks about functions with domain \mathbf{R}. So maybe it’s not convex. Thanks.