function MetropolisHastings(probability, state, generateAState) { var aPossibleState = generateAState(state); var transitionOdds = probability(aPossibleState) / probability(state); var newState if (Math.random() <= transitionOdds) { newState = aPossibleState; } else { newState = state; } return newState; }