code: @Override
  	public RandomVariable getValue(double evaluationTime, AssetModelMonteCarloSimulationModel model) throws CalculationException {
  		if(exerciseMethod == ExerciseMethod.UPPER_BOUND_METHOD) {
  			// Find optimal lambda
  			GoldenSectionSearch optimizer = new GoldenSectionSearch(-1.0, 1.0);
  			while(!optimizer.isDone()) {
  				double lambda = optimizer.getNextPoint();
  				double value = this.getValues(evaluationTime, model, lambda).getAverage();
  				optimizer.setValue(value);
  			}
  			return getValues(evaluationTime, model, optimizer.getBestPoint());
  		}
  		else {
  			return getValues(evaluationTime, model, 0.0);
  		}
  	}
docs: This method returns the value random variable of the product within the specified model,
  evaluated at a given evalutationTime.
  Cash-flows prior evaluationTime are not considered.
  
  @param evaluationTime The time on which this products value should be observed.
  @param model The model used to price the product.
  @return The random variable representing the value of the product discounted to evaluation time.
  @throws net.finmath.exception.CalculationException Thrown if the valuation fails, specific cause may be available via the <code>cause()</code> method.