| 
					
	
	 I am trying to use parallel_for_each loop from Microsoft PPL library to speed up Heston calibration. We are using Differential Evolution to optimize time dependent Heston parameters, so I thought the best place
 to parallelize would be in the HestonBootstrapFunction. I created a new BootstrapFunction class that inherits from CostFunction and overrode its values() method as below. For each date in vol surface, I am expecting to pass in as many CalibrationHelpers as
 there are strikes and I would like to calculate the calibration errors in parallel for that date. I compiled the code with /GR option to indicate RTTI support. I am getting std::__non_rtti_object exception that I am struggling with. Any help is appreciated. Here is my MTHestonBootstrapFunction.h : #ifndef
 MT_quantlib_heston_option_helper_hpp #define
MT_quantlib_heston_option_helper_hpp #include
<future> #include
<thread> #include
<ql/models/calibrationhelper.hpp> #include
<ql/models/equity/hestonmodelhelper.hpp> #include
<ql/models/equity/piecewisetimedependenthestonmodel.hpp> #include
<ql/instruments/vanillaoption.hpp> #include
<ql/math/optimization/costfunction.hpp> #include
<ppl.h> #include
<concrtrm.h> using
namespace std; using
namespace Concurrency; namespace
 QuantLib { class
MTHestonBootstrapFunction :
public
CostFunction {       
public:               MTHestonBootstrapFunction(                      boost::shared_ptr<PiecewiseTimeDependentHestonModel>
model,
                     
Size
index,
                      std::vector<boost::shared_ptr<CalibrationHelper>>
helpers): model_(model),
 index_(index), helpers_(helpers)
 {}              
              
Real value(const
Array&
x)
const {                     
Array tmp = values(x);                      QuantLib::Real
 v = 0.0;                     
for(Size
 i=0; i<tmp.size(); i++)                            v += tmp[i] * tmp[i];                           
//v = std::max(v, std::abs(tmp[i]));                     
return v;               }              
Disposable<Array>
 values(const
Array&
x)
const{                     
Real theta, kappa, sigma, rho;                      theta =
x[0]; kappa =
x[1];                      sigma =
x[2]; rho =
x[3];                     
// V0 is set on the first maturity and kept unchanged                     
if(index_ == 0)                            model_->setV0(x[4]);                     
// kappa is not negociable (faster resolution)                     
// model_->setKappa(index_, kappa);                      model_->setTheta(index_, theta);                      model_->setSigma(index_, sigma);                      model_->setRho(index_, rho);                     
Array v(helpers_.size());                     
combinable<std::vector<Real>
 > localErrors;                      parallel_for_each(helpers_.begin(),  helpers_.end(), [&localErrors] (boost::shared_ptr<CalibrationHelper>
helper) {                           
Real error =
helper->calibrationError();                            localErrors.local().push_back(error);                      });                     
                      localErrors.combine_each([&](std::vector<Real>
 & local){                           
for (int
 k = 0; k < local.size(); ++k){                                   v[k] =
local.at(k);                            }                      });                     
return v;               }       
private:               boost::shared_ptr<PiecewiseTimeDependentHestonModel>
 model_;              
Size index_;               std::vector<boost::shared_ptr<CalibrationHelper>>
 helpers_;        }; } #endif Thanks a lot, Suhas ............................................................................ For further important information about AllianceBernstein please click here ------------------------------------------------------------------------------ What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic patterns at an interface-level. Reveals which users, apps, and protocols are consuming the most bandwidth. Provides multi-vendor support for NetFlow, J-Flow, sFlow and other flows. Make informed decisions using capacity planning reports. http://sdm.link/zohodev2dev _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users  | 
			
| Free forum by Nabble | Edit this page | 
	
	
		