My optimization problem has this kind of convex constraint:
x + y + 1/log2(1+z) <= D, where D is a fixed value, the variables to be optimized are x, y and z.
Obviously, this constraint is a convex one. But how can I deal with the 1/log2(1+x) part in CVX tool box in MATLAB? It looks a bit hard.
Further, if the constraint is x + y +\sum{1/log2(1+z_i)} <= t, where z contains i number of values, and the x, y, z_i, t are all variables which to be optimized, how can I deal with it?
However, x + y + inv_pos(log(1+z)/log(2)) <= D will be accepted by CVX. This formulation essentially constrains z >= 0, where it is convex.
The formulation: x + y + sum(inv_pos(log(1+z)/log(2))) <= D
will work, whether z is a scalar or a vector, constraining each element of z to be >= 0, and will accomplish your intent.
help inv_pos
inv_pos Reciprocal of a positive quantity.
inv_pos(X) returns 1./X if X is positive, and +Inf otherwise.
X must be real.
For matrices and N-D arrays, the function is applied to each element.
Disciplined convex programming information:
inv_pos is convex and nonincreasing; therefore, when used in CVX
specifications, its argument must be concave (or affine).