import aima.search.framework.HeuristicFunction;

public class Heuristica implements HeuristicFunction {

	public int getHeuristicValue (Object state) {
		Horario h = (Horario) state;
		return Heuristica2(h);
	}

	public int Heuristica1(Horario h) {
		return -h.numTrabajos();
	}

	public int Heuristica2(Horario h) {

		/*
		   n: número de trabajos
		   s: longitud media de los períodos de horas libres
		   hl: número de horas libres
		   
		   f(n,s,h) = 168^2 * n  +  168 * s  +  hl
		*/

		int n = h.numTrabajos();
		double [] result = h.periodosLibres();
		int hl = (int) result [0];
		double s = result [1];
		
		return  - ( 168*168*n + (int)(168*s) + hl );
		
	}

	public int Heuristica3(Horario h){
		/*
		   n: número de trabajos
		   hl: número de horas libres
		   
		   f(n,h) = 168 * n + hl
		*/

		int n = h.numTrabajos();
		double [] result = h.periodosLibres();
		int hl = (int) result [0];
				
		return  - ( 168*n + hl );
			
	}	
	
	public int Heuristica4(Horario h) {

		/*
		   n: número de trabajos
		   s: longitud media de los períodos de horas libres
		   
		   f(n,s) = 168 * n  +  s
		*/

		int n = h.numTrabajos();
		double [] result = h.periodosLibres();
		double s = result [1];
		
		return  - ( 168*n + (int)s );
		
	}

}
