Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
41 changes: 41 additions & 0 deletions hipparchus-optim/nbactions.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<actions>
<action>
<actionName>test</actionName>
<packagings>
<packaging>*</packaging>
</packagings>
<goals>
<goal>test</goal>
</goals>
<properties>
<hipparchus.debug.sqp>false</hipparchus.debug.sqp>
</properties>
</action>
<action>
<actionName>test.single</actionName>
<packagings>
<packaging>*</packaging>
</packagings>
<goals>
<goal>process-test-classes</goal>
<goal>surefire:test</goal>
</goals>
<properties>
<test>${packageClassName}</test>
<hipparchus.debug.sqp>true</hipparchus.debug.sqp>
</properties>
</action>
<action>
<actionName>build</actionName>
<packagings>
<packaging>*</packaging>
</packagings>
<goals>
<goal>install</goal>
</goals>
<properties>
<skipTests>true</skipTests>
</properties>
</action>
</actions>
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
public abstract class BaseMultivariateOptimizer<P>
extends BaseOptimizer<P> {
/** Initial guess. */
private double[] start;
public double[] start;
/** Lower bounds. */
private double[] lowerBound;
/** Upper bounds. */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.hipparchus.linear.EigenDecompositionSymmetric;
import org.hipparchus.optim.LocalizedOptimFormats;
import org.hipparchus.optim.OptimizationData;
import org.hipparchus.optim.SimpleBounds;
import org.hipparchus.optim.nonlinear.scalar.ObjectiveFunction;
import org.hipparchus.util.MathUtils;

Expand All @@ -39,19 +40,22 @@ public abstract class AbstractSQPOptimizer2 extends ConstraintOptimizer {
private MatrixDecompositionTolerance matrixDecompositionTolerance;

/** Objective function. */
private TwiceDifferentiableFunction obj;
private TwiceDifferentiableFunction OBJ;

/** Equality constraint (may be null). */
private EqualityConstraint eqConstraint;
private EqualityConstraint EQ;

/** Inequality constraint (may be null). */
private InequalityConstraint iqConstraint;
private InequalityConstraint IQ;

/** Inequality constraint (may be null). */
private BoundedConstraint boxConstraint;

private BoundedConstraint BOX;

/** Simple Bounds (may be null). */
private SimpleBounds SB;

/** Default QPSolver. */
private QPOptimizer QPSolver = new QPDualActiveSolver();
private QPOptimizer QPSolver = new QPDualActiveSolverR();

/** Simple constructor.
*/
Expand Down Expand Up @@ -79,28 +83,35 @@ public MatrixDecompositionTolerance getMatrixDecompositionTolerance() {
* @return objective function
*/
public TwiceDifferentiableFunction getObj() {
return obj;
return OBJ;
}

/** Getter for equality constraint.
* @return equality constraint
*/
public EqualityConstraint getEqConstraint() {
return eqConstraint;
return EQ;
}

/** Getter for inequality constraint.
* @return inequality constraint
*/
public InequalityConstraint getIqConstraint() {
return iqConstraint;
return IQ;
}

/** Getter for box constraint.
* @return inequality constraint
*/
public BoundedConstraint getBoxConstraint() {
return boxConstraint;
return BOX;
}

/** Getter for simple bounds.
* @return simple bounds
*/
public SimpleBounds getSimpleBounds() {
return SB;
}

/** Getter for QP Solver.
Expand All @@ -120,22 +131,42 @@ public void parseOptimizationData(OptimizationData... optData) {
super.parseOptimizationData(optData);
for (OptimizationData data : optData) {

if (data instanceof SQPProblem) {
SQPProblem problem = (SQPProblem) data;
OBJ = new SQPObj(problem);

EQ= (problem.hasEquality())?new SQPEq((SQPProblem) data):null;
IQ= (problem.hasInequality())?new SQPIneq((SQPProblem) data):null;

double[] lb = ((SQPProblem) data).getBoxConstraintLB();
double[]ub = ((SQPProblem) data).getBoxConstraintUB();
SB = (problem.hasBounds())?new SimpleBounds(lb,ub):null;

start=(problem.hasInitialGuess())?problem.getInitialGuess():null;
continue;
}

if (data instanceof ObjectiveFunction) {
obj = (TwiceDifferentiableFunction) ((ObjectiveFunction) data).getObjectiveFunction();
OBJ = (TwiceDifferentiableFunction) ((ObjectiveFunction) data).getObjectiveFunction();
continue;
}

if (data instanceof EqualityConstraint) {
eqConstraint = (EqualityConstraint) data;
EQ = (EqualityConstraint) data;
continue;
}
if (data instanceof InequalityConstraint) {
iqConstraint = (InequalityConstraint) data;
IQ = (InequalityConstraint) data;
continue;
}

if (data instanceof BoundedConstraint) {
boxConstraint = (BoundedConstraint) data;
BOX = (BoundedConstraint) data;
continue;
}

if (data instanceof SimpleBounds) {
SB = (SimpleBounds) data;
continue;
}

Expand All @@ -154,13 +185,13 @@ public void parseOptimizationData(OptimizationData... optData) {
}

// if we got here, convexObjective exists
int n = obj.dim();
if (eqConstraint != null) {
int nDual = eqConstraint.dimY();
int n = OBJ.dim();
if (EQ != null) {
int nDual = EQ.dimY();
if (nDual > n) {
throw new MathIllegalArgumentException(LocalizedOptimFormats.CONSTRAINTS_RANK, nDual, n);
}
int nTest = eqConstraint.dim();
int nTest = EQ.dim();
if (nDual == 0) {
throw new MathIllegalArgumentException(LocalizedCoreFormats.ZERO_NOT_ALLOWED);
}
Expand Down
Loading