QuantLib icon indicating copy to clipboard operation
QuantLib copied to clipboard

FittedBondDiscountCurve: add resetGuess()

Open klin333 opened this issue 2 years ago • 0 comments

Hi,

For FittedBondDiscountCurve, user might want to rerun the optimization with a different guess. This is often required because these non-convex fitting methods can often get stuck in local minima, and multiple random guess starting points may be needed to find a better solution. Currently, the guessSolution_ member is private.

Note that i have poor c++ capabilities and poor OOP design knowledge. Diff below for illustrative purposes only.

diff --git a/src/fittedbonddiscountcurve.cpp b/src/fittedbonddiscountcurve.cpp
index 17270e9..9a14cfa 100644
--- a/src/fittedbonddiscountcurve.cpp
+++ b/src/fittedbonddiscountcurve.cpp
@@ -86,6 +86,11 @@ namespace QuantLibOvrd {
         setup();
     }
 
+    void FittedBondDiscountCurve::resetGuess(const Array& guess) {
+      QL_REQUIRE(fittingMethod_->size() == guess.size(), "guess is of wrong size");
+      guessSolution_ = guess;
+      update();
+    }
 
     void FittedBondDiscountCurve::performCalculations() const {
 
diff --git a/src/fittedbonddiscountcurve.hpp b/src/fittedbonddiscountcurve.hpp
index db919a9..6d0eb7c 100644
--- a/src/fittedbonddiscountcurve.hpp
+++ b/src/fittedbonddiscountcurve.hpp
@@ -119,6 +119,8 @@ namespace QuantLibOvrd {
         const FittingMethod& fitResults() const;
         //@}
 
+        void resetGuess(const Array& guess);
+
         //! \name Observer interface
         //@{
         void update() override;

klin333 avatar Apr 19 '24 02:04 klin333