How to assign values to CVX variable

Uncategorized
Jan 25, 2018
S

How can I assign a value that is either zero or one (0,1) to a CVX variable?
for instance:
cvx_begin
variable theta(i,j);
maximize (theta.*obj(i,j));
0 <= theta <= 1;
cvx_end

M

Use the binary keyword in your variable declaration. Then there is no need for 0 <= theta <= 1 .

http://cvxr.com/cvx/doc/basics.html#variables

S
Replying to #2

CVX sees theta as an affine expression, hence when obj is concave, the product of obj and theta disobeys the DCP rule. Actually, theta is meant to be an indicator variable of either 1 or 0.

M
Replying to #3

theta is meant to be an indicator variable of either 1 or 0.

That is what binary does.

As to any errors you are receiving, you are not showing your entire program. I don’t know what obj(i,j) is. Your objective function needs to evaluate to a real scalar, which it doesn’t unless i = j = 1.

S

Thank you very much for your timely response. I have done as advised and have the error message shown below.

i = j = 4;
cvx_begin
cvx_solver Mosek
cvx_precision BEST
variables P(i,j)
variables theta binary
maximize (sum(sum(theta.*RATE)));
sum(theta.*P) <= Pmax
cvx_end

Disciplined convex programming error:
Cannot perform the operation: {real affine} .* {concave}
Error in BETA_TEST01 (line 102)
maximize (sum(sum(theta.*RATE)));

PS: where RATE is cvx concave expression (4x4 matrix)
M
Replying to #5

i = j = 4; is not legal in MATLAB.

What is RATE ? You must not be showing everything, because CVX thinks it is concave, rather than a constant (MATLAB variable).

sum(theta.*P) <= Pmax won’t be valid, either.