本文整理汇总了C++中Parm::getLnPriorProbability方法的典型用法代码示例。如果您正苦于以下问题:C++ Parm::getLnPriorProbability方法的具体用法?C++ Parm::getLnPriorProbability怎么用?C++ Parm::getLnPriorProbability使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Parm
的用法示例。
在下文中一共展示了Parm::getLnPriorProbability方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: parmOut
Mcmc::Mcmc(Model *m, MbRandom *r, Settings *s, IoManager *outputPtr) {
/* initialize some pointers and variables */
modelPtr = m;
rnd = r;
chainLength = s->getChainLength();
printFreq = s->getPrintFrequency();
sampleFreq = s->getSampleFrequency();
/* open files for output */
string fileName = "";
if (outputPtr->getFileName() == "")
fileName = "mcmc_out";
else
fileName = outputPtr->getFileName();
string filePathAndName = outputPtr->getFilePath() + PATH_SEPERATOR + fileName;
string parmFile = filePathAndName + ".parm";
string treeFile = filePathAndName + ".tree";
ofstream parmOut( parmFile.c_str(), ios::out );
ofstream treeOut( treeFile.c_str(), ios::out );
if (!parmOut)
{
cerr << "Cannot open file \"" + parmFile + "\"" << endl;
exit(1);
}
if (!treeOut)
{
cerr << "Cannot open file \"" + treeFile + "\"" << endl;
exit(1);
}
cout << " Running Markov chain" << endl;
cout << " Number of cycles = " << chainLength << endl;
cout << " Print frequency = " << printFreq << endl;
cout << " Sample frequency = " << sampleFreq << endl;
cout << " Parameter file name = " << fileName + ".parm" << endl;
cout << " Tree file name = " << fileName + ".tree" << endl << endl;
cout << " Chain" << endl;
/* run the Markov chain */
int timeOn = clock();
for (int n=1; n<=chainLength; n++)
{
/* pick a parameter to change */
int whichParm = modelPtr->pickParm();
Parm *parmOld = modelPtr->getCurParameter(whichParm);
modelPtr->flipActiveParm();
Parm *parmNew = modelPtr->getCurParameter(whichParm);
/* change the parameter */
double lnProposalRatio = parmNew->change();
/* calculate likelihood for new state */
modelPtr->upDateQ(parmNew);
modelPtr->upDateTiProbs();
double lnLOld = modelPtr->getLnL();
double lnLNew = modelPtr->lnLikelihood();
if (n % printFreq == 0)
cout << setw(8) << n << " -- " << fixed << setprecision(2) << lnLOld << " -> " << fixed << setprecision(2) << lnLNew;
/* calculate the acceptance probability */
double lnLikelihoodRatio = lnLNew - lnLOld;
double lnPriorRatio = parmNew->getLnPriorProbability() - parmOld->getLnPriorProbability();
double lnR = lnLikelihoodRatio + lnPriorRatio + lnProposalRatio;
double r = 0.0;
if (lnR > 0.0)
r = 1.0;
else if (lnR < -100.0)
r = 0.0;
else
r = exp(lnR);
/* accept or reject the move */
bool acceptMove = false;
if (rnd->uniformRv() < r)
acceptMove = true;
/* update state of chain */
if (acceptMove == true)
{
modelPtr->setLnL(lnLNew);
int from = modelPtr->getActiveParm();
int to = flip(from);
modelPtr->copyParms( from, to );
if (n % printFreq == 0)
cout << " -- Accepted change to " << parmNew->getParmName() << endl;
}
else
{
modelPtr->restoreQ(parmNew);
int to = modelPtr->getActiveParm();
int from = flip(to);
modelPtr->copyParms( from, to );
modelPtr->flipActiveParm();
if (n % printFreq == 0)
cout << " -- Rejected change to " << parmNew->getParmName() << endl;
}
/* print state of the chain to a file */
//.........这里部分代码省略.........