/** * Specifies initial state of the search and completion criteria * * @param initial Initial parameter state * @param numberOfParameters Number many parameters are being optimized. * @param minimumFunctionValue The minimum possible value that the function can output */ public void initialize(double initial[] , int numberOfParameters , double minimumFunctionValue ) { super.initialize(initial,numberOfParameters); tmp_p.reshape(numberOfParameters,1); regionRadius = config.regionInitial; fx = cost(x); if( verbose != null ) { verbose.println("Steps fx change |step| f-test g-test tr-ratio region "); verbose.printf("%-4d %9.3E %10.3E %9.3E %9.3E %9.3E %6.2f %6.2E\n", totalSelectSteps, fx, 0.0,0.0,0.0,0.0, 0.0, regionRadius); } this.parameterUpdate.initialize(this,numberOfParameters, minimumFunctionValue); // a perfect initial guess is a pathological case. easiest to handle it here if( fx <= minimumFunctionValue ) { if( verbose != null ) { verbose.println("Converged minimum value"); } mode = TrustRegionBase_F64.Mode.CONVERGED; } else { mode = TrustRegionBase_F64.Mode.COMPUTE_DERIVATIVES; } }
/** * Turns on printing of debug messages. * @param out Stream that is printed to. Set to null to disable * @param level 0=Debug from solver. {@code > 0} is debug from solver and update */ @Override public void setVerbose(@Nullable PrintStream out, int level) { super.setVerbose(out, level); if( level > 0 ) this.parameterUpdate.setVerbose(verbose,level); }
parameterUpdate.computeUpdate(p, Double.MAX_VALUE); regionRadius = parameterUpdate.getStepLength(); parameterUpdate.computeUpdate(p, regionRadius); if( verbose != null ) verbose.println("cauchy initialization radius="+regionRadius); parameterUpdate.computeUpdate(p, regionRadius); parameterUpdate.getPredictedReduction(), parameterUpdate.getStepLength());
parameterUpdate.computeUpdate(p, Double.MAX_VALUE); regionRadius = parameterUpdate.getStepLength(); parameterUpdate.computeUpdate(p, regionRadius); if( verbose != null ) verbose.println("cauchy initialization radius="+regionRadius); parameterUpdate.computeUpdate(p, regionRadius); parameterUpdate.getPredictedReduction(), parameterUpdate.getStepLength());
/** * Specifies initial state of the search and completion criteria * * @param initial Initial parameter state * @param numberOfParameters Number many parameters are being optimized. * @param minimumFunctionValue The minimum possible value that the function can output */ public void initialize(double initial[] , int numberOfParameters , double minimumFunctionValue ) { super.initialize(initial,numberOfParameters); tmp_p.reshape(numberOfParameters,1); regionRadius = config.regionInitial; fx = cost(x); if( verbose != null ) { verbose.println("Steps fx change |step| f-test g-test tr-ratio region "); verbose.printf("%-4d %9.3E %10.3E %9.3E %9.3E %9.3E %6.2f %6.2E\n", totalSelectSteps, fx, 0.0,0.0,0.0,0.0, 0.0, regionRadius); } this.parameterUpdate.initialize(this,numberOfParameters, minimumFunctionValue); // a perfect initial guess is a pathological case. easiest to handle it here if( fx <= minimumFunctionValue ) { if( verbose != null ) { verbose.println("Converged minimum value"); } mode = TrustRegionBase_F64.Mode.CONVERGED; } else { mode = TrustRegionBase_F64.Mode.COMPUTE_DERIVATIVES; } }
/** * Computes all the derived data structures and attempts to update the parameters * @return true if it has converged. */ @Override protected boolean updateDerivates() { functionGradientHessian(x,sameStateAsCost,gradient,hessian); if( config.hessianScaling ) { computeHessianScaling(); applyHessianScaling(); } // Convergence should be tested on scaled variables to remove their arbitrary natural scale // from influencing convergence if( checkConvergenceGTest(gradient)) { if( verbose != null ) { verbose.println("Converged g-test"); } return true; } gradientNorm = NormOps_DDRM.normF(gradient); if(UtilEjml.isUncountable(gradientNorm)) throw new OptimizationException("Uncountable. gradientNorm="+gradientNorm); parameterUpdate.initializeUpdate(); return false; }
/** * Computes all the derived data structures and attempts to update the parameters * @return true if it has converged. */ @Override protected boolean updateDerivates() { functionGradientHessian(x,sameStateAsCost,gradient,hessian); if( config.hessianScaling ) { computeHessianScaling(); applyHessianScaling(); } // Convergence should be tested on scaled variables to remove their arbitrary natural scale // from influencing convergence if( checkConvergenceGTest(gradient)) { if( verbose != null ) { verbose.println("Converged g-test"); } return true; } gradientNorm = NormOps_DDRM.normF(gradient); if(UtilEjml.isUncountable(gradientNorm)) throw new OptimizationException("Uncountable. gradientNorm="+gradientNorm); parameterUpdate.initializeUpdate(); return false; }
/** * Turns on printing of debug messages. * @param out Stream that is printed to. Set to null to disable * @param level 0=Debug from solver. {@code > 0} is debug from solver and update */ @Override public void setVerbose(@Nullable PrintStream out, int level) { super.setVerbose(out, level); if( level > 0 ) this.parameterUpdate.setVerbose(verbose,level); }