Exemple #1
0
 def test_proposal_generation_snooker(self):
     """Test that proposal generation with a snooker update returns values of the expected shape."""
     self.param, self.like = multidmodel()
     model = Model(self.like, self.param)
     step = Dream(model=model)
     history_arr = mp.Array('d', list(range(120)))
     n = mp.Value('i', 0)
     pydream.Dream_shared_vars.history = history_arr
     pydream.Dream_shared_vars.count = n
     step.nseedchains = 20
     q0 = np.array([2, 3, 4, 5])
     proposed_pt, snooker_logp, z = step.generate_proposal_points(
         n_proposed_pts=1,
         q0=q0,
         CR=1,
         DEpairs=1,
         gamma_level=1,
         snooker=True)
     self.assertEqual(len(proposed_pt), step.total_var_dimension)
     proposed_pts, snooker_logp, z = step.generate_proposal_points(
         n_proposed_pts=5,
         q0=q0,
         CR=1,
         DEpairs=1,
         gamma_level=1,
         snooker=True)
     self.assertEqual(len(proposed_pts), 5)
Exemple #2
0
 def test_proposal_generation_nosnooker_CR66(self):
     """Test proposal generation without a snooker update with a single or multiple proposed points and a crossover value of 2/3 gives 2/3 of all dimensions changed on average as expected."""
     self.param, self.like = multidmodel()
     model = Model(self.like, self.param)
     step = Dream(model=model)
     history_arr = mp.Array('d', list(range(120)))
     n = mp.Value('i', 0)
     pydream.Dream_shared_vars.history = history_arr
     pydream.Dream_shared_vars.count = n
     step.nseedchains = 20
     q0 = np.array([2, 3, 4, 5])
     dims_kept = 0
     for iteration in range(100000):
         proposed_pt = step.generate_proposal_points(n_proposed_pts=1, q0=q0, CR=.66, DEpairs=1, gamma_level=1, snooker=False)
         if iteration == 1:
             self.assertEqual(len(proposed_pt), 1)
         dims_change_vec = np.squeeze(q0 == proposed_pt)
         for dim in dims_change_vec:
             if dim:
                 dims_kept += 1
     frac_kept = dims_kept/(step.total_var_dimension*100000.0)
     self.assertAlmostEqual(frac_kept, 1-.66, places=1)
     dims_kept = 0
     for iteration in range(10000): 
         proposed_pts = step.generate_proposal_points(n_proposed_pts=5, q0=q0, CR=.66, DEpairs=1, gamma_level=1, snooker=False)
         if iteration == 1:
             self.assertEqual(len(proposed_pts), 5)
         for pt in proposed_pts:
             dims_change_vec = (q0 == pt)
             for dim in dims_change_vec:
                 if dim:
                     dims_kept += 1
     frac_kept = dims_kept/(step.total_var_dimension*10000.0*5)
     self.assertAlmostEqual(frac_kept, 1-.66, places=1)