Synced two examples
parent
064f17b369
commit
312ba5fd52
|
@ -81,7 +81,7 @@ HybridGaussianFactorGraph createHybridGaussianFactorGraph(
|
||||||
// Create a deterministic set of measurements:
|
// Create a deterministic set of measurements:
|
||||||
HybridValues values{{}, {{M(0), 0}}};
|
HybridValues values{{}, {{M(0), 0}}};
|
||||||
for (int i = 0; i < num_measurements; i++) {
|
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);
|
return convertBayesNet(bayesNet, values);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -110,7 +110,7 @@ class TestHybridGaussianFactorGraph(GtsamTestCase):
|
||||||
[conditional0, conditional1])
|
[conditional0, conditional1])
|
||||||
|
|
||||||
# Create prior on X(0).
|
# 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)
|
bayesNet.addGaussian(prior_on_x0)
|
||||||
|
|
||||||
# Add prior on mode.
|
# Add prior on mode.
|
||||||
|
@ -203,8 +203,14 @@ class TestHybridGaussianFactorGraph(GtsamTestCase):
|
||||||
sample: HybridValues = bayesNet.sample()
|
sample: HybridValues = bayesNet.sample()
|
||||||
# print(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.
|
# 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"True mode: {sample.atDiscrete(M(0))}")
|
||||||
print(f"P(mode=0; z0, z1) = {marginals[0]}")
|
print(f"P(mode=0; z0, z1) = {marginals[0]}")
|
||||||
print(f"P(mode=1; z0, z1) = {marginals[1]}")
|
print(f"P(mode=1; z0, z1) = {marginals[1]}")
|
||||||
|
@ -220,11 +226,20 @@ class TestHybridGaussianFactorGraph(GtsamTestCase):
|
||||||
|
|
||||||
# Create measurements from the sample.
|
# Create measurements from the sample.
|
||||||
measurements = self.measurements(sample, [0, 1])
|
measurements = self.measurements(sample, [0, 1])
|
||||||
|
print(measurements)
|
||||||
|
|
||||||
# Calculate ratio between Bayes net probability and the factor graph:
|
# Calculate ratio between Bayes net probability and the factor graph:
|
||||||
expected_ratio = self.calculate_ratio(bayesNet, fg, sample)
|
expected_ratio = self.calculate_ratio(bayesNet, fg, sample)
|
||||||
# print(f"expected_ratio: {expected_ratio}\n")
|
# 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.
|
# Check with a number of other samples.
|
||||||
for i in range(10):
|
for i in range(10):
|
||||||
other = bayesNet.sample()
|
other = bayesNet.sample()
|
||||||
|
|
Loading…
Reference in New Issue