Skip to content

Commit c5def39

Browse files
pcaspersjenkins
authored andcommitted
QPR-12028 clean up usage of multi path basis system
1 parent 0d159c8 commit c5def39

2 files changed

Lines changed: 13 additions & 19 deletions

File tree

QuantExt/qle/pricingengines/mcmultilegbaseengine.cpp

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -783,9 +783,6 @@ void McMultiLegBaseEngine::calculate() const {
783783
std::vector<RegressionModel> regModelContinuationValue(exerciseXvaTimes.size()); // available on ex times
784784
std::vector<RegressionModel> regModelOption(exerciseXvaTimes.size()); // available on xva and ex times
785785

786-
auto basisFns =
787-
RandomVariableLsmBasisSystem::multiPathBasisSystem(model_->stateProcess()->size(), polynomOrder_, polynomType_);
788-
789786
enum class CfStatus { open, cached, done };
790787
std::vector<CfStatus> cfStatus(cashflowInfo.size(), CfStatus::open);
791788

@@ -894,7 +891,7 @@ void McMultiLegBaseEngine::calculate() const {
894891

895892
amcCalculator_ = boost::make_shared<MultiLegBaseAmcCalculator>(
896893
externalModelIndices_, optionSettlement_, exerciseXvaTimes, exerciseTimes, xvaTimes, regModelUndDirty,
897-
regModelUndExInto, regModelContinuationValue, regModelOption, basisFns, resultValue_,
894+
regModelUndExInto, regModelContinuationValue, regModelOption, resultValue_,
898895
model_->stateProcess()->initialValues(), model_->irlgm1f(0)->currency());
899896
}
900897

@@ -906,13 +903,12 @@ McMultiLegBaseEngine::MultiLegBaseAmcCalculator::MultiLegBaseAmcCalculator(
906903
const std::vector<McMultiLegBaseEngine::RegressionModel>& regModelUndDirty,
907904
const std::vector<McMultiLegBaseEngine::RegressionModel>& regModelUndExInto,
908905
const std::vector<McMultiLegBaseEngine::RegressionModel>& regModelContinuationValue,
909-
const std::vector<McMultiLegBaseEngine::RegressionModel>& regModelOption,
910-
const std::vector<std::function<RandomVariable(const std::vector<const RandomVariable*>&)>>& basisFns,
911-
const Real resultValue, const Array& initialState, const Currency& baseCurrency)
906+
const std::vector<McMultiLegBaseEngine::RegressionModel>& regModelOption, const Real resultValue,
907+
const Array& initialState, const Currency& baseCurrency)
912908
: externalModelIndices_(externalModelIndices), settlement_(settlement), exerciseXvaTimes_(exerciseXvaTimes),
913909
exerciseTimes_(exerciseTimes), xvaTimes_(xvaTimes), regModelUndDirty_(regModelUndDirty),
914910
regModelUndExInto_(regModelUndExInto), regModelContinuationValue_(regModelContinuationValue),
915-
regModelOption_(regModelOption), basisFns_(basisFns), resultValue_(resultValue), initialState_(initialState),
911+
regModelOption_(regModelOption), resultValue_(resultValue), initialState_(initialState),
916912
baseCurrency_(baseCurrency) {}
917913

918914
std::vector<QuantExt::RandomVariable> McMultiLegBaseEngine::MultiLegBaseAmcCalculator::simulatePath(
@@ -1115,7 +1111,7 @@ void McMultiLegBaseEngine::RegressionModel::train(const Size polynomOrder,
11151111

11161112
// get the basis functions
11171113

1118-
basisFns_ = RandomVariableLsmBasisSystem::multiPathBasisSystem(regressor.size(), polynomOrder, polynomType);
1114+
basisFns_ = multiPathBasisSystem(regressor.size(), polynomOrder, polynomType, Null<Size>());
11191115

11201116
// compute the regression coefficients
11211117

QuantExt/qle/pricingengines/mcmultilegbaseengine.hpp

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -148,15 +148,14 @@ class McMultiLegBaseEngine {
148148
// the implementation of the amc calculator interface used by the amc valuation engine
149149
class MultiLegBaseAmcCalculator : public AmcCalculator {
150150
public:
151-
MultiLegBaseAmcCalculator(
152-
const std::vector<Size>& externalModelIndices, const Settlement::Type settlement,
153-
const std::set<Real>& exerciseXvaTimes, const std::set<Real>& exerciseTimes, const std::set<Real>& xvaTimes,
154-
const std::vector<McMultiLegBaseEngine::RegressionModel>& regModelUndDirty,
155-
const std::vector<McMultiLegBaseEngine::RegressionModel>& regModelUndExInto,
156-
const std::vector<McMultiLegBaseEngine::RegressionModel>& regModelContinuationValue,
157-
const std::vector<McMultiLegBaseEngine::RegressionModel>& regModelOption,
158-
const std::vector<std::function<RandomVariable(const std::vector<const RandomVariable*>&)>>& basisFns,
159-
const Real resultValue, const Array& initialState, const Currency& baseCurrency);
151+
MultiLegBaseAmcCalculator(const std::vector<Size>& externalModelIndices, const Settlement::Type settlement,
152+
const std::set<Real>& exerciseXvaTimes, const std::set<Real>& exerciseTimes,
153+
const std::set<Real>& xvaTimes,
154+
const std::vector<McMultiLegBaseEngine::RegressionModel>& regModelUndDirty,
155+
const std::vector<McMultiLegBaseEngine::RegressionModel>& regModelUndExInto,
156+
const std::vector<McMultiLegBaseEngine::RegressionModel>& regModelContinuationValue,
157+
const std::vector<McMultiLegBaseEngine::RegressionModel>& regModelOption,
158+
const Real resultValue, const Array& initialState, const Currency& baseCurrency);
160159

161160
Currency npvCurrency() override { return baseCurrency_; }
162161
std::vector<QuantExt::RandomVariable> simulatePath(const std::vector<QuantLib::Real>& pathTimes,
@@ -174,7 +173,6 @@ class McMultiLegBaseEngine {
174173
std::vector<McMultiLegBaseEngine::RegressionModel> regModelUndExInto_;
175174
std::vector<McMultiLegBaseEngine::RegressionModel> regModelContinuationValue_;
176175
std::vector<McMultiLegBaseEngine::RegressionModel> regModelOption_;
177-
std::vector<std::function<RandomVariable(const std::vector<const RandomVariable*>&)>> basisFns_;
178176
Real resultValue_;
179177
Array initialState_;
180178
Currency baseCurrency_;

0 commit comments

Comments
 (0)