/** * Constructeur de l'objet Player */ Player::Player() { setForwards(false); setBackwards(false); setStrafeLeft(false); setStrafeRight(false); lastPositionUpdate = -1; setSpeed(0.2f); }
LogNormalFwdRateIpc::LogNormalFwdRateIpc( const boost::shared_ptr<MarketModel>& marketModel, const BrownianGeneratorFactory& factory, const std::vector<Size>& numeraires, Size initialStep) : marketModel_(marketModel), numeraires_(numeraires), initialStep_(initialStep), numberOfRates_(marketModel->numberOfRates()), numberOfFactors_(marketModel->numberOfFactors()), curveState_(marketModel->evolution().rateTimes()), forwards_(marketModel->initialRates()), displacements_(marketModel->displacements()), logForwards_(numberOfRates_), initialLogForwards_(numberOfRates_), drifts1_(numberOfRates_), initialDrifts_(numberOfRates_), g_(numberOfRates_), brownians_(numberOfFactors_), correlatedBrownians_(numberOfRates_), rateTaus_(marketModel->evolution().rateTaus()), alive_(marketModel->evolution().firstAliveRate()) { checkCompatibility(marketModel->evolution(), numeraires); QL_REQUIRE(isInTerminalMeasure(marketModel->evolution(), numeraires), "terminal measure required for ipc "); Size steps = marketModel->evolution().numberOfSteps(); generator_ = factory.create(numberOfFactors_, steps-initialStep_); currentStep_ = initialStep_; calculators_.reserve(steps); fixedDrifts_.reserve(steps); for (Size j=0; j<steps; ++j) { const Matrix& A = marketModel->pseudoRoot(j); calculators_.push_back(LMMDriftCalculator(A, displacements_, marketModel->evolution().rateTaus(), numeraires[j], alive_[j])); const Matrix& C = marketModel->covariance(j); std::vector<Real> fixed(numberOfRates_); for (Size k=0; k<numberOfRates_; ++k) { Real variance = C[k][k]; fixed[k] = -0.5*variance; } fixedDrifts_.push_back(fixed); } setForwards(marketModel_->initialRates()); }
NormalFwdRatePc::NormalFwdRatePc( const ext::shared_ptr<MarketModel>& marketModel, const BrownianGeneratorFactory& factory, const std::vector<Size>& numeraires, Size initialStep) : marketModel_(marketModel), numeraires_(numeraires), initialStep_(initialStep), numberOfRates_(marketModel->numberOfRates()), numberOfFactors_(marketModel_->numberOfFactors()), curveState_(marketModel->evolution().rateTimes()), forwards_(marketModel->initialRates()), initialForwards_(marketModel->initialRates()), drifts1_(numberOfRates_), drifts2_(numberOfRates_), initialDrifts_(numberOfRates_), brownians_(numberOfFactors_), correlatedBrownians_(numberOfRates_), alive_(marketModel->evolution().firstAliveRate()) { checkCompatibility(marketModel->evolution(), numeraires); Size steps = marketModel->evolution().numberOfSteps(); generator_ = factory.create(numberOfFactors_, steps-initialStep_); currentStep_ = initialStep_; calculators_.reserve(steps); for (Size j=0; j<steps; ++j) { const Matrix& A = marketModel_->pseudoRoot(j); calculators_.push_back( LMMNormalDriftCalculator(A, marketModel->evolution().rateTaus(), numeraires[j], alive_[j])); /* for (Size k=0; k<numberOfRates_; ++k) { Real variance = std::inner_product(A.row_begin(k), A.row_end(k), A.row_begin(k), 0.0); } */ } setForwards(marketModel_->initialRates()); }
void LogNormalFwdRateIpc::setInitialState(const CurveState& cs) { setForwards(cs.forwardRates()); }
SVDDFwdRatePc::SVDDFwdRatePc(const ext::shared_ptr<MarketModel>& marketModel, const BrownianGeneratorFactory& factory, const ext::shared_ptr<MarketModelVolProcess>& volProcess, Size firstVolatilityFactor, Size volatilityFactorStep, const std::vector<Size>& numeraires, Size initialStep ) : marketModel_(marketModel), volProcess_(volProcess), firstVolatilityFactor_(firstVolatilityFactor), volFactorsPerStep_(volProcess->variatesPerStep()), numeraires_(numeraires), initialStep_(initialStep), isVolVariate_(false,volProcess->variatesPerStep()+marketModel_->numberOfFactors()), numberOfRates_(marketModel->numberOfRates()), numberOfFactors_(marketModel_->numberOfFactors()), curveState_(marketModel->evolution().rateTimes()), forwards_(marketModel->initialRates()), displacements_(marketModel->displacements()), logForwards_(numberOfRates_), initialLogForwards_(numberOfRates_), drifts1_(numberOfRates_), drifts2_(numberOfRates_), initialDrifts_(numberOfRates_), allBrownians_(volProcess->variatesPerStep()+marketModel_->numberOfFactors()), brownians_(numberOfFactors_), volBrownians_(volProcess->variatesPerStep()), correlatedBrownians_(numberOfRates_), alive_(marketModel->evolution().firstAliveRate()) { QL_REQUIRE(initialStep ==0, "initial step zero only supported currently. "); checkCompatibility(marketModel->evolution(), numeraires); Size steps = marketModel->evolution().numberOfSteps(); generator_ = factory.create(numberOfFactors_+volFactorsPerStep_, steps-initialStep_); currentStep_ = initialStep_; calculators_.reserve(steps); fixedDrifts_.reserve(steps); for (Size j=0; j<steps; ++j) { const Matrix& A = marketModel_->pseudoRoot(j); calculators_.push_back( LMMDriftCalculator(A, displacements_, marketModel->evolution().rateTaus(), numeraires[j], alive_[j])); std::vector<Real> fixed(numberOfRates_); for (Size k=0; k<numberOfRates_; ++k) { Real variance = std::inner_product(A.row_begin(k), A.row_end(k), A.row_begin(k), 0.0); fixed[k] = -0.5*variance; } fixedDrifts_.push_back(fixed); } setForwards(marketModel_->initialRates()); Size variatesPerStep = numberOfFactors_+volFactorsPerStep_; firstVolatilityFactor_ = std::min(firstVolatilityFactor_,variatesPerStep - volFactorsPerStep_); Size volIncrement = (variatesPerStep - firstVolatilityFactor_)/volFactorsPerStep_; for (Size i=0; i < volFactorsPerStep_; ++i) isVolVariate_[firstVolatilityFactor_+i*volIncrement] = true; }
void SVDDFwdRatePc::setInitialState(const CurveState& cs) { setForwards(cs.forwardRates()); }