Synced two examples

release/4.3a0
Frank Dellaert 2023-01-02 09:45:04 -05:00
parent 064f17b369
commit 312ba5fd52
2 changed files with 18 additions and 3 deletions

View File

@ -81,7 +81,7 @@ HybridGaussianFactorGraph createHybridGaussianFactorGraph(
// Create a deterministic set of measurements:
HybridValues values{{}, {{M(0), 0}}};
for (int i = 0; i < num_measurements; i++) {
values.insert(Z(i), Vector1(5.0 + 1.0 * i));
values.insert(Z(i), Vector1(5.0 + 0.1 * i));
}
return convertBayesNet(bayesNet, values);
} else {

View File

@ -110,7 +110,7 @@ class TestHybridGaussianFactorGraph(GtsamTestCase):
[conditional0, conditional1])
# Create prior on X(0).
prior_on_x0 = GaussianConditional.FromMeanAndStddev(X(0), [5.0], 5.0)
prior_on_x0 = GaussianConditional.FromMeanAndStddev(X(0), [5.0], 0.5)
bayesNet.addGaussian(prior_on_x0)
# Add prior on mode.
@ -203,8 +203,14 @@ class TestHybridGaussianFactorGraph(GtsamTestCase):
sample: HybridValues = bayesNet.sample()
# print(sample)
# Deterministic measurements:
deterministic = gtsam.VectorValues()
deterministic.insert(Z(0), [5.0])
deterministic.insert(Z(1), [5.1])
sample.update(deterministic)
# Estimate marginals using importance sampling.
marginals = self.estimate_marginals(bayesNet, sample)
marginals = self.estimate_marginals(bayesNet, sample, N=10000)
print(f"True mode: {sample.atDiscrete(M(0))}")
print(f"P(mode=0; z0, z1) = {marginals[0]}")
print(f"P(mode=1; z0, z1) = {marginals[1]}")
@ -220,11 +226,20 @@ class TestHybridGaussianFactorGraph(GtsamTestCase):
# Create measurements from the sample.
measurements = self.measurements(sample, [0, 1])
print(measurements)
# 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")
# Print conditional and factor values side by side:
print("\nConditional and factor values:")
for i in range(4):
print(f"Conditional {i}:")
print(bayesNet.at(i).error(sample))
print(f"Factor {i}:")
print(fg.at(i).error(sample))
# Check with a number of other samples.
for i in range(10):
other = bayesNet.sample()