public abstract class Optimization extends java.lang.Object implements TechnicalInformationHandler, RevisionHandler
class MyOpt extends Optimization { // Provide the objective function protected double objectiveFunction(double[] x) { // How to calculate your objective function... // ... } // Provide the first derivatives protected double[] evaluateGradient(double[] x) { // How to calculate the gradient of the objective function... // ... } // If possible, provide the index^{th} row of the Hessian matrix protected double[] evaluateHessian(double[] x, int index) { // How to calculate the index^th variable's second derivative // ... } }When it's the time to use it, in some routine(s) of other class...
MyOpt opt = new MyOpt(); // Set up initial variable values and bound constraints double[] x = new double[numVariables]; // Lower and upper bounds: 1st row is lower bounds, 2nd is upper double[] constraints = new double[2][numVariables]; ... // Find the minimum, 200 iterations as default x = opt.findArgmin(x, constraints); while(x == null){ // 200 iterations are not enough x = opt.getVarbValues(); // Try another 200 iterations x = opt.findArgmin(x, constraints); } // The minimal function value double minFunction = opt.getMinFunction(); ...It is recommended that Hessian values be provided so that the second-order Lagrangian multiplier estimate can be calcluated. However, if it is not provided, there is no need to override the
evaluateHessian()
function.
REFERENCES (see also the getTechnicalInformation()
method):getTechnicalInformation()
Constructor and Description |
---|
Optimization() |
Modifier and Type | Method and Description |
---|---|
double[] |
findArgmin(double[] initX,
double[][] constraints)
Main algorithm.
|
double |
getMinFunction()
Get the minimal function value
|
TechnicalInformation |
getTechnicalInformation()
Returns an instance of a TechnicalInformation object, containing
detailed information about the technical background of this class,
e.g., paper reference or book this class is based on.
|
double[] |
getVarbValues()
Get the variable values.
|
double[] |
lnsrch(double[] xold,
double[] gradient,
double[] direct,
double stpmax,
boolean[] isFixed,
double[][] nwsBounds,
weka.core.Optimization.DynamicIntArray wsBdsIndx)
Find a new point x in the direction p from a point xold at which the
value of the function has decreased sufficiently, the positive
definiteness of B matrix (approximation of the inverse of the Hessian)
is preserved and no bound constraints are violated.
|
void |
setDebug(boolean db)
Set whether in debug mode
|
void |
setMaxIteration(int it)
Set the maximal number of iterations in searching (Default 200)
|
static double[] |
solveTriangle(Matrix t,
double[] b,
boolean isLower,
boolean[] isZero)
Solve the linear equation of TX=B where T is a triangle matrix
It can be solved using back/forward substitution, with O(N^2)
complexity
|
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getRevision
public TechnicalInformation getTechnicalInformation()
getTechnicalInformation
in interface TechnicalInformationHandler
public double getMinFunction()
public void setMaxIteration(int it)
it
- the maximal number of iterationspublic void setDebug(boolean db)
db
- use debug or notpublic double[] getVarbValues()
public double[] lnsrch(double[] xold, double[] gradient, double[] direct, double stpmax, boolean[] isFixed, double[][] nwsBounds, weka.core.Optimization.DynamicIntArray wsBdsIndx) throws java.lang.Exception
xold
- old x valuegradient
- gradient at that pointdirect
- direction vectorstpmax
- maximum step lengthisFixed
- indicating whether a variable has been fixednwsBounds
- non-working set bounds. Means these variables are free and
subject to the bound constraints in this stepwsBdsIndx
- index of variables that has working-set bounds. Means
these variables are already fixed and no longer subject to
the constraintsjava.lang.Exception
- if an error occurspublic double[] findArgmin(double[] initX, double[][] constraints) throws java.lang.Exception
initX
- initial point of x, assuming no value's on the bound!constraints
- the bound constraints of each variable
constraints[0] is the lower bounds and
constraints[1] is the upper boundsjava.lang.Exception
- if an error occurspublic static double[] solveTriangle(Matrix t, double[] b, boolean isLower, boolean[] isZero)
t
- the matrix Tb
- the vector BisLower
- whether T is a lower or higher triangle matrixisZero
- which row(s) of T are not used when solving the equation.
If it's null or all 'false', then every row is used.