minimize_{x} f_{0}(x) s.t.

f_{i}(x) ≤ 0, i=1,...,m

Ax = b,

where f_{0},...,f_{m}: **R**^{n}→**R** are convex
and twice continuously differentiable multivariate real functions, and A ∈
**R**^{pXn} with **rank**A = p < n.

This is given the name of *convex optimization* and, for example, LP, QP, QCQP, SOCP, SDP are special cases of it.

JOptimizer is thread-safe and can be used in a standalone application as well as in a J2EE environment:
in fact, one of its first goals is to fill the lack of a pure-java optimizer because many of the market libraries
run in an external process and that's not always a choice (especially in the case it has to be deployed in a J2EE server environment).

Internal linear algebra is based on the open source libraries commons-math and
Colt,
while theoretical foundation is based on the work of
S.Boyd and L.Vandenberghe,
"Convex Optimization".

You can also use JOptimizer for solving not-convex problems in the form of:

minimize_{x} c^{T}x s.t.

Gx ≤ h

Ax = b,

where G ∈
**R**^{mXn} (or **Z**^{mXn})
,A ∈
**R**^{pXn} (or **Z**^{pXn})
and x in {0,1}^{n}

This is given the name of *Binary Integer Programming (BIP)*.

- NOTE
- Use of commons-math and Colt is only restricted at the internal level of JOptimizer and you as a user don't have to learn these APIs in order to adopt it. Client code can be written in whatever (if any) linear algebra API, in the "test" source folder you can find code examples with commons-math and Colt (along with only standard JSE API examples).