public static int calculeHyperperiode(List<Tache> taches) {
		int nb = 0;
		
		List<Integer> Pi = new ArrayList<Integer>();
		for(Tache tache : taches) {
			if (tache instanceof TachePeriodique) {
				Pi.add(((TachePeriodique) tache).getPi());
				nb++;
			}
		}
		Integer[] periodes = new Integer[nb];
		Pi.toArray(periodes);
		
		int hyperperiode = Utils.ppcm(periodes);
		if (Simulation.getInstance().getTypeSimulation().equals(OrdonnanceurRM.mode)) {
			int chargeP = 0;
			int chargeA = 0;
			for (Tache tache : taches) {
				if (tache instanceof TachePeriodique) {
					int coeff = hyperperiode / ((TachePeriodique)tache).getPi();
					chargeP += coeff * tache.getCi();
				}
				else
				{
					chargeA += tache.getCi();
				}
			}
			int chargesLibres = hyperperiode - chargeP;
			return (chargeA > 0) 
					? (hyperperiode * new Double(Math.ceil(new Double(chargeA)/new Double(chargesLibres))).intValue())
					: hyperperiode;
		}
		else
		{
			return hyperperiode;
		}
	}