void chooseMaxSufferage() {
		/* Find the min makespan in one class, and then find the max one */
		double tmpMinMakespan = Double.MAX_VALUE;
		double tmpSecondMinMakespan = Double.MAX_VALUE;
		double tmpMaxSufferage = -1;

		int iTmpMinClass = -1;
		int iTmpMinSite = -1;
		int iTmpMinCPU = -1;

		iMinClass = -1;
		iMinSite = -1;
		iMinCPU = -1;

		for (int i = 0; i < iClass; i++) {
			/* Find the first small and second small */
			if (iaQueuedTask[i] > 0) {
				for (int j = 0; j < iSite; j++) {
					for (int k = 0; k < iaCPU[j]; k++) {
						if (tmpMinMakespan > dmMinMakespan[i][j][k]
								&& getAvailableStorage(j, dmMinminTime[j][k]) >= daStorageInput[i]
										+ daStorageOutput[i]) {
							iTmpMinClass = i;
							iTmpMinSite = j;
							iTmpMinCPU = k;
							tmpMinMakespan = dmMinMakespan[i][j][k];
						} else if (tmpSecondMinMakespan > dmMinMakespan[i][j][k]) {
							tmpSecondMinMakespan = dmMinMakespan[i][j][k];
						}
					}
				}
				if (tmpMaxSufferage < tmpSecondMinMakespan - tmpMinMakespan) {
					iMinClass = iTmpMinClass;
					iMinSite = iTmpMinSite;
					iMinCPU = iTmpMinCPU;

					tmpMaxSufferage = tmpSecondMinMakespan - tmpMinMakespan;
				}

				tmpMinMakespan = Double.MAX_VALUE;
				tmpSecondMinMakespan = Double.MAX_VALUE;
				iTmpMinClass = -1;
				iTmpMinSite = -1;
				iTmpMinCPU = -1;
			}
		}
		// System.out.println(iMinClass+","+iMinSite + ","+iMinCPU);

		if (iMinCPU < 0 & iMinSite < 0) {
			System.out.println("Fail!");
			return;
		}
		updateStorage(tmpMinMakespan,iMinSite);

	}