def testCalcPacc(self): istate = State(np.array([1.0, 2.0]), np.array([2.0, 1.0])) fstate = State(np.array([1.0, 2.0]) * 2.0, np.array([2.0, 1.0]) * 2.0) pcom_fstate = fstate.clone() pcom = SimpleProposalCommunicator(istate.clone(), pcom_fstate) self._sampler.state.momentum = None pacc = self._sampler._calc_pacc(pcom) dH = self._sampler._hamiltonian(fstate) - self._sampler._hamiltonian( istate) assert (csb.numeric.exp(-dH / self._sampler.temperature) == pacc) assert (pcom_fstate.momentum == None) pcom_fstate = fstate.clone() pcom = SimpleProposalCommunicator(istate.clone(), pcom_fstate) self._sampler.state.momentum = np.array([1.0, 4.0]) pacc = self._sampler._calc_pacc(pcom) dH = self._sampler._hamiltonian(fstate) - self._sampler._hamiltonian( istate) assert (csb.numeric.exp(-dH / self._sampler.temperature) == pacc) assert (np.all(pcom_fstate.momentum == np.array([1.0, 4.0])))
def testCalcPacc(self): istate = State(np.array([1.0, 2.0]), np.array([2.0, 1.0])) fstate = State(np.array([1.0, 2.0]) * 2.0, np.array([2.0, 1.0]) * 2.0) pcom_fstate = fstate.clone() pcom = SimpleProposalCommunicator(istate.clone(), pcom_fstate) self._sampler.state.momentum = None pacc = self._sampler._calc_pacc(pcom) dH = self._sampler._hamiltonian(fstate) - self._sampler._hamiltonian(istate) assert(csb.numeric.exp(-dH / self._sampler.temperature) == pacc) assert(pcom_fstate.momentum == None) pcom_fstate = fstate.clone() pcom = SimpleProposalCommunicator(istate.clone(), pcom_fstate) self._sampler.state.momentum = np.array([1.0, 4.0]) pacc = self._sampler._calc_pacc(pcom) dH = self._sampler._hamiltonian(fstate) - self._sampler._hamiltonian(istate) assert(csb.numeric.exp(-dH / self._sampler.temperature) == pacc) assert(np.all(pcom_fstate.momentum == np.array([1.0, 4.0])))
class TestHMCSampler(test.Case): def setUp(self): self._mass_matrix = InvertibleMatrix(np.array([[2.0, 0.0], [1.0, 3.0]])) self._initstate = State(np.array([1.0, 2.0])) self._sampler = MockedHMCSampler(pdf=SamplePDF(), state=self._initstate.clone(), gradient=SamplePDF().grad, timestep=0.3, nsteps=25, mass_matrix=self._mass_matrix) def testPropose(self): np.random.seed(5) initmom = np.random.multivariate_normal(mean=np.zeros(len(self._initstate.position)), cov=self._mass_matrix) self._sampler.state = self._initstate.clone() np.random.seed(5) res = self._sampler._propose() assert(np.all(res.current_state.position == self._initstate.position)) assert(np.all(res.current_state.momentum == initmom)) assert(np.all(res.proposal_state.position == self._initstate.position * 2.0)) assert(np.all(res.proposal_state.momentum == initmom * 2)) def testHamiltonian(self): state = State(np.array([1.0, 2.0]), np.array([2.0, 1.0])) assert(self._sampler._hamiltonian(state) == 3.5 - np.log(1.0 / (2.0 * np.pi))) def testCalcPacc(self): istate = State(np.array([1.0, 2.0]), np.array([2.0, 1.0])) fstate = State(np.array([1.0, 2.0]) * 2.0, np.array([2.0, 1.0]) * 2.0) pcom_fstate = fstate.clone() pcom = SimpleProposalCommunicator(istate.clone(), pcom_fstate) self._sampler.state.momentum = None pacc = self._sampler._calc_pacc(pcom) dH = self._sampler._hamiltonian(fstate) - self._sampler._hamiltonian(istate) assert(csb.numeric.exp(-dH / self._sampler.temperature) == pacc) assert(pcom_fstate.momentum == None) pcom_fstate = fstate.clone() pcom = SimpleProposalCommunicator(istate.clone(), pcom_fstate) self._sampler.state.momentum = np.array([1.0, 4.0]) pacc = self._sampler._calc_pacc(pcom) dH = self._sampler._hamiltonian(fstate) - self._sampler._hamiltonian(istate) assert(csb.numeric.exp(-dH / self._sampler.temperature) == pacc) assert(np.all(pcom_fstate.momentum == np.array([1.0, 4.0])))
class TestHMCSampler(test.Case): def setUp(self): self._mass_matrix = InvertibleMatrix(np.array([[2.0, 0.0], [1.0, 3.0]])) self._initstate = State(np.array([1.0, 2.0])) self._sampler = MockedHMCSampler(pdf=SamplePDF(), state=self._initstate.clone(), gradient=SamplePDF().grad, timestep=0.3, nsteps=25, mass_matrix=self._mass_matrix) def testPropose(self): np.random.seed(5) initmom = np.random.multivariate_normal(mean=np.zeros( len(self._initstate.position)), cov=self._mass_matrix) self._sampler.state = self._initstate.clone() np.random.seed(5) res = self._sampler._propose() assert (np.all(res.current_state.position == self._initstate.position)) assert (np.all(res.current_state.momentum == initmom)) assert (np.all( res.proposal_state.position == self._initstate.position * 2.0)) assert (np.all(res.proposal_state.momentum == initmom * 2)) def testHamiltonian(self): state = State(np.array([1.0, 2.0]), np.array([2.0, 1.0])) assert (self._sampler._hamiltonian(state) == 3.5 - np.log(1.0 / (2.0 * np.pi))) def testCalcPacc(self): istate = State(np.array([1.0, 2.0]), np.array([2.0, 1.0])) fstate = State(np.array([1.0, 2.0]) * 2.0, np.array([2.0, 1.0]) * 2.0) pcom_fstate = fstate.clone() pcom = SimpleProposalCommunicator(istate.clone(), pcom_fstate) self._sampler.state.momentum = None pacc = self._sampler._calc_pacc(pcom) dH = self._sampler._hamiltonian(fstate) - self._sampler._hamiltonian( istate) assert (csb.numeric.exp(-dH / self._sampler.temperature) == pacc) assert (pcom_fstate.momentum == None) pcom_fstate = fstate.clone() pcom = SimpleProposalCommunicator(istate.clone(), pcom_fstate) self._sampler.state.momentum = np.array([1.0, 4.0]) pacc = self._sampler._calc_pacc(pcom) dH = self._sampler._hamiltonian(fstate) - self._sampler._hamiltonian( istate) assert (csb.numeric.exp(-dH / self._sampler.temperature) == pacc) assert (np.all(pcom_fstate.momentum == np.array([1.0, 4.0])))