package optimization.linesearch;


public class WolfeConditions {
	
	/**
	 * Sufficient Increase number. Default constant
	 */
	
	
	/**
	 * Value for suficient curvature:
	 * 0.9 - For newton and quase netwon methods
	 * 0.1 - Non linear conhugate gradient
	 */
	
	int debugLevel = 0;
	public void setDebugLevel(int level){
		debugLevel = level;
	}
	
	public  static boolean suficientDecrease(DifferentiableLineSearchObjective o, double c1){	
		double value = o.getOriginalValue()+c1*o.getAlpha()*o.getInitialGradient();
//		System.out.println("Sufficient Decrease original "+value+" new "+  o.getCurrentValue());
		return o.getCurrentValue() <= value;
	}
	
	


	public static boolean sufficientCurvature(DifferentiableLineSearchObjective o, double c1, double c2){
//		if(debugLevel >= 2){
//			double current = Math.abs(o.getCurrentGradient());
//			double orig = -c2*o.getInitialGradient();
//			if(current <= orig){
//				return true;
//			}else{
//				System.out.println("Not satistfying curvature condition curvature " + current + " wants " + orig);
//				return false;
//			}
//		}
		return Math.abs(o.getCurrentGradient()) <= -c2*o.getInitialGradient();
	}
	
}