std::vector<bool> Line::getProblematic(){ std::vector<bool> prblm(m_Points.size()); for (std::vector<Point>::size_type i = 0; i < m_Points.size(); i++) prblm[i] = m_Points[i].problematic; return(prblm); }
double CalibrationHelperCmsCorrelations::calibrate() { CmsCorrelationCostFunction costfct(this,&(*corrTS_),lambda_,MINPRICE_,ONLYPOSITIVECORR_,MAXCORR_); CmsCorrelationConstraint constraint; int n = corrTS_->numberOfPillars(); Array guess(n); for(int i=0;i<n;i++) { double corr=corrTS_->pillarCorrelation(i); if(corr>MAXCORR_) corr=MAXCORR_; if(corr<-MAXCORR_) corr=-MAXCORR_; if(ONLYPOSITIVECORR_) { if(corr<0.0) corr=0.0; // only allow positive correlations guess[i]=tan(M_PI/2.0*sqrt(corr)); // only allow positive correlations } else { guess[i]=tan(M_PI/2.0*corr); } } Problem prblm(costfct,constraint,guess); EndCriteria ec(MAXIT_, MAXST_, OPTACCURACY_, OPTACCURACY_, OPTACCURACY_); EndCriteria::Type ret; if(optimizer_==0) { Simplex method(0.05); ret=method.minimize(prblm,ec); } if(optimizer_==1) { LevenbergMarquardt method; ret=method.minimize(prblm,ec); } if(optimizer_==2) { SimulatedAnnealing method(0.1,0,50,500,2.5,0.2); ret=method.minimize(prblm,ec); } //FILE* out=fopen("cost.log","a"); //fprintf(out,"Start Optimization with maxit=%d, maxst=%d, acc=%f, maxCorr=%f, minPrice=%f, allowPosOnly=%d", // MAXIT,MAXST,OPTACCURACY,MAXCORR,MINPRICE,ONLYPOSITIVECORR); //fclose(out); Array x=prblm.currentValue(); double y=costfct.value(x);//prblm.functionValue(); to make sure, the model is set to optimal value if(ret==EndCriteria::None) QL_FAIL("Optimizer returns status none"); if(ret==EndCriteria::MaxIterations) QL_FAIL("Optimizer returns status max iterations"); if(ret==EndCriteria::Unknown) QL_FAIL("Optimizer returns status unknown"); return y; }
double CalibrationHelperCms::calibrate() { double sumRmse=0.0; //for(int i=0;i<optPillarIndex_.size();i++) { CmsCostFunction* costfct; if(!useStdCube_) costfct = new CmsCostFunction(this,&(*volCube_),noOptPillars_,optPillarTimes_,undPillarIndex_,maxMu_,maxNu_,minBeta_,maxBeta_,mode_); else costfct = new CmsCostFunction(this,&(*volCube2_),noOptPillars_,optPillarTimes_,skipOptPillars_,underlying_,maxMu_,maxNu_,minBeta_,maxBeta_,mode_,weights_); NoConstraint constraint; int nop; if(mode_==0 || mode_==4) nop=2; if(mode_==1 || mode_==5) nop=3; if(mode_==2 || mode_==6) nop=noOptPillars_; if(mode_==3 || mode_==7) nop=4; Array guess(nop); if(!useStdCube_) { if(mode_==0 || mode_==1) { guess[0]=tan(M_PI*(volCube_->pillarBeta(0,undPillarIndex_)) - M_PI/2.0); guess[1]=tan(M_PI*(volCube_->pillarBeta(noOptPillars_-1,undPillarIndex_)) - M_PI/2.0); } if(mode_==4 || mode_==5) { guess[0]=sqrt(volCube_->pillarNu(0,undPillarIndex_)); guess[1]=sqrt(volCube_->pillarNu(noOptPillars_-1,undPillarIndex_)); } if(mode_==1 || mode_==5) { guess[2]=1.0; // decay factor } if(mode_==2) { for(int i=0;i<noOptPillars_;i++) guess[i]=tan(M_PI*(volCube_->pillarBeta(i,undPillarIndex_)) - M_PI/2.0); } if(mode_==6) { for(int i=0;i<noOptPillars_;i++) guess[i]=sqrt(volCube_->pillarNu(i,undPillarIndex_)); } if(mode_==3) { guess[3]=volCube_->pillarBeta(noOptPillars_-1,undPillarIndex_); guess[0]=volCube_->pillarBeta(0,undPillarIndex_)-guess[3]; guess[1]=0.0; guess[2]=1.0; } if(mode_==7) { guess[3]=volCube_->pillarNu(noOptPillars_-1,undPillarIndex_); guess[0]=volCube_->pillarNu(0,undPillarIndex_)-guess[3]; guess[1]=0.0; guess[2]=1.0; } } else { if(mode_==0) { {guess[0]=0.5; guess[1]=0.5;} // default guess for beta calibration } if(mode_==4) { {guess[0]=1.0; guess[1]=1.0;} // default guess for nu calibration } if(mode_==2) { for(int i=skipOptPillars_;i<noOptPillars_;i++) guess[i]=0.5; // default guess for beta calibration } if(mode_==6) { for(int i=skipOptPillars_;i<noOptPillars_;i++) guess[i]=1.0; // default guess for nu calibration } } Problem prblm(*costfct,constraint,guess); EndCriteria ec(MAXIT_, MAXST_, OPTACCURACY_, OPTACCURACY_, OPTACCURACY_); EndCriteria::Type ret; if(optimizer_==0) { Simplex method(0.5); ret=method.minimize(prblm,ec); } if(optimizer_==1) { LevenbergMarquardt method; ret=method.minimize(prblm,ec); } if(optimizer_==2) { SimulatedAnnealing method(0.1,0,50,500,2.5,0.2); ret=method.minimize(prblm,ec); } //SteepestDescent method; //LevenbergMarquardt method; //SimulatedAnnealing method(0.1,0,50,500,2.5,0.2); //FILE *out=fopen("costCms.log","a"); //fprintf(out,"Opt Settings: MAXIT=%d, MAXST=%d, OPTACCURACY=%1.5e\n",MAXIT,MAXST,OPTACCURACY); //fclose(out); Array x=prblm.currentValue(); double y=costfct->value(x);//prblm.functionValue(); to make sure, the model is set to optimal value if(ret==EndCriteria::None) QL_FAIL("Optimizer returns status none"); if(ret==EndCriteria::MaxIterations) QL_FAIL("Optimizer returns status max iterations"); if(ret==EndCriteria::Unknown) QL_FAIL("Optimizer returns status unknown"); //sumRmse+=y; //} if(useStdCube_) volCube2_->updateAfterRecalibration(); // recalibrate return y; //sumRmse; }