double MetropolisHastings::CalculateMHRatio(const Sample& prevState, const Sample& nextState, double proposalAsymmetry, double beta) { if (nextState.GetPrior() == 0.0) return 0.0; // calculate Metropolis-Hastings ratio return std::min(1.0, proposalAsymmetry * nextState.GetPrior()/prevState.GetPrior() * exp( beta * (prevState.GetNegLogLikelihood() - nextState.GetNegLogLikelihood()) ) ); }