@Override
	public int decidePlay(int turn, int drawn, boolean fromDiscard){		
		//see if this card is useful (or if not cached already)
		if (!fromDiscard || turn != cache_turn){
			//Recalculate ranges, if needed
			if (turn != cache_turn){
				myRanges.clear(); //clear ranges
				calculateRanges(); //recalculate ranges
			}
			cache_turn = turn;
			cache_pos = findRange(fromDiscard, drawn);
		}
		
		//discard and exit if the card is still useless
		if (cache_pos == -1)
			return -1;
		
		//decide which slot the card goes in given the range
		Range target = (Range) myRanges.get(cache_pos);
		
		//decide which slot the card goes in given the range
		int slot = use_reinforcement ? decideSlotReinf(target, drawn) : decideSlotClassic(target, drawn);
		
		//add decision
		if (use_reinforcement && !done_learning)
			myDecisions.add(new Decision(slot, drawn));
		
		//create new ranges
		if (!anchorPoints.contains (new Integer(slot)))
			anchorPoints.add (new Integer(slot));
		Collections.sort(anchorPoints); //sort the collection

		return slot-1;
	}