|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectweka.core.Optimization
public abstract class Optimization
Implementation of Active-sets method with BFGS update to solve optimization problem with only bounds constraints in multi-dimensions. In this implementation we consider both the lower and higher bound constraints.
Here is the sketch of our searching strategy, and the detailed description of the algorithm can be found in the Appendix of Xin Xu's MSc thesis: Initialize everything, incl. initial value, direction, etc. LOOP (main algorithm):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 Summary | |
---|---|
Optimization()
|
Method Summary | |
---|---|
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 |
Methods inherited from class java.lang.Object |
---|
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Methods inherited from interface weka.core.RevisionHandler |
---|
getRevision |
Constructor Detail |
---|
public Optimization()
Method Detail |
---|
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 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 constraints
Exception
- if an error occurspublic double[] findArgmin(double[] initX, double[][] constraints) throws 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 bounds
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.
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |