/* * (c) Copyright Christian P. Fries, Germany. All rights reserved. Contact: email@christian-fries.de. * * Created on 24.01.2004 */ package net.finmath.montecarlo.assetderivativevaluation; import java.util.Map; import net.finmath.exception.CalculationException; import net.finmath.montecarlo.MonteCarloSimulationInterface; import net.finmath.stochastic.RandomVariableInterface; /** * Basic interface which has to be implemented by Monte Carlo models for asset processes. * * This interface serves as an abstraction layer between models and simulations (providing * the implementation of this interface) and products (using an object implementing this interface * in its valuation code, without further knowledge of the specific model and simulation technique. * * @author Christian Fries * @version 1.0 */ public interface AssetModelMonteCarloSimulationInterface extends MonteCarloSimulationInterface { /** * Returns the number of asset price processes. * * @return The number of asset price processes */ int getNumberOfAssets(); /** * Returns the random variable representing the asset's value at a given time for a given asset. * * @param timeIndex Index of simulation time * @param assetIndex Index of the asset (0 for a single asset model) * @return The asset process as seen on simulation time * @throws net.finmath.exception.CalculationException Thrown if the valuation fails, specific cause may be available via the <code>cause()</code> method. */ RandomVariableInterface getAssetValue(int timeIndex, int assetIndex) throws CalculationException; /** * Returns the random variable representing the asset's value at a given time for a given asset. * * @param time Simulation time * @param assetIndex Index of the asset (0 for a single asset model) * @return The asset process as seen on simulation time * @throws net.finmath.exception.CalculationException Thrown if the valuation fails, specific cause may be available via the <code>cause()</code> method. */ RandomVariableInterface getAssetValue(double time, int assetIndex) throws CalculationException; /** * Returns the numeraire associated with the valuation measure used by this model. * * @param timeIndex The time index (associated with this models time discretization). * @return The numeraire associated with the valuation measure used by this model. * @throws CalculationException Thrown if calculation of numeraire fails. */ RandomVariableInterface getNumeraire(int timeIndex) throws CalculationException; /** * Returns the numeraire associated with the valuation measure used by this model. * * @param time The time for which the numeraire is requested. * @return The numeraire associated with the valuation measure used by this model. * @throws CalculationException Thrown if calculation of numeraire fails. */ RandomVariableInterface getNumeraire(double time) throws CalculationException; /** * Create a clone of this simulation modifying some of its properties (if any). * * @param dataModified The data which should be changed in the new model * @return Returns a clone of this model, with some data modified (then it is no longer a clone :-) * @throws net.finmath.exception.CalculationException Thrown if the valuation fails, specific cause may be available via the <code>cause()</code> method. */ AssetModelMonteCarloSimulationInterface getCloneWithModifiedData(Map<String, Object> dataModified) throws CalculationException; /** * Create a clone of the object implementing <code>AssetModelMonteCarloSimulationInterface</code> * using a different Monte-Carlo seed. * * @param seed The seed of the underlying random number generator. * @return Returns a clone of this model except for a modified Monte-Carlo seed. * @throws CalculationException Thrown if cloning failed. */ AssetModelMonteCarloSimulationInterface getCloneWithModifiedSeed(int seed) throws CalculationException; }