32 using namespace gtsam;
49 CHECK(bayesNet.
at(0)->asDiscrete());
81 auto fg = bn.toFactorGraph(
vv);
85 std::vector<double>
ratio(2);
86 for (
size_t mode : {0, 1}) {
96 const auto continuousConditional = GaussianConditional::sharedMeanAndStddev(
97 X(0), 2 * I_1x1,
X(1),
Vector1(-4.0), 5.0);
102 const auto conditional0 = std::make_shared<GaussianConditional>(
103 X(1), Vector1::Constant(5), I_1x1, model0),
104 conditional1 = std::make_shared<GaussianConditional>(
105 X(1), Vector1::Constant(2), I_1x1,
model1);
109 bayesNet.
push_back(continuousConditional);
120 const double conditionalProbability =
121 continuousConditional->evaluate(
values.continuous());
122 const double mixtureProbability = conditional0->evaluate(
values.continuous());
134 const auto [hybridBayesNet, remainingFactorGraph] =
135 s.linearizedFactorGraph.eliminatePartialSequential(
ordering);
138 assignment[
M(0)] = 1;
139 assignment[
M(1)] = 1;
140 assignment[
M(2)] = 0;
159 const auto continuousConditional = GaussianConditional::sharedMeanAndStddev(
160 X(0), 2 * I_1x1,
X(1),
Vector1(-4.0), 5.0);
165 const auto conditional0 = std::make_shared<GaussianConditional>(
166 X(1), Vector1::Constant(5), I_1x1, model0),
167 conditional1 = std::make_shared<GaussianConditional>(
168 X(1), Vector1::Constant(2), I_1x1,
model1);
174 bayesNet.
push_back(continuousConditional);
175 bayesNet.emplace_back(gm);
185 bayesNet.errorTree(
values.continuous());
190 {
Asia}, std::vector<double>{2.33005033585, 5.38619084965});
202 const auto [hybridBayesNet, remainingFactorGraph] =
203 s.linearizedFactorGraph.eliminatePartialSequential(
ordering);
206 assignment[
M(0)] = 1;
207 assignment[
M(1)] = 1;
208 assignment[
M(2)] = 1;
216 expected_delta.
insert(make_pair(
X(0), -Vector1::Ones()));
217 expected_delta.
insert(make_pair(
X(1), -Vector1::Ones()));
218 expected_delta.
insert(make_pair(
X(2), -Vector1::Ones()));
219 expected_delta.
insert(make_pair(
X(3), -Vector1::Ones()));
227 Switching s(4, 1.0, 0.1, {0, 1, 2, 3},
"1/1 1/1");
230 s.linearizedFactorGraph.eliminateSequential();
236 expectedAssignment[
M(0)] = 1;
237 expectedAssignment[
M(1)] = 1;
238 expectedAssignment[
M(2)] = 1;
242 expectedValues.
insert(
X(0), -Vector1::Ones());
243 expectedValues.
insert(
X(1), -Vector1::Ones());
244 expectedValues.
insert(
X(2), -Vector1::Ones());
245 expectedValues.
insert(
X(3), -Vector1::Ones());
256 s.linearizedFactorGraph.eliminateSequential();
260 auto actualTree = posterior->evaluate(
delta.continuous());
263 std::vector<DiscreteKey> discrete_keys = {{
M(0), 2}, {
M(1), 2}};
264 std::vector<double> leaves = {6.1112424, 20.346113, 17.785849, 19.738098};
269 auto prunedBayesNet = posterior->prune(2);
270 auto prunedTree = prunedBayesNet.evaluate(
delta.continuous());
273 std::vector<double> pruned_leaves = {0.0, 32.713418, 0.0, 31.735823};
280 double logProbability = 0;
281 logProbability += posterior->at(0)->asMixture()->logProbability(hybridValues);
282 logProbability += posterior->at(1)->asMixture()->logProbability(hybridValues);
283 logProbability += posterior->at(2)->asMixture()->logProbability(hybridValues);
286 posterior->at(3)->asDiscrete()->logProbability(hybridValues);
288 posterior->at(4)->asDiscrete()->logProbability(hybridValues);
293 1.6078460548731697 * actualTree(discrete_values), 1
e-6);
305 s.linearizedFactorGraph.eliminateSequential();
310 auto prunedBayesNet = posterior->prune(2);
323 s.linearizedFactorGraph.eliminateSequential();
326 size_t maxNrLeaves = 3;
328 for (
auto&& conditional : *posterior) {
329 if (conditional->isDiscrete()) {
330 discreteConditionals =
331 discreteConditionals * (*conditional->asDiscrete());
335 std::make_shared<DecisionTreeFactor>(
336 discreteConditionals.
prune(maxNrLeaves));
338 #ifdef GTSAM_DT_MERGING
340 prunedDecisionTree->nrLeaves());
348 dkeys, std::vector<double>{0, 0, 0, 0.505145423, 0, 1, 0, 0.494854577});
352 posterior->prune(maxNrLeaves);
356 double probability) ->
double {
359 if (prunedDecisionTree->operator()(choices) == 0) {
369 auto pruned_discrete_conditionals = posterior->at(4)->asDiscrete();
370 auto discrete_conditional_tree =
371 std::dynamic_pointer_cast<DecisionTreeFactor::ADT>(
372 pruned_discrete_conditionals);
375 discrete_conditional_tree->apply(checker);
383 auto noise_model = noiseModel::Diagonal::Sigmas(
Vector1(1.0));
385 std::make_shared<BetweenFactor<double>>(
X(0),
X(1), 0, noise_model);
387 std::make_shared<BetweenFactor<double>>(
X(0),
X(1), 1, noise_model);
388 std::vector<NonlinearFactor::shared_ptr>
factors = {zero_motion, one_motion};
397 double z0 = 0.0,
z1 = 1.0;
407 std::mt19937_64 gen(11);
410 vector<double> discrete_samples;
413 size_t num_samples = 1000;
414 for (
size_t i = 0;
i < num_samples;
i++) {
418 discrete_samples.push_back(sample.
discrete().at(
M(0)));