summaryrefslogtreecommitdiff
path: root/gi/posterior-regularisation/prjava/src/optimization/linesearch/WolfeConditions.java
blob: dcc704eb940d8e56f21c90ef58b4a026cddddf50 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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();
	}
	
}