Show that ratio is different for different modes.
							parent
							
								
									391d6fb70a
								
							
						
					
					
						commit
						6b2a8a9323
					
				| 
						 | 
				
			
			@ -142,12 +142,21 @@ class TestHybridGaussianFactorGraph(GtsamTestCase):
 | 
			
		|||
 | 
			
		||||
        self.assertEqual(fg.size(), 3)
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def calculate_ratio(bayesNet, fg, sample):
 | 
			
		||||
        """Calculate ratio  between Bayes net probability and the factor graph."""
 | 
			
		||||
        continuous = gtsam.VectorValues()
 | 
			
		||||
        continuous.insert(X(0), sample.at(X(0)))
 | 
			
		||||
        return bayesNet.evaluate(sample) / fg.probPrime(
 | 
			
		||||
            continuous, sample.discrete()
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def test_tiny2(self):
 | 
			
		||||
        """Test a tiny two variable hybrid model, with 2 measurements."""
 | 
			
		||||
        # Create the Bayes net and sample from it.
 | 
			
		||||
        bayesNet = self.tiny(num_measurements=2)
 | 
			
		||||
        sample = bayesNet.sample()
 | 
			
		||||
        # print(sample)
 | 
			
		||||
        print(sample)
 | 
			
		||||
 | 
			
		||||
        # Create a factor graph from the Bayes net with sampled measurements.
 | 
			
		||||
        fg = HybridGaussianFactorGraph()
 | 
			
		||||
| 
						 | 
				
			
			@ -160,17 +169,26 @@ class TestHybridGaussianFactorGraph(GtsamTestCase):
 | 
			
		|||
        fg.push_back(bayesNet.atGaussian(2))
 | 
			
		||||
        fg.push_back(bayesNet.atDiscrete(3))
 | 
			
		||||
 | 
			
		||||
        print(fg)
 | 
			
		||||
        self.assertEqual(fg.size(), 4)
 | 
			
		||||
        # Calculate ratio  between Bayes net probability and the factor graph:
 | 
			
		||||
        continuousValues = gtsam.VectorValues()
 | 
			
		||||
        continuousValues.insert(X(0), sample.at(X(0)))
 | 
			
		||||
        discreteValues = sample.discrete()
 | 
			
		||||
        expected_ratio = bayesNet.evaluate(sample) / fg.probPrime(
 | 
			
		||||
            continuousValues, discreteValues
 | 
			
		||||
        )
 | 
			
		||||
        print(expected_ratio)
 | 
			
		||||
 | 
			
		||||
        # TODO(dellaert): Change the mode to 0 and calculate the ratio again.
 | 
			
		||||
        # Calculate ratio between Bayes net probability and the factor graph:
 | 
			
		||||
        expected_ratio = self.calculate_ratio(bayesNet, fg, sample)
 | 
			
		||||
        print(f"expected_ratio: {expected_ratio}\n")
 | 
			
		||||
 | 
			
		||||
        # Create measurements from the sample.
 | 
			
		||||
        measurements = gtsam.VectorValues()
 | 
			
		||||
        for i in range(2):
 | 
			
		||||
            measurements.insert(Z(i), sample.at(Z(i)))
 | 
			
		||||
 | 
			
		||||
        # Check with a number of other samples.
 | 
			
		||||
        for i in range(10):
 | 
			
		||||
            other = bayesNet.sample()
 | 
			
		||||
            other.update(measurements)
 | 
			
		||||
            print(other)
 | 
			
		||||
            ratio = self.calculate_ratio(bayesNet, fg, other)
 | 
			
		||||
            print(f"Ratio: {ratio}\n")
 | 
			
		||||
            self.assertAlmostEqual(ratio, expected_ratio)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue