net.finmath.montecarlo.interestrate.models.covariance.AbstractLIBORCovarianceModelParametric Maven / Gradle / Ivy
/*
* (c) Copyright Christian P. Fries, Germany. Contact: [email protected].
*
* Created on 20.05.2006
*/
package net.finmath.montecarlo.interestrate.models.covariance;
import java.text.DecimalFormat;
import java.text.Format;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;
import java.util.concurrent.PriorityBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.finmath.exception.CalculationException;
import net.finmath.montecarlo.BrownianMotion;
import net.finmath.montecarlo.BrownianMotionFromMersenneRandomNumbers;
import net.finmath.montecarlo.RandomVariableFromDoubleArray;
import net.finmath.montecarlo.interestrate.CalibrationProduct;
import net.finmath.montecarlo.interestrate.LIBORMarketModel;
import net.finmath.montecarlo.interestrate.LIBORMonteCarloSimulationFromLIBORModel;
import net.finmath.montecarlo.process.EulerSchemeFromProcessModel;
import net.finmath.optimizer.Optimizer;
import net.finmath.optimizer.Optimizer.ObjectiveFunction;
import net.finmath.optimizer.OptimizerFactory;
import net.finmath.optimizer.OptimizerFactoryLevenbergMarquardt;
import net.finmath.optimizer.SolverException;
import net.finmath.optimizer.StochasticOptimizer;
import net.finmath.optimizer.StochasticOptimizerFactory;
import net.finmath.stochastic.RandomVariable;
import net.finmath.stochastic.Scalar;
import net.finmath.time.TimeDiscretization;
/**
* Base class for parametric covariance models, see also {@link AbstractLIBORCovarianceModel}.
*
* Parametric models feature a parameter vector which can be inspected
* and modified for calibration purposes.
*
* The parameter vector may have zero length, which indicated that the model
* is not calibrateable.
*
* This class includes the implementation of a generic calibration algorithm.
* If you provide an arbitrary list of calibration products, the class can return
* a new instance where the parameters are chosen such that the (weighted) root-mean-square
* error of the difference of the value of the calibration products and given target
* values is minimized.
*
* @author Christian Fries
* @date 20.05.2006
* @date 23.02.2014
* @version 1.1
*/
public abstract class AbstractLIBORCovarianceModelParametric extends AbstractLIBORCovarianceModel implements LIBORCovarianceModelCalibrateable {
private static final long serialVersionUID = 7015719361182945464L;
private static final Logger logger = Logger.getLogger("net.finmath");
/**
* Constructor consuming time discretizations, which are handled by the super class.
*
* @param timeDiscretization The vector of simulation time discretization points.
* @param liborPeriodDiscretization The vector of tenor discretization points.
* @param numberOfFactors The number of factors to use (a factor reduction is performed)
*/
public AbstractLIBORCovarianceModelParametric(final TimeDiscretization timeDiscretization, final TimeDiscretization liborPeriodDiscretization, final int numberOfFactors) {
super(timeDiscretization, liborPeriodDiscretization, numberOfFactors);
}
/**
* Get the parameters of determining this parametric
* covariance model. The parameters are usually free parameters
* which may be used in calibration.
*
* @return Parameter vector.
*/
public RandomVariable[] getParameter() {
final double[] parameterAsDouble = this.getParameterAsDouble();
final RandomVariable[] parameter = new RandomVariable[parameterAsDouble.length];
for(int i=0; iString
s):
*
-
*
brownianMotion
: Under this key an object implementing {@link net.finmath.montecarlo.BrownianMotion} may be provided. If so, this Brownian motion is used to build the valuation model.
* maxIterations
: Under this key an object of type Integer may be provided specifying the maximum number of iterations.
* accuracy
: Under this key an object of type Double may be provided specifying the desired accuracy. Note that this is understood in the sense that the solver will stop if the iteration does not improve by more than this number.
*
this
one, but with calibrated parameters.
* @throws CalculationException Thrown if calibration has failed.
*/
@Override
public AbstractLIBORCovarianceModelParametric getCloneCalibrated(final LIBORMarketModel calibrationModel, final CalibrationProduct[] calibrationProducts, Map