JOptimizer is an open source library implemented in pure java programming language that addresses the solution of a minimization problem with equality and inequality constraints,

  minimizex f0(x)  s.t.
    fi(x) ≤ 0,  i=1,...,m
    Ax = b,  

where f0,...,fm: RnR are convex and twice continuously differentiable multivariate real functions, and A ∈ RpXn with rankA = 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:

  minimizex cTx  s.t.
    Gx ≤ h
    Ax = b,  

where G ∈ RmXn (or ZmXn) ,A ∈ RpXn (or ZpXn) and x in {0,1}n
This is given the name of Binary Integer Programming (BIP).

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).