I have a constraint in my problem that uses floor function on the optimization variable, x (which is a vector), to check if x contains integers or not, as I want only integer solutions.
for i=1:n
floor(x(i,1))==x(i,1)
end
CVX is not able to handle it and throws the following error:
Undefined function ‘floor’ for input arguments of type ‘cvx’.
How do I overcome this?
The same error is shown when I use the mod or the rem functions:
for i=1:n
rem(x(i,1),1)==0
end
Undefined function ‘rem’ for input arguments of type ‘cvx’.
for i=1:n
mod(x(i,1),2)==0 | mod(x(i,1),2)==1
end
Undefined function ‘mod’ for input arguments of type ‘cvx’.
Oh. I did not know these are non-convex functions. If only CVX gave the error “non-convex constraint” or something. Anyway, could you please advise me on how to write a convex constraint to make my solution lie in the domain of integers?
The message you received is MATLAB’s error message; CVX is not involved, and actually cannot be. In order for CVX to intervene in situations like this, it would be necessary to write special “error-trapping” code code for every single function in MATLAB’s library, even the functions that it cannot and does not support. That is clearly untenable.
So instead, we have an extensive users guide, including a list of functions that CVX does support, and the FAQ linked to above—which actually explains the meaning of the exact message MATLAB gave you. Please read those before you proceed with CVX any further.