Update of /cvsroot/quantlibaddin/QuantLibAddin/qlo
In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv27074/qlo
Modified Files:
optimization.cpp optimization.hpp
Log Message:
1) major (even if only partial) refactoring of the Optimization framework (LevenbergMarquardt
has never been in the framework and it is not yet)
2) SABR refactoring
Index: optimization.hpp
===================================================================
RCS file: /cvsroot/quantlibaddin/QuantLibAddin/qlo/optimization.hpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** optimization.hpp 28 Aug 2006 15:56:17 -0000 1.4
--- optimization.hpp 29 Nov 2006 18:06:47 -0000 1.5
***************
*** 25,76 ****
namespace QuantLibAddin {
! class EndCriteria : public ObjHandler::LibraryObject<
! QuantLib::EndCriteria>
! {
public:
EndCriteria(QuantLib::Size maxIteration,
! double epsilon);
};
! class OptimizationMethod : public ObjHandler::LibraryObject<
! QuantLib::OptimizationMethod> {};
! class ConjugateGradient : public OptimizationMethod
! {
public:
! ConjugateGradient(const QuantLib::EndCriteria& endCriteria,
! const QuantLib::Array& initialValue,
! const boost::shared_ptr<QuantLib::LineSearch>& lineSearch);
};
! class LevenbergMarquardt : public OptimizationMethod
! {
public:
! LevenbergMarquardt();
};
! class Simplex : public OptimizationMethod
! {
public:
! Simplex(double lambda,
! double tol);
};
! class SteepestDescent : public OptimizationMethod
! {
public:
! SteepestDescent();
};
-
- class LineSearch : public ObjHandler::LibraryObject<
- QuantLib::LineSearch> {};
! class ArmijoLineSearch : public LineSearch
! {
public:
! ArmijoLineSearch(double eps,
! double alpha,
! double beta);
};
}
--- 25,83 ----
namespace QuantLibAddin {
! class EndCriteria :
! public ObjHandler::LibraryObject<QuantLib::EndCriteria> {
public:
EndCriteria(QuantLib::Size maxIteration,
! QuantLib::Real functionEpsilon,
! QuantLib::Real gradientEpsilon);
};
! class OptimizationMethod :
! public ObjHandler::LibraryObject<QuantLib::OptimizationMethod> {};
! class Simplex : public OptimizationMethod {
public:
! Simplex(QuantLib::Real lambda,
! const QuantLib::Array& initialValue,
! const QuantLib::EndCriteria& endCriteria);
};
! class LevenbergMarquardt : public OptimizationMethod {
public:
! LevenbergMarquardt(QuantLib::Real epsfcn,
! QuantLib::Real ftol,
! QuantLib::Real xtol,
! QuantLib::Real gtol,
! QuantLib::Size maxfev,
! const QuantLib::Array& initialValue,
! const QuantLib::EndCriteria& endCriteria);
};
+
+ class LineSearch :
+ public ObjHandler::LibraryObject<QuantLib::LineSearch> {};
! class ArmijoLineSearch : public LineSearch {
public:
! ArmijoLineSearch(QuantLib::Real eps,
! QuantLib::Real alpha,
! QuantLib::Real beta);
};
! class LineSearchBasedMethod : public OptimizationMethod {};
!
! class ConjugateGradient : public LineSearchBasedMethod {
public:
! ConjugateGradient(const QuantLib::Array& initialValue,
! const QuantLib::EndCriteria& endCriteria,
! const boost::shared_ptr<QuantLib::LineSearch>&);
};
! class SteepestDescent : public LineSearchBasedMethod {
public:
! SteepestDescent(const QuantLib::Array& initialValue,
! const QuantLib::EndCriteria& endCriteria,
! const boost::shared_ptr<QuantLib::LineSearch>&);
};
+
}
Index: optimization.cpp
===================================================================
RCS file: /cvsroot/quantlibaddin/QuantLibAddin/qlo/optimization.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** optimization.cpp 28 Aug 2006 15:56:17 -0000 1.6
--- optimization.cpp 29 Nov 2006 18:06:47 -0000 1.7
***************
*** 20,23 ****
--- 20,24 ----
#endif
#include <qlo/optimization.hpp>
+ #include <ql/Optimization/armijo.hpp>
#include <ql/Optimization/conjugategradient.hpp>
#include <ql/Optimization/levenbergmarquardt.hpp>
***************
*** 28,75 ****
EndCriteria::EndCriteria(QuantLib::Size maxIteration,
! double epsilon)
! {
! libraryObject_ = boost::shared_ptr<QuantLib::EndCriteria>(
! new QuantLib::EndCriteria(maxIteration,
! epsilon));
}
! ConjugateGradient::ConjugateGradient(
! const QuantLib::EndCriteria& endCriteria,
! const QuantLib::Array& initialValue,
! const boost::shared_ptr<QuantLib::LineSearch>& lineSearch)
! {
! libraryObject_ = boost::shared_ptr<QuantLib::OptimizationMethod>(
! new QuantLib::ConjugateGradient(endCriteria,
! initialValue,
! lineSearch));
}
! LevenbergMarquardt::LevenbergMarquardt()
{
! libraryObject_ = boost::shared_ptr<QuantLib::OptimizationMethod>(
! new QuantLib::LevenbergMarquardt());
}
! Simplex::Simplex(double lambda, double tol)
! {
! libraryObject_ = boost::shared_ptr<QuantLib::OptimizationMethod>(
! new QuantLib::Simplex(lambda, tol));
}
! SteepestDescent::SteepestDescent()
{
! libraryObject_ = boost::shared_ptr<QuantLib::OptimizationMethod>(
! new QuantLib::SteepestDescent());
}
!
! ArmijoLineSearch::ArmijoLineSearch(
! double eps,
! double alpha,
! double beta)
{
! libraryObject_ = boost::shared_ptr<QuantLib::LineSearch>(
! new QuantLib::ArmijoLineSearch(eps, alpha, beta));
}
}
--- 29,87 ----
EndCriteria::EndCriteria(QuantLib::Size maxIteration,
! QuantLib::Real functionEpsilon,
! QuantLib::Real gradientEpsilon) {
! libraryObject_ = boost::shared_ptr<QuantLib::EndCriteria>(new
! QuantLib::EndCriteria(maxIteration,
! functionEpsilon,
! gradientEpsilon));
}
! Simplex::Simplex(QuantLib::Real lambda,
! const QuantLib::Array& initVal,
! const QuantLib::EndCriteria& endC) {
! libraryObject_ = boost::shared_ptr<QuantLib::OptimizationMethod>(new
! QuantLib::Simplex(lambda, initVal, endC));
}
! LevenbergMarquardt::LevenbergMarquardt(QuantLib::Real epsfcn,
! QuantLib::Real ftol,
! QuantLib::Real xtol,
! QuantLib::Real gtol,
! QuantLib::Size maxfev,
! const QuantLib::Array& initVal,
! const QuantLib::EndCriteria& endC)
{
! libraryObject_ = boost::shared_ptr<QuantLib::OptimizationMethod>(new
! QuantLib::LevenbergMarquardt(epsfcn, ftol, xtol, gtol, maxfev,
! initVal, endC));
}
! ArmijoLineSearch::ArmijoLineSearch(QuantLib::Real eps,
! QuantLib::Real alpha,
! QuantLib::Real beta) {
! libraryObject_ = boost::shared_ptr<QuantLib::LineSearch>(new
! QuantLib::ArmijoLineSearch(eps, alpha, beta));
}
! ConjugateGradient::ConjugateGradient(
! const QuantLib::Array& initVal,
! const QuantLib::EndCriteria& endC,
! const boost::shared_ptr<QuantLib::LineSearch>& lineSearch)
{
! libraryObject_ = boost::shared_ptr<QuantLib::OptimizationMethod>(new
! QuantLib::ConjugateGradient(initVal, endC, lineSearch));
}
!
!
!
! SteepestDescent::SteepestDescent(
! const QuantLib::Array& initVal,
! const QuantLib::EndCriteria& endC,
! const boost::shared_ptr<QuantLib::LineSearch>& lineSearch)
{
! libraryObject_ = boost::shared_ptr<QuantLib::OptimizationMethod>(new
! QuantLib::SteepestDescent(initVal, endC, lineSearch));
}
+
}
|