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])))
示例#2
0
文件: __init__.py 项目: khasinski/csb
    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])))
示例#3
0
文件: __init__.py 项目: khasinski/csb
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])))