public boolean epoch(Player p){
		if (noimprove < noimprove_max){
			noimprove++;
			//Update our average EPOCH statistics
			if (!new_model){
				//Update the "noimprove" and DL_max/DL_min variables
				if (p.MODEL_allmoves-min_allmoves+EPSILON < 0){
					min_allmoves = p.MODEL_allmoves;
					noimprove = 0;
				}
				if (p.MODEL_badmoves-min_badmoves+EPSILON < 0){
					min_badmoves = p.MODEL_badmoves;
					noimprove = 0;
				}
				if (p.MODEL_wins-max_wins-EPSILON > 0){
					max_wins = p.MODEL_wins;
					noimprove = 0;
				}
			}
			//If it is the start of an epoch, just set averages to current
			//In most situations, this should work fine, since accuracy is not at it's peak at the start
			else{
				new_model = false;
				min_allmoves = p.MODEL_allmoves;
				min_badmoves = p.MODEL_badmoves;
				max_wins = p.MODEL_wins;
			}
		}
		return noimprove >= noimprove_max;
	}