# cplex

### From OpenOpt

**Cplex**

Cplex is one of most powerful Cplex was written by CPLEX Optimization Inc., which was acquired by ILOG in 1997; ILOG was subsequently acquired by IBM in January 2009. After the latter acquisition some key developers - Robert Bixby, Zonghao Gu, and Ed Rothberg - had founded GuRoBi, that is one of most essential CPLEX competitors (along with mosek, Xpress, maybe xa), but Cplex still continues its development and its performance is about the same to GuRoBi (and very often outperforms the latter). See Hans Mittelmann Benchmarks for more details. Also, SoPlex worth to be mentioned (license: free for academic) - it runs slower, but is capable of solving so difficult LP that other solvers can't. Problem types that Cplex can handle: LP, MILP, (MI)QP, (MI)QCQP, (MI)SOCP (and some more). Since v.12 Cplex has Python API (primarily based on Python lists), but IMHO it is much less convenient than using NumPy arrays, SciPy sparse matrices and, of course, OpenOpt / FuncDesigner models. Currently the following Cplex wrappers for OpenOpt are done: LP, MILP, QP, QCQP, MIQP and MIQCQP. For problems with large number of variables and/or constraints the wrapper can involve scipy.sparse matrices (user-supplied or taken from FuncDesigner automatic differentiation). FuturePlans: (MI)SOCP. Nearest Cplex competitor for LP with OSI-approved license is CLP (maybe it will be connected to OpenOpt as well), also made by IBM. (since v. 0.33) To use Cplex from OpenOpt you should install Cplex and its Python API (go to /cplex/python/{your_arch} folded and run "python setup.py install" with admin rights).
def preprocessor(CplexProb, OOProb): - print('Cplex version: %s' % CplexProb.get_version())
- CplexProb.write('asdf.mps')
Also, after solving FuncDesigner or OpenOpt problem by the solver (r=p.solve('cplex'),...) you can access Cplex prob instance as r.extras['CplexProb'] |

Unfortunately, Cplex owners refused us in obtaining trial large-scale license (>500 vars/cons) for test purposes, thus using sparse matrices remains untested properly yet, but it should work (at least, users inform us it works perfectly).