compute expected error
parent
2463245ec2
commit
dc5c4cb99d
|
@ -217,15 +217,28 @@ TEST(HybridNonlinearFactorGraph, ErrorTree) {
|
||||||
Switching s(3);
|
Switching s(3);
|
||||||
|
|
||||||
HybridNonlinearFactorGraph graph = s.nonlinearFactorGraph;
|
HybridNonlinearFactorGraph graph = s.nonlinearFactorGraph;
|
||||||
|
Values values = s.linearizationPoint;
|
||||||
|
|
||||||
auto error_tree = graph.errorTree(s.linearizationPoint);
|
auto error_tree = graph.errorTree(s.linearizationPoint);
|
||||||
|
|
||||||
auto dkeys = graph.discreteKeys();
|
auto dkeys = graph.discreteKeys();
|
||||||
std::vector<DiscreteKey> discrete_keys(dkeys.begin(), dkeys.end());
|
DiscreteKeys discrete_keys(dkeys.begin(), dkeys.end());
|
||||||
std::vector<double> leaves = {152.79175946923, 151.59861228867,
|
|
||||||
151.70397280433, 151.60943791243};
|
// Compute the sum of errors for each factor.
|
||||||
|
auto assignments = DiscreteValues::CartesianProduct(discrete_keys);
|
||||||
|
std::vector<double> leaves(assignments.size());
|
||||||
|
for (auto &&factor : graph) {
|
||||||
|
for (size_t i = 0; i < assignments.size(); ++i) {
|
||||||
|
leaves[i] +=
|
||||||
|
factor->error(HybridValues(VectorValues(), assignments[i], values));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Swap i=1 and i=2 to give correct ordering.
|
||||||
|
double temp = leaves[1];
|
||||||
|
leaves[1] = leaves[2];
|
||||||
|
leaves[2] = temp;
|
||||||
AlgebraicDecisionTree<Key> expected_error(discrete_keys, leaves);
|
AlgebraicDecisionTree<Key> expected_error(discrete_keys, leaves);
|
||||||
// regression
|
|
||||||
EXPECT(assert_equal(expected_error, error_tree, 1e-7));
|
EXPECT(assert_equal(expected_error, error_tree, 1e-7));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue