docs: @Override
  	public RandomVariableInterface getValue(double evaluationTime, AssetModelMonteCarloSimulationInterface model) throws CalculationException {
  		// Get underlying and numeraire
  
  		RandomVariableInterface values = model.getRandomVariableForConstant(0.0);
  		for(int underlyingIndex = 0; underlyingIndex<weights.length; underlyingIndex++) {
  			// Get S_{i}(T)
  			RandomVariableInterface underlyingAtMaturity	= model.getAssetValue(maturity, underlyingIndex);
  			values = values.addProduct(underlyingAtMaturity, weights[underlyingIndex]);
  		}
  
  		// Apply optionality
  		values = values.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;
  	}