/* * (c) Copyright Christian P. Fries, Germany. All rights reserved. Contact: email@christian-fries.de. * * Created on 29.02.2008 */ package net.finmath.montecarlo.process; import java.util.Map; import net.finmath.montecarlo.BrownianMotionInterface; import net.finmath.montecarlo.IndependentIncrementsInterface; import net.finmath.montecarlo.model.AbstractModelInterface; /** * The interface for a process (numerical scheme) of a stochastic process <i>X</i> where * <i>X = f(Y)</i> and Y is an Itô process<br> * \[ * dY_{j} = \mu_{j} dt + \lambda_{1,j} dW_{1} + \ldots + \lambda_{m,j} dW_{m} * \] * * The parameters are provided by a model implementing {@link net.finmath.montecarlo.model.AbstractModelInterface}: * <ul> * <li>The value of <i>Y(0)</i> is provided by the method {@link net.finmath.montecarlo.model.AbstractModelInterface#getInitialState}. * <li>The value of μ is provided by the method {@link net.finmath.montecarlo.model.AbstractModelInterface#getDrift}. * <li>The value λ<sub>j</sub> is provided by the method {@link net.finmath.montecarlo.model.AbstractModelInterface#getFactorLoading}. * <li>The function <i>f</i> is provided by the method {@link net.finmath.montecarlo.model.AbstractModelInterface#applyStateSpaceTransform}. * </ul> * Here, μ and λ<sub>j</sub> may depend on <i>X</i>, which allows to implement stochastic drifts (like in a LIBOR market model) * of local volatility models. * * @author Christian Fries * @see net.finmath.montecarlo.model.AbstractModelInterface The definition of the model. */ public interface AbstractProcessInterface extends ProcessInterface { /** * @return Returns the numberOfPaths. */ int getNumberOfPaths(); /** * @return Returns the numberOfFactors. */ int getNumberOfFactors(); /** * @return Returns the stochastic driver used to generate this process */ IndependentIncrementsInterface getStochasticDriver(); /** * @deprecated Please use getStochasticDriver() instead. * @return Returns the Brownian motion used to generate this process */ BrownianMotionInterface getBrownianMotion(); /** * Sets the model to be used. Should be called only once (at construction). * * @param model The model to be used. */ void setModel(AbstractModelInterface model); /** * Returns a clone of this model where the specified properties have been modified. * * Note that there is no guarantee that a model reacts on a specification of a properties in the * parameter map <code>dataModified</code>. If data is provided which is ignored by the model * no exception may be thrown. * * @param dataModified Key-value-map of parameters to modify. * @return A clone of this model (or this model if no parameter was modified). */ AbstractProcessInterface getCloneWithModifiedData(Map<String, Object> dataModified); /** * Create and return a clone of this process. The clone is not tied to any model, but has the same * process specification, that is, if the model is the same, it would generate the same paths. * * @return Clone of the process */ AbstractProcessInterface clone(); }