public boolean calculateFinalResult() {
		double tempCost = 0;
		do {
			iStage++;
			calculateAllocation();
			tempCost = 0;
			for (int i = 0; i < iClass; i++) {
				for (int j = 0; j < iSite; j++) {
					tempCost += dmDist[i][j] * dmPrediction[i][j]
							* daPrice[j];
				}
			}
			vCost.add(tempCost);

			if (calculateDistribution()) {
				/* deadline can not be satisfied */
				if (!bDeadline) {
					System.out.println("THE DEADLINE CAN NOT BE SATISFIED!");
					return false;
				} else {
					System.out.println("\nNEW ROUND WITHOUT CHECKING:");
					dEval = 1;
				}

			} else {
				calculateExecTime();
			}

			// System.out.println("Evaluation Value =========="+dEval);
		} while (dEval > 0);
		// while (evaluateResults());

		println("==================Allocation=====================");
		for (int i = 0; i < iClass; i++) {
			print("FinalAllocation[" + i + "] ");
			for (int j = 0; j < iSite; j++) {
				dmAlloc[i][j] = Math.round(dmAlloc[i][j]);
				print(dmAlloc[i][j] + ",");
			}
			println();
		}
		calculateFinalDistribution();
		println("==================Distribution=====================");
		for (int i = 0; i < iClass; i++) {
			print("FinalDistribution[" + i + "] ");
			for (int j = 0; j < iSite; j++) {
				dmDist[i][j] = Math.round(dmDist[i][j]);
				print(dmDist[i][j] + ",");
			}
			println();
		}
		println("==================Cost&Time=====================");
		calculateExecTime();
		println("Stage = " + iStage);
		return true;
	}