package edu.hawaii.jmotif.sampler; /** * User: drchaj1 * Date: Aug 21, 2008 * Time: 12:36:11 PM */ /** * This abstract class is a predecessor for user objective functions. */ public abstract class ObjectiveFunctionFast { /** * The number of function value evaluations. */ protected long fEvals = 0L; /** * The number of gradient evaluations. */ protected long gradEvals = 0L; /** * The number of hessian evaluations. */ protected long hessEvals = 0L; /** * Zeroes evaluation counters. */ public void init() { fEvals = 0L; gradEvals = 0L; hessEvals = 0L; } /** * Objective function dimension. * * @return objective function dimension */ abstract public int getDim(); /** * Function value at point ax. * * @param ax point where a function value is evaluated * @return function value at point ax */ public double f(final double[] ax) { fEvals++; return Double.NaN; } /** * Gradient vector at point ax. * * @param ax point where a gradient is evaluated * @param agrad gradient vector at point ax. */ public void grad(final double[] ax, double[] agrad) { gradEvals++; } /** * Hessian matrix at point ax. * * @param ax point where a hessian is evaluated * @param ahess hessian matrix at point ax. */ public void hess(final double[] ax, double[][] ahess) { hessEvals++; } /** * Function value and gradient at point ax. * * @param ax point where a function value and gradient are evaluated * @param agrad agrad gradient vector at point ax * @return function value at point ax */ public double f(final double[] ax, double[] agrad) { grad(ax, agrad); return f(ax); } /** * Function value, gradient and hessian at point ax. * * @param ax point where a function value and gradient are evaluated * @param agrad gradient vector at point ax * @param ahess hessian matrix at point ax. * @return function value at point ax */ public double f(final double[] ax, double[] agrad, double[][] ahess) { grad(ax, agrad); hess(ax, ahess); return f(ax); } /** * Checks if analytic gradient is supported. * * @return true for implemented analytic gradient, otherwise false */ public abstract boolean hasAnalyticGradient(); /** * Checks if analytic hessian is supported. * * @return true for implemented analytic hessian, otherwise false */ public abstract boolean hasAnalyticHessian(); // getters and setters /** * Get the number of function value evaluations. * * @return number of function value evaluations */ public long getFEvals() { return fEvals; } /** * Get the number of gradient evals. * * @return number of gradient evals */ public long getGradEvals() { return gradEvals; } /** * Get the number of hessian evals. * * @return the number of hessian evals */ public long getHessEvals() { return hessEvals; } }