private double simulateHand(ArrayList<Card> holeCards, int iterations, int players) throws Exception {
		double wins = 0;
		for (int i = 0; i < iterations; i++) {
			Deck deck = new Deck();
			deck.removeCards(holeCards);
			ArrayList<Card> sharedCards = deck.drawCards(5);
			ArrayList<Card> sharedAndHoleCards = new ArrayList<Card>();
			sharedAndHoleCards.addAll(holeCards);
			sharedAndHoleCards.addAll(sharedCards);
			
			CardPower power = new PowerRanking().calcCardPower(sharedAndHoleCards);
			
			int winners = 1;
			for (int j = 0; j < players-1; j++) {
				ArrayList<Card> opponentHoleCards = deck.drawCards(2);
				ArrayList<Card> opponentSharedAndHoleCards = new ArrayList<Card>();
				opponentSharedAndHoleCards.addAll(opponentHoleCards);
				opponentSharedAndHoleCards.addAll(sharedCards);
				CardPower opponentPower = new PowerRanking().calcCardPower(opponentSharedAndHoleCards);
				if (opponentPower.compareTo(power) == 0) { // tie
					winners++; 
				} else if(opponentPower.compareTo(power) > 0) { // loss
					winners = -1; 
					break;
				}
			}
			if (winners > 0) {
				wins += 1.0 / winners;
			}
		}
		return wins / iterations;
	}