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)
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)