<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://patrius.cnes.fr/index.php?action=history&amp;feed=atom&amp;title=User_Manual_4.14_Optimization</id>
	<title>User Manual 4.14 Optimization - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://patrius.cnes.fr/index.php?action=history&amp;feed=atom&amp;title=User_Manual_4.14_Optimization"/>
	<link rel="alternate" type="text/html" href="https://patrius.cnes.fr/index.php?title=User_Manual_4.14_Optimization&amp;action=history"/>
	<updated>2026-04-05T16:57:07Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://patrius.cnes.fr/index.php?title=User_Manual_4.14_Optimization&amp;diff=3762&amp;oldid=prev</id>
		<title>Admin tsn le 5 septembre 2024 à 15:17</title>
		<link rel="alternate" type="text/html" href="https://patrius.cnes.fr/index.php?title=User_Manual_4.14_Optimization&amp;diff=3762&amp;oldid=prev"/>
		<updated>2024-09-05T15:17:45Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://patrius.cnes.fr/index.php?title=User_Manual_4.14_Optimization&amp;amp;diff=3762&amp;amp;oldid=3682&quot;&gt;Voir les modifications&lt;/a&gt;</summary>
		<author><name>Admin tsn</name></author>
	</entry>
	<entry>
		<id>https://patrius.cnes.fr/index.php?title=User_Manual_4.14_Optimization&amp;diff=3682&amp;oldid=prev</id>
		<title>Admin tsn : Page créée avec « __NOTOC__ == Introduction == === Scope === This section describes PATRIUS optimization features.   It will focus on the &#039;&#039;JOptimizer&#039;&#039; functionalities, which provides solv... »</title>
		<link rel="alternate" type="text/html" href="https://patrius.cnes.fr/index.php?title=User_Manual_4.14_Optimization&amp;diff=3682&amp;oldid=prev"/>
		<updated>2024-09-02T07:57:58Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec « __NOTOC__ == Introduction == === Scope === This section describes PATRIUS optimization features.   It will focus on the &amp;#039;&amp;#039;JOptimizer&amp;#039;&amp;#039; functionalities, which provides solv... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;__NOTOC__&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Scope ===&lt;br /&gt;
This section describes PATRIUS optimization features.&lt;br /&gt;
 &lt;br /&gt;
