From fa2c321bcb7fb75ff6b0015d703cb867ce0b87d8 Mon Sep 17 00:00:00 2001 From: Luigi Ballabio Date: Thu, 3 Oct 2024 17:35:41 +0200 Subject: [PATCH] Allow passing optimizer and end criteria to GlobalBootstrap --- SWIG/optimizers.i | 3 +++ SWIG/piecewiseyieldcurve.i | 32 ++++++++++++++++++++++---------- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/SWIG/optimizers.i b/SWIG/optimizers.i index ec9ce9d18..90b00f16c 100644 --- a/SWIG/optimizers.i +++ b/SWIG/optimizers.i @@ -196,6 +196,7 @@ class EndCriteria { StationaryFunctionValue, StationaryFunctionAccuracy, ZeroGradientNorm, + FunctionEpsilonTooSmall, Unknown }; EndCriteria(Size maxIteration, @@ -203,6 +204,8 @@ class EndCriteria { Real rootEpsilon, Real functionEpsilon, Real gradientNormEpsilon); + + static bool succeeded(EndCriteria::Type ecType); }; diff --git a/SWIG/piecewiseyieldcurve.i b/SWIG/piecewiseyieldcurve.i index f8ff6b0f2..e2d34de18 100644 --- a/SWIG/piecewiseyieldcurve.i +++ b/SWIG/piecewiseyieldcurve.i @@ -23,6 +23,7 @@ %include termstructures.i %include ratehelpers.i %include interpolation.i +%include optimizers.i %include null.i // bootstrap traits @@ -211,21 +212,32 @@ struct _GlobalBootstrap { std::vector > additionalHelpers; std::vector additionalDates; double accuracy; - _GlobalBootstrap(double accuracy = Null()) - : accuracy(accuracy) {} + ext::shared_ptr optimizer; + ext::shared_ptr endCriteria; + _GlobalBootstrap(double accuracy = Null(), + ext::shared_ptr optimizer = nullptr, + ext::shared_ptr endCriteria = nullptr) + : accuracy(accuracy), optimizer(optimizer), endCriteria(endCriteria) {} _GlobalBootstrap(const std::vector >& additionalHelpers, - const std::vector& additionalDates, - double accuracy = Null()) - : additionalHelpers(additionalHelpers), additionalDates(additionalDates), accuracy(accuracy) {} + const std::vector& additionalDates, + double accuracy = Null(), + ext::shared_ptr optimizer = nullptr, + ext::shared_ptr endCriteria = nullptr) + : additionalHelpers(additionalHelpers), additionalDates(additionalDates), accuracy(accuracy), + optimizer(optimizer), endCriteria(endCriteria) {} }; %} %rename(GlobalBootstrap) _GlobalBootstrap; struct _GlobalBootstrap { - _GlobalBootstrap(doubleOrNull accuracy = Null()); + _GlobalBootstrap(doubleOrNull accuracy = Null(), + ext::shared_ptr optimizer = nullptr, + ext::shared_ptr endCriteria = nullptr); _GlobalBootstrap(const std::vector >& additionalHelpers, const std::vector& additionalDates, - doubleOrNull accuracy = Null()); + doubleOrNull accuracy = Null(), + ext::shared_ptr optimizer = nullptr, + ext::shared_ptr endCriteria = nullptr); }; @@ -247,14 +259,14 @@ class GlobalLinearSimpleZeroCurve : public YieldTermStructure { if (b.additionalHelpers.empty()) { return new GlobalLinearSimpleZeroCurve( referenceDate, instruments, dayCounter, Linear(), - GlobalLinearSimpleZeroCurve::bootstrap_type(b.accuracy)); + GlobalLinearSimpleZeroCurve::bootstrap_type(b.accuracy, b.optimizer, b.endCriteria)); } else { return new GlobalLinearSimpleZeroCurve( referenceDate, instruments, dayCounter, Linear(), GlobalLinearSimpleZeroCurve::bootstrap_type(b.additionalHelpers, AdditionalDates(b.additionalDates), AdditionalErrors(b.additionalHelpers), - b.accuracy)); + b.accuracy, b.optimizer, b.endCriteria)); } } } @@ -266,4 +278,4 @@ class GlobalLinearSimpleZeroCurve : public YieldTermStructure { }; -#endif \ No newline at end of file +#endif