Show that ratio is different for different modes.
parent
391d6fb70a
commit
6b2a8a9323
|
@ -142,12 +142,21 @@ class TestHybridGaussianFactorGraph(GtsamTestCase):
|
||||||
|
|
||||||
self.assertEqual(fg.size(), 3)
|
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):
|
def test_tiny2(self):
|
||||||
"""Test a tiny two variable hybrid model, with 2 measurements."""
|
"""Test a tiny two variable hybrid model, with 2 measurements."""
|
||||||
# Create the Bayes net and sample from it.
|
# Create the Bayes net and sample from it.
|
||||||
bayesNet = self.tiny(num_measurements=2)
|
bayesNet = self.tiny(num_measurements=2)
|
||||||
sample = bayesNet.sample()
|
sample = bayesNet.sample()
|
||||||
# print(sample)
|
print(sample)
|
||||||
|
|
||||||
# Create a factor graph from the Bayes net with sampled measurements.
|
# Create a factor graph from the Bayes net with sampled measurements.
|
||||||
fg = HybridGaussianFactorGraph()
|
fg = HybridGaussianFactorGraph()
|
||||||
|
@ -160,17 +169,26 @@ class TestHybridGaussianFactorGraph(GtsamTestCase):
|
||||||
fg.push_back(bayesNet.atGaussian(2))
|
fg.push_back(bayesNet.atGaussian(2))
|
||||||
fg.push_back(bayesNet.atDiscrete(3))
|
fg.push_back(bayesNet.atDiscrete(3))
|
||||||
|
|
||||||
|
print(fg)
|
||||||
self.assertEqual(fg.size(), 4)
|
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__":
|
if __name__ == "__main__":
|
||||||
|
|
Loading…
Reference in New Issue