def optimize(self, constraints, X, operation, M=<NUM_LIT>):
raise Exception("<STR_LIT>")<EOL>
Iteratively finds the maximum or minimal value for the operation
(Normally Operators.UGT or Operators.ULT)

:param constraints: the constraints set
:param X: a symbol or expression
:param M: maximum number of iterations allowed