private boolean isUtilityConverged(Map<ClassInfo, BigDecimal> previousUtilities) {
		boolean converged = true;
		Map<ClassInfo, BigDecimal> currentUtilities = getUtilities();
		
		if (currentUtilities.isEmpty())
			return true;
		
		// no previous utilities, so update with current ones and return not converged
		if (previousUtilities.isEmpty()) {
			previousUtilities.putAll(currentUtilities);
			return false;
		}
		
		// Use current utilities to compare with previousUtilities
		for (ClassInfo classInfo : currentUtilities.keySet()) {
			BigDecimal currentUtility = currentUtilities.get(classInfo);
			BigDecimal previousUtility = previousUtilities.get(classInfo);
			BigDecimal utilityGap = currentUtility.subtract(previousUtility).abs();
			if (utilityGap.compareTo(MIN_UTILITY_GAP) <= 0) {
				converged = converged && true;
			}
			else {
				converged = false;
			}
		}
		previousUtilities.clear();
		previousUtilities.putAll(currentUtilities);
		return converged;
	}