private void runRED(ATMCell cell){
		boolean cellDropped = false;
		double dropProbability = 0.0;
		
		if (outputBuffer.size() > this.startDropAt) {
			if (outputBuffer.size() < this.maximumBufferCells) {
				dropProbability = (outputBuffer.size() - this.startDropAt) 
						/ (double)(this.maximumBufferCells - this.startDropAt);
			}
			else {
				dropProbability = 1;
			}
		}
		
		if (dropProbability > 0) {
			double r = Math.random() * 1.0 / dropProbability;
			if (r <= 1.0) {
				cellDropped = true;
			}
		}
		
		// Output to the console what happened
		if(cellDropped)
			System.out.println("The cell " + cell.getTraceID() + " was dropped with probability " + dropProbability);
		else {
			outputBuffer.add(cell);
			if(this.trace)
				System.out.println("The cell " + cell.getTraceID() + " was added to the output queue");
		}
	}