Does cvx solve nonlinear convex problems?

As foe feasibility, note that in the code x*log(1+x/y)=rel_entr(x+y,y)+rel_entr(y,x+y) , as provided by Michal_Adamaszek in Writing x*log(1+x/y) , both y and x+y must be nonnegative, or rel_entr will be infinity. Therefore, if your other constraints don’t allow a solution in which both y and x+y are nonnegative, your program will be infeasible.

help rel_entr
rel_entr Scalar relative entropy.
rel_entr(X,Y) returns an array of the same size as X+Y with the
relative entropy function applied to each element:
{ X.*LOG(X./Y) if X > 0 & Y > 0,
rel_entr(X,Y) = { 0 if X == 0 & Y >= 0,
{ +Inf otherwise.
X and Y must either be the same size, or one must be a scalar. If X and
Y are vectors, then SUM(rel_entr(X,Y)) returns their relative entropy.
If they are PDFs (that is, if X>=0, Y>=0, SUM(X)==1, SUM(Y)==1) then
this is equal to their Kullback-Liebler divergence SUM(KL_DIV(X,Y)).
-SUM(rel_entr(X,1)) returns the entropy of X.

Disciplined convex programming information:
    rel_entr(X,Y) is convex in both X and Y, nonmonotonic in X, and
    nonincreasing in Y. Thus when used in CVX expressions, X must be
    real and affine and Y must be concave. The use of rel_entr(X,Y) in
    an objective or constraint will effectively constrain both X and Y 
    to be nonnegative, hence there is no need to add additional
    constraints X >= 0 or Y >= 0 to enforce this.

Overloaded methods:
   cvx/rel_entr

If that hasn’t resolved the matter, the other thing you can try is to use CVX 3.0beta with solvers SCS or ECOS. In this configuration, the solvers’ native exponential cone capability will be employed, thereby avoiding CVX’s successive approximation method. So the solution process may be more reliable. However, CVX 3.0beta is still buggy, so you could encounter difficulties due to that.

Everything on this forum is handled by public posting rather than email. If you show the complete output from CVX/MOSEK, perhaps someone can make a better assessment of how to interpret the outcome.

1 Like