docs: @Override
  	public RandomVariableInterface getValue(double evaluationTime, AssetModelMonteCarloSimulationInterface model) throws CalculationException {
  		// Calculate average
  		RandomVariableInterface average = model.getRandomVariableForConstant(0.0);
  		for(double time : timesForAveraging) {
  			RandomVariableInterface underlying	= model.getAssetValue(time, underlyingIndex);
  			average = average.add(underlying);
  		}
  		average = average.div(timesForAveraging.getNumberOfTimes());
  
  		// The payoff: values = max(underlying - strike, 0)
  		RandomVariableInterface values = average.sub(strike).floor(0.0);
  
  		// Discounting...
  		RandomVariableInterface numeraireAtMaturity		= model.getNumeraire(maturity);
  		RandomVariableInterface monteCarloWeights		= model.getMonteCarloWeights(maturity);
  		values = values.div(numeraireAtMaturity).mult(monteCarloWeights);
  
  		// ...to evaluation time.
  		RandomVariableInterface	numeraireAtEvalTime					= model.getNumeraire(evaluationTime);
  		RandomVariableInterface	monteCarloProbabilitiesAtEvalTime	= model.getMonteCarloWeights(evaluationTime);
  		values = values.mult(numeraireAtEvalTime).div(monteCarloProbabilitiesAtEvalTime);
  
  		return values;
  	}