It will focus on the &amp;#039;&amp;#039;JOptimizer&amp;#039;&amp;#039; functionalities, which provides solvers for general convex optimization problems. In particular it provides the Following optimization solvers:&lt;br /&gt;
* LP: Linear programming (linear criterion and constraints)&lt;br /&gt;
* QP: Quadratic Programming (quadratic criterion and linear constraints)&lt;br /&gt;
* QCQP: Qaudratically Constrained Quadratic Programming (quadratic criterion and constraints)&lt;br /&gt;
&lt;br /&gt;
=== Javadoc ===&lt;br /&gt;
The optimization classes are available in the package &amp;lt;code&amp;gt;fr.cnes.sirius.patrius.math.optim&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Library&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Javadoc&lt;br /&gt;
|-&lt;br /&gt;
|Patrius &lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/package-summary.html Package fr.cnes.sirius.patrius.math.optim]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
None as of now.&lt;br /&gt;
&lt;br /&gt;
=== Useful Documents ===&lt;br /&gt;
None as of now.&lt;br /&gt;
&lt;br /&gt;
=== Package Overview ===&lt;br /&gt;
The optimization functionalities for joptimizer are organized in the following packages:&lt;br /&gt;
*&amp;lt;code&amp;gt;fr.cnes.sirius.patrius.math.optim.joptimizer.algebra&amp;lt;/code&amp;gt; compounds the classes with the algebra functionalities.&lt;br /&gt;
*&amp;lt;code&amp;gt;fr.cnes.sirius.patrius.math.optim.joptimizer.functions&amp;lt;/code&amp;gt; compounds the classes with the optimization functions.&lt;br /&gt;
*&amp;lt;code&amp;gt;fr.cnes.sirius.patrius.math.optim.joptimizer.optimizers&amp;lt;/code&amp;gt; compounds the classes with the optimizers.&lt;br /&gt;
*&amp;lt;code&amp;gt;fr.cnes.sirius.patrius.math.optim.joptimizer.solvers&amp;lt;/code&amp;gt; compounds the classes with the solvers.&lt;br /&gt;
*&amp;lt;code&amp;gt;fr.cnes.sirius.patrius.math.optim.joptimizer.util&amp;lt;/code&amp;gt; compounds the utility classes.&lt;br /&gt;
&lt;br /&gt;
== Features Description ==&lt;br /&gt;
Features descritpion for the joptimizer package.&lt;br /&gt;
=== Optimizers ===&lt;br /&gt;
The &amp;lt;code&amp;gt;JOptimizer&amp;lt;/code&amp;gt; class implements the convex optimizer (see &amp;quot;S.Boyd and L.Vandenberghe, Convex Optimization&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The algorithm selection is implemented as a Chain of Responsibility pattern, and this class is the client of the chain.&lt;br /&gt;
&lt;br /&gt;
The different methods implemented to solve the convex optimization problem are:&lt;br /&gt;
* Interior point methods&lt;br /&gt;
**&amp;lt;code&amp;gt;PrimalDualMethod&amp;lt;/code&amp;gt; :  primal-dual interior-point method. &lt;br /&gt;
**&amp;lt;code&amp;gt;LPPrimalDualMethod&amp;lt;/code&amp;gt; : primal-dual interior-point method for linear problems. &lt;br /&gt;
**&amp;lt;code&amp;gt;BarrierMethod&amp;lt;/code&amp;gt;&lt;br /&gt;
*Quality constrained minimization &lt;br /&gt;
**&amp;lt;code&amp;gt;NewtonLEConstrainedFSP&amp;lt;/code&amp;gt; : linear equality constrained newton optimizer, with a feasible starting point.&lt;br /&gt;
**&amp;lt;code&amp;gt;NewtonLEConstrainedISP&amp;lt;/code&amp;gt; : linear equality constrained newton optimizer, with an infeasible starting point.&lt;br /&gt;
*Unconstrained minimization&lt;br /&gt;
**&amp;lt;code&amp;gt;NewtonUnconstrained&amp;lt;/code&amp;gt; : unconstrained newton optimizer.&lt;br /&gt;
 &lt;br /&gt;
==== Optimization problem ====&lt;br /&gt;
The &amp;lt;code&amp;gt;OptimizationRequest&amp;lt;/code&amp;gt; class has all the setting field&amp;#039;s necessaires to define an optimization problem.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;LPOptimizationRequest&amp;lt;/code&amp;gt; is an extension of this class for linear optimization problems. &lt;br /&gt;
&lt;br /&gt;
The general form of a linear problem is (1):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
min(c) s.t.&lt;br /&gt;
A.x = b&lt;br /&gt;
lb &amp;lt;= x &amp;lt;= ub&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;OptimizationResponse&amp;lt;/code&amp;gt; is the class with the getters and setters to set and get the response after the optimization.&lt;br /&gt;
The &amp;lt;code&amp;gt;LPOptimizationResponse&amp;lt;/code&amp;gt; is the extended class applied to linear problems.&lt;br /&gt;
&lt;br /&gt;
==== Standard converter ====&lt;br /&gt;
The &amp;lt;code&amp;gt;LPStandardConverter&amp;lt;/code&amp;gt; converts a general linear problem stated in the form (2):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
min(c) s.t. &lt;br /&gt;
G.x &amp;lt; h &lt;br /&gt;
A.x = b &lt;br /&gt;
lb &amp;lt;= x &amp;lt;= ub&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
to the (strictly)standard form:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
min(c) s.t. &lt;br /&gt;
A.x = b &lt;br /&gt;
x &amp;gt;= 0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
or to the (quasi)standard form (1).&lt;br /&gt;
&lt;br /&gt;
==== Presolver ====&lt;br /&gt;
The &amp;lt;code&amp;gt;LPPresolver&amp;lt;/code&amp;gt; implements a presolver for a linear problem in the form (1).&lt;br /&gt;
&lt;br /&gt;
It applies a set of techniques to the linear programming problem before a linear programming solver solves it. This set of techniques aims at reducing the size of the LP problem by eliminating redundant constraints and variables and identifying possible infeasibility and unboundedness of the problem.&lt;br /&gt;
&lt;br /&gt;
=== Solvers ===&lt;br /&gt;
The &amp;lt;code&amp;gt;AbstractKKTSolver&amp;lt;/code&amp;gt; implements a solver for the KKT system:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
H.v + [A]T.w = -g&lt;br /&gt;
A.v = -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
where H is a square and symmetric matrix.&lt;br /&gt;
&lt;br /&gt;
The following classes are an extension of &amp;lt;code&amp;gt;AbstractKKTSolver&amp;lt;/code&amp;gt;:&lt;br /&gt;
*&amp;lt;code&amp;gt;AugmentedKKTSolver&amp;lt;/code&amp;gt; (for singular H)&lt;br /&gt;
*&amp;lt;code&amp;gt;BasicKKTSolver&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;UpperDiagonalHKKTSolver&amp;lt;/code&amp;gt; (for upper diagonal H)&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
Different functions are implemented, all of them twice differentiable.&lt;br /&gt;
*Linear functions &lt;br /&gt;
The &amp;lt;code&amp;gt;LinearMultivariateRealFunction&amp;lt;/code&amp;gt; represents a function in the form of:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
f(x) = q.x + r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Quadratic functions &lt;br /&gt;
The &amp;lt;code&amp;gt;QuadraticMultivariateRealFunction&amp;lt;/code&amp;gt; represents a function in the form of:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
f(x) := 1/2 x.P.x + q.x + r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
where x, q ∈ R &amp;lt;sup&amp;gt;n&amp;lt;/sup&amp;gt;, P is a symmetric nXn matrix and r ∈ R.&lt;br /&gt;
&lt;br /&gt;
With the extended &amp;lt;code&amp;gt;PSDQuadraticMultivariateRealFunction&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PDQuadraticMultivariateRealFunction&amp;lt;/code&amp;gt; classes for P symmetric and positive semi-definite, and P symmetric and positive definite, respectively.&lt;br /&gt;
&lt;br /&gt;
*Barrier functions&lt;br /&gt;
The &amp;lt;code&amp;gt;LogarithmicBarrier&amp;lt;/code&amp;gt; is the default barrier function for the barrier method algorithm.&lt;br /&gt;
&lt;br /&gt;
If f&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;(x) are the inequalities of the problem, then the function:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Φ(x) = − ∑_i (log(−fi(x)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Algebra ===&lt;br /&gt;
==== Factorization ====&lt;br /&gt;
The &amp;lt;code&amp;gt;CholeskyFactorization&amp;lt;/code&amp;gt; implements the Cholesky L . L[T] factorization and inverse for symmetric and positive matrix:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Q = L.L[T]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
with L lower-triangular.&lt;br /&gt;
&lt;br /&gt;
==== Rescaler ====&lt;br /&gt;
The &amp;lt;code&amp;gt;Matrix1NornRescaler&amp;lt;/code&amp;gt; calculates the matrix rescaling factors, so that the 1-norm of each row and each column of the scaled matrix asymptotically converges to one.&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
=== Example 1 ===&lt;br /&gt;
Example of a linear problem optimized by the primal-dual interior-point method.&lt;br /&gt;
&lt;br /&gt;
The problem is:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
min(-100x + y) s.t.&lt;br /&gt;
x - y = 0&lt;br /&gt;
0 &amp;lt;= x &amp;lt;= 1&lt;br /&gt;
0 &amp;lt;= y &amp;lt;= 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First, the definition of the variables:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
final double[] c = new double[] { -100, 1 }&lt;br /&gt;
final double[][] a = new double[][] { { 1, -1 } }&lt;br /&gt;
final double[] b = new double[] { 0 }&lt;br /&gt;
final double[] lb = new double[] { 0, 0 }&lt;br /&gt;
final double[] ub = new double[] { 1, 1 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definition of the optimization problem by setting the variables:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
final LPOptimizationRequest or = new LPOptimizationRequest()&lt;br /&gt;
or.setC(c)&lt;br /&gt;
or.setA(a)&lt;br /&gt;
or.setB(b)&lt;br /&gt;
or.setLb(lb)&lt;br /&gt;
or.setUb(ub)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additional parameters (tolerance, check the solution accuracy, etc) can also be setted:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
or.setCheckKKTSolutionAccuracy(true)&lt;br /&gt;
or.setToleranceFeas(1.E-7)&lt;br /&gt;
or.setTolerance(1.E-7)&lt;br /&gt;
or.setDumpProblem(true)&lt;br /&gt;
or.setRescalingDisabled(true)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definition of the optimizer and setting the optimization problem:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
LPPrimalDualMethod opt = new LPPrimalDualMethod()&lt;br /&gt;
opt.setLPOptimizationRequest(or)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Optimization and check that it has not failed:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
final int returnCode = opt.optimize()&lt;br /&gt;
if (returnCode == OptimizationResponse.FAILED) {&lt;br /&gt;
    fail()&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recuperate the response and the solution:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
final LPOptimizationResponse response = opt.getLPOptimizationResponse()&lt;br /&gt;
final double[] sol = response.getSolution()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Validation:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
final RealVector cVector = new ArrayRealVector(c)&lt;br /&gt;
final RealVector solVector = new ArrayRealVector(sol)&lt;br /&gt;
final double value = cVector.dotProduct(solVector)&lt;br /&gt;
assertEquals(2, sol.length)&lt;br /&gt;
assertEquals(1, sol[0], or.getTolerance())&lt;br /&gt;
assertEquals(1, sol[1], or.getTolerance())&lt;br /&gt;
assertEquals(-99, value, or.getTolerance())&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
Example of the optimization of a linear objective function with quadratic constraints.&lt;br /&gt;
&lt;br /&gt;
The problem is:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
min(-e.x) s.t.&lt;br /&gt;
1/2 x.P.x &amp;lt; v&lt;br /&gt;
x + y + z = 1&lt;br /&gt;
x &amp;gt; 0&lt;br /&gt;
y &amp;gt; 0&lt;br /&gt;
z &amp;gt; 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definition of the linear objective function:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
final double[] e = { -0.018, -0.025, -0.01 }&lt;br /&gt;
final LinearMultivariateRealFunction objectiveFunction = new LinearMultivariateRealFunction(e, 0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definition of the quadratic and linear constraints:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
final double[][] p = { { 1.68, 0.34, 0.38 }, { 0.34, 3.09, -1.59 }, { 0.38, -1.59, 1.54 } }&lt;br /&gt;
final double v = 0.3&lt;br /&gt;
final PDQuadraticMultivariateRealFunction qc0 = new PDQuadraticMultivariateRealFunction(p, null,-v)&lt;br /&gt;
final LinearMultivariateRealFunction lc0 = new LinearMultivariateRealFunction(new double[] { -1, 0, 0 }, 0)&lt;br /&gt;
final LinearMultivariateRealFunction lc1 = new LinearMultivariateRealFunction(new double[] { 0, -1, 0 }, 0)&lt;br /&gt;
final LinearMultivariateRealFunction lc2 = new LinearMultivariateRealFunction(new double[] { 0, 0, -1 }, 0)&lt;br /&gt;
final ConvexMultivariateRealFunction[] constraints = new ConvexMultivariateRealFunction[] { qc0, lc0, lc1, lc2 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definition of the equality constraint:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
final double[][] a = {{ 1, 1, 1 }}&lt;br /&gt;
final double[] b = { 1 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definition of the optimization problem and setting the parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
final OptimizationRequest or = new OptimizationRequest()&lt;br /&gt;
or.setF0(objectiveFunction)&lt;br /&gt;
or.setFi(constraints)&lt;br /&gt;
or.setA(a)&lt;br /&gt;
or.setB(b)&lt;br /&gt;
or.setToleranceFeas(1.e-6)  // additional parameter&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definition of the optimizer and setting the optimization problem:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
final JOptimizer opt = new JOptimizer()&lt;br /&gt;
opt.setLPOptimizationRequest(or)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Optimization and check that it has not failed:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
final int returnCode = opt.optimize()&lt;br /&gt;
if (returnCode == OptimizationResponse.FAILED) {&lt;br /&gt;
    fail()&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recuperate the response and the solution:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
final LPOptimizationResponse response = opt.getLPOptimizationResponse()&lt;br /&gt;
final double[] sol = response.getSolution()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Validation:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
assertEquals(1., sol[0] + sol[1] + sol[2], 1.e-6)&lt;br /&gt;
assertTrue(sol[0] &amp;gt; 0)&lt;br /&gt;
assertTrue(sol[1] &amp;gt; 0)&lt;br /&gt;
assertTrue(sol[2] &amp;gt; 0)&lt;br /&gt;
final RealVector xVector = MatrixUtils.createRealVector(sol)&lt;br /&gt;
final RealMatrix pMatrix = MatrixUtils.createRealMatrix(p)&lt;br /&gt;
final double xPx = xVector.dotProduct(pMatrix.operate(xVector))&lt;br /&gt;
assertTrue(0.5 * xPx &amp;lt; v)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contents ==&lt;br /&gt;
=== Interfaces ===&lt;br /&gt;
The interfaces related to the joptimizer are listed here : &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Interface&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Summary&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Javadoc&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;BarrierFunction&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Interface for the barrier function used by a given barrier optimization method.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/functions/BarrierFunction.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;ConvexMultivariateRealFunction&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Interface for convex multivariate real functions.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/functions/ConvexMultivariateRealFunction.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;MatrixRescaler&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|An interface to classes that implement an algorithm to rescale matrices.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/algebra/MatrixRescaler.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;StrictlyConvexMultivariateRealFunction&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Interface for striclty convex multivariate real functions.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/functions/StrictlyConvexMultivariateRealFunction.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;TwiceDifferentiableMultivariateRealFunction&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Interface for twice-differentiable multivariate functions.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/functions/TwiceDifferentiableMultivariateRealFunction.html ...]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Classes ===&lt;br /&gt;
The classes related to the joptimizer are listed here : &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Class&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Summary&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Javadoc&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;AlgebraUtils&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Algebraic utility operations&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/algebra/AlgebraUtils.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;CholeskyFactorization&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Implements the Cholesky L.L[T] factorization and inverse for symmetric and positive matrix.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/algebra/CholeskyFactorization.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Matrix1NornRescaler&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Calculates the matrix rescaling factors so that the 1-norm of each row and each column of the scaled matrix asymptotically converges to one.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/algebra/Matrix1NornRescaler.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;FunctionsUtils&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Utility class for optimization function building.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/functions/FunctionsUtils.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;LinearMultivariateRealFunction&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Represents a function f(x) = q.x + r.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/functions/LinearMultivariateRealFunction.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;LogarithmicBarrier&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Default barrier function for the barrier method algorithm.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/functions/LogarithmicBarrier.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;PDQuadraticMultivariateRealFunction&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Extends the class QuadraticMultivariateRealFunction with P symmetric and positive definite.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/functions/PDQuadraticMultivariateRealFunction.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;PSDQuadraticMultivariateRealFunction&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Extends the class QuadraticMultivariateRealFunction with P symmetric and positive semi-definite.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/functions/PSDQuadraticMultivariateRealFunction.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;QuadraticMultivariateRealFunction&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Represents a quadratic multivariate function in the form of f(x):= 1/2 x.P.x + q.x + r.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/functions/QuadraticMultivariateRealFunction.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;AbstractLPOptimizationRequestHandler&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Abstract class for Linear Problem Optimization Request Handler.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/optimizers/AbstractLPOptimizationRequestHandler.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;BarrierMethod&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Implements the Barrier Method.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/optimizers/BarrierMethod.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;BasicPhaseIBM&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Implements the Basic Phase I Method as a Barried Method.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/optimizers/BasicPhaseIBM.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;BasicPhaseILPPDM&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Implements the Basic Phase I Method form LP problems as a Primal-Dual Method.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/optimizers/BasicPhaseILPPDM.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;BasicPhaseIPDM&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Implements the Basic Phase I Method as a Primal-Dual Method.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/optimizers/BasicPhaseIPDM.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;JOptimizer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Implements the convex optimizer.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/optimizers/JOptimizer.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;LPPresolver&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Presolver for a linear problem.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/optimizers/LPPresolver.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;LPPrimalDualMethod&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Implements the Primal-dual interior-point method for linear problems.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/optimizers/LPPrimalDualMethod.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;LPStandardConverter&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Converts a general LP problem into a strictly standard or quasi standard form.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/optimizers/LPStandardConverter.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;NewtonLEConstrainedFSP&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Linear equality constrained newton optimizer, with feasible starting point.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/optimizers/NewtonLEConstrainedFSP.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;NewtonLEConstrainedISP&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Linear equality constrained newton optimizer, with infeasible starting point.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/optimizers/NewtonLEConstrainedISP.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;NewtonUnconstrained&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Unconstrained newton optimizer.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/optimizers/NewtonUnconstrained.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;OptimizationRequest&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Implements an optimization problem.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/optimizers/OptimizationRequest.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;OptimizationRequestHandler&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Generic class for optimization process.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/optimizers/OptimizationRequestHandler.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;OptimizationResponse&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Optimization process output: stores the solution as well as an exit code.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/optimizers/OptimizationResponse.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;PrimalDualMethod&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Implements a primal-dual interior-point method.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/optimizers/PrimalDualMethod.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;AbstractKKTSolver&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Abstract class for solving KKT systems.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/solvers/AbstractKKTSolver.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;AugmentedKKTSolver&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Extension of AbstractKKTSolver for singular matrix.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/solvers/AugmentedKKTSolver.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;BasicKKTSolver&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Extension of AbstractKKTSolver for the basic solver.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/solvers/BasicKKTSolver.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;UpperDiagonalHKKTSolver&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Extends the class AbstractKKTSolver for upper diagonal matrix.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/solvers/UpperDiagonalHKKTSolver.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;ArrayUtils&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Class offering operations on arrays, primitive arrays (like int[]) and primitive wrapper arrays (like Integer[]).&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/util/ArrayUtils.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;MutableInt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|A mutable (int) wrapper.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/util/MutableInt.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Utils&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Utility class.&lt;br /&gt;
|[{{JavaDoc4.13}}/fr/cnes/sirius/patrius/math/optim/joptimizer/util/Utils.html ...]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:User_Manual_4.14_Mathematics]]&lt;/div&gt;</summary>
		<author><name>Admin tsn</name></author>
	</entry>
</feed>