Use brace initializers for DiscreteValues
parent
89cb910395
commit
d2fd155a3a
|
@ -25,10 +25,7 @@
|
|||
#include <gtsam/discrete/DecisionTree-inl.h> // for convert only
|
||||
#define DISABLE_TIMING
|
||||
|
||||
#include <boost/assign/std/map.hpp>
|
||||
#include <boost/assign/std/vector.hpp>
|
||||
#include <boost/tokenizer.hpp>
|
||||
using namespace boost::assign;
|
||||
|
||||
#include <CppUnitLite/TestHarness.h>
|
||||
#include <gtsam/base/timing.h>
|
||||
|
|
|
@ -27,9 +27,6 @@
|
|||
|
||||
#include <CppUnitLite/TestHarness.h>
|
||||
|
||||
#include <boost/assign/std/vector.hpp>
|
||||
using namespace boost::assign;
|
||||
|
||||
using namespace std;
|
||||
using namespace gtsam;
|
||||
|
||||
|
|
|
@ -23,9 +23,6 @@
|
|||
#include <gtsam/discrete/DiscreteDistribution.h>
|
||||
#include <gtsam/discrete/Signature.h>
|
||||
|
||||
#include <boost/assign/std/map.hpp>
|
||||
using namespace boost::assign;
|
||||
|
||||
using namespace std;
|
||||
using namespace gtsam;
|
||||
|
||||
|
|
|
@ -26,11 +26,6 @@
|
|||
#include <CppUnitLite/TestHarness.h>
|
||||
|
||||
|
||||
#include <boost/assign/list_inserter.hpp>
|
||||
#include <boost/assign/std/map.hpp>
|
||||
|
||||
using namespace boost::assign;
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
@ -115,11 +110,11 @@ TEST(DiscreteBayesNet, Asia) {
|
|||
EXPECT(assert_equal(expected2, *chordal->back()));
|
||||
|
||||
// now sample from it
|
||||
DiscreteValues expectedSample;
|
||||
DiscreteValues expectedSample{{Asia.first, 1}, {Dyspnea.first, 1},
|
||||
{XRay.first, 1}, {Tuberculosis.first, 0},
|
||||
{Smoking.first, 1}, {Either.first, 1},
|
||||
{LungCancer.first, 1}, {Bronchitis.first, 0}};
|
||||
SETDEBUG("DiscreteConditional::sample", false);
|
||||
insert(expectedSample)(Asia.first, 1)(Dyspnea.first, 1)(XRay.first, 1)(
|
||||
Tuberculosis.first, 0)(Smoking.first, 1)(Either.first, 1)(
|
||||
LungCancer.first, 1)(Bronchitis.first, 0);
|
||||
auto actualSample = chordal2->sample();
|
||||
EXPECT(assert_equal(expectedSample, actualSample));
|
||||
}
|
||||
|
|
|
@ -21,9 +21,6 @@
|
|||
#include <gtsam/discrete/DiscreteFactorGraph.h>
|
||||
#include <gtsam/inference/BayesNet.h>
|
||||
|
||||
#include <boost/assign/std/vector.hpp>
|
||||
using namespace boost::assign;
|
||||
|
||||
#include <CppUnitLite/TestHarness.h>
|
||||
|
||||
#include <iostream>
|
||||
|
|
|
@ -17,10 +17,7 @@
|
|||
* @date Feb 14, 2011
|
||||
*/
|
||||
|
||||
#include <boost/assign/std/map.hpp>
|
||||
#include <boost/assign/std/vector.hpp>
|
||||
#include <boost/make_shared.hpp>
|
||||
using namespace boost::assign;
|
||||
|
||||
#include <CppUnitLite/TestHarness.h>
|
||||
#include <gtsam/discrete/DecisionTreeFactor.h>
|
||||
|
|
|
@ -21,9 +21,6 @@
|
|||
#include <gtsam/base/serializationTestHelpers.h>
|
||||
#include <gtsam/discrete/DiscreteFactor.h>
|
||||
|
||||
#include <boost/assign/std/map.hpp>
|
||||
using namespace boost::assign;
|
||||
|
||||
using namespace std;
|
||||
using namespace gtsam;
|
||||
using namespace gtsam::serializationTestHelpers;
|
||||
|
|
|
@ -23,9 +23,6 @@
|
|||
|
||||
#include <CppUnitLite/TestHarness.h>
|
||||
|
||||
#include <boost/assign/std/map.hpp>
|
||||
using namespace boost::assign;
|
||||
|
||||
using namespace std;
|
||||
using namespace gtsam;
|
||||
|
||||
|
@ -49,9 +46,7 @@ TEST_UNSAFE(DiscreteFactorGraph, debugScheduler) {
|
|||
|
||||
// Check MPE.
|
||||
auto actualMPE = graph.optimize();
|
||||
DiscreteValues mpe;
|
||||
insert(mpe)(0, 2)(1, 1)(2, 0)(3, 0);
|
||||
EXPECT(assert_equal(mpe, actualMPE));
|
||||
EXPECT(assert_equal({{0, 2}, {1, 1}, {2, 0}, {3, 0}}, actualMPE));
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
|
@ -149,8 +144,7 @@ TEST(DiscreteFactorGraph, test) {
|
|||
EXPECT(assert_equal(expectedBayesNet, *actual2));
|
||||
|
||||
// Test mpe
|
||||
DiscreteValues mpe;
|
||||
insert(mpe)(0, 0)(1, 0)(2, 0);
|
||||
DiscreteValues mpe { {0, 0}, {1, 0}, {2, 0}};
|
||||
auto actualMPE = graph.optimize();
|
||||
EXPECT(assert_equal(mpe, actualMPE));
|
||||
EXPECT_DOUBLES_EQUAL(9, graph(mpe), 1e-5); // regression
|
||||
|
@ -182,8 +176,7 @@ TEST_UNSAFE(DiscreteFactorGraph, testMaxProduct) {
|
|||
graph.add(C & B, "0.1 0.9 0.4 0.6");
|
||||
|
||||
// Created expected MPE
|
||||
DiscreteValues mpe;
|
||||
insert(mpe)(0, 0)(1, 1)(2, 1);
|
||||
DiscreteValues mpe{{0, 0}, {1, 1}, {2, 1}};
|
||||
|
||||
// Do max-product with different orderings
|
||||
for (Ordering::OrderingType orderingType :
|
||||
|
@ -209,8 +202,7 @@ TEST(DiscreteFactorGraph, marginalIsNotMPE) {
|
|||
bayesNet.add(A % "10/9");
|
||||
|
||||
// The expected MPE is A=1, B=1
|
||||
DiscreteValues mpe;
|
||||
insert(mpe)(0, 1)(1, 1);
|
||||
DiscreteValues mpe { {0, 1}, {1, 1} };
|
||||
|
||||
// Which we verify using max-product:
|
||||
DiscreteFactorGraph graph(bayesNet);
|
||||
|
@ -240,8 +232,7 @@ TEST(DiscreteFactorGraph, testMPE_Darwiche09book_p244) {
|
|||
graph.add(T1 & T2 & A, "1 0 0 1 0 1 1 0");
|
||||
graph.add(A, "1 0"); // evidence, A = yes (first choice in Darwiche)
|
||||
|
||||
DiscreteValues mpe;
|
||||
insert(mpe)(4, 0)(2, 1)(3, 1)(0, 1)(1, 1);
|
||||
DiscreteValues mpe { {0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 0}};
|
||||
EXPECT_DOUBLES_EQUAL(0.33858, graph(mpe), 1e-5); // regression
|
||||
// You can check visually by printing product:
|
||||
// graph.product().print("Darwiche-product");
|
||||
|
@ -267,112 +258,6 @@ TEST(DiscreteFactorGraph, testMPE_Darwiche09book_p244) {
|
|||
EXPECT_LONGS_EQUAL(2, bayesTree->size());
|
||||
}
|
||||
|
||||
#ifdef OLD
|
||||
|
||||
/* ************************************************************************* */
|
||||
/**
|
||||
* Key type for discrete conditionals
|
||||
* Includes name and cardinality
|
||||
*/
|
||||
class Key2 {
|
||||
private:
|
||||
std::string wff_;
|
||||
size_t cardinality_;
|
||||
public:
|
||||
/** Constructor, defaults to binary */
|
||||
Key2(const std::string& name, size_t cardinality = 2) :
|
||||
wff_(name), cardinality_(cardinality) {
|
||||
}
|
||||
const std::string& name() const {
|
||||
return wff_;
|
||||
}
|
||||
|
||||
/** provide streaming */
|
||||
friend std::ostream& operator <<(std::ostream &os, const Key2 &key);
|
||||
};
|
||||
|
||||
struct Factor2 {
|
||||
std::string wff_;
|
||||
Factor2() :
|
||||
wff_("@") {
|
||||
}
|
||||
Factor2(const std::string& s) :
|
||||
wff_(s) {
|
||||
}
|
||||
Factor2(const Key2& key) :
|
||||
wff_(key.name()) {
|
||||
}
|
||||
|
||||
friend std::ostream& operator <<(std::ostream &os, const Factor2 &f);
|
||||
friend Factor2 operator -(const Key2& key);
|
||||
};
|
||||
|
||||
std::ostream& operator <<(std::ostream &os, const Factor2 &f) {
|
||||
os << f.wff_;
|
||||
return os;
|
||||
}
|
||||
|
||||
/** negation */
|
||||
Factor2 operator -(const Key2& key) {
|
||||
return Factor2("-" + key.name());
|
||||
}
|
||||
|
||||
/** OR */
|
||||
Factor2 operator ||(const Factor2 &factor1, const Factor2 &factor2) {
|
||||
return Factor2(std::string("(") + factor1.wff_ + " || " + factor2.wff_ + ")");
|
||||
}
|
||||
|
||||
/** AND */
|
||||
Factor2 operator &&(const Factor2 &factor1, const Factor2 &factor2) {
|
||||
return Factor2(std::string("(") + factor1.wff_ + " && " + factor2.wff_ + ")");
|
||||
}
|
||||
|
||||
/** implies */
|
||||
Factor2 operator >>(const Factor2 &factor1, const Factor2 &factor2) {
|
||||
return Factor2(std::string("(") + factor1.wff_ + " >> " + factor2.wff_ + ")");
|
||||
}
|
||||
|
||||
struct Graph2: public std::list<Factor2> {
|
||||
|
||||
/** Add a factor graph*/
|
||||
// void operator +=(const Graph2& graph) {
|
||||
// for(const Factor2& f: graph)
|
||||
// push_back(f);
|
||||
// }
|
||||
friend std::ostream& operator <<(std::ostream &os, const Graph2& graph);
|
||||
|
||||
};
|
||||
|
||||
/** Add a factor */
|
||||
//Graph2 operator +=(Graph2& graph, const Factor2& factor) {
|
||||
// graph.push_back(factor);
|
||||
// return graph;
|
||||
//}
|
||||
std::ostream& operator <<(std::ostream &os, const Graph2& graph) {
|
||||
for(const Factor2& f: graph)
|
||||
os << f << endl;
|
||||
return os;
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
TEST(DiscreteFactorGraph, Sugar)
|
||||
{
|
||||
Key2 M("Mythical"), I("Immortal"), A("Mammal"), H("Horned"), G("Magical");
|
||||
|
||||
// Test this desired construction
|
||||
Graph2 unicorns;
|
||||
unicorns += M >> -A;
|
||||
unicorns += (-M) >> (-I && A);
|
||||
unicorns += (I || A) >> H;
|
||||
unicorns += H >> G;
|
||||
|
||||
// should be done by adapting boost::assign:
|
||||
// unicorns += (-M) >> (-I && A), (I || A) >> H , H >> G;
|
||||
|
||||
cout << unicorns;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* ************************************************************************* */
|
||||
TEST(DiscreteFactorGraph, Dot) {
|
||||
// Create Factor graph
|
||||
|
|
|
@ -20,11 +20,7 @@
|
|||
#include <gtsam/base/Testable.h>
|
||||
#include <gtsam/discrete/DiscreteLookupDAG.h>
|
||||
|
||||
#include <boost/assign/list_inserter.hpp>
|
||||
#include <boost/assign/std/map.hpp>
|
||||
|
||||
using namespace gtsam;
|
||||
using namespace boost::assign;
|
||||
|
||||
/* ************************************************************************* */
|
||||
TEST(DiscreteLookupDAG, argmax) {
|
||||
|
@ -43,8 +39,7 @@ TEST(DiscreteLookupDAG, argmax) {
|
|||
dag.add(1, DiscreteKeys{A}, adtA);
|
||||
|
||||
// The expected MPE is A=1, B=1
|
||||
DiscreteValues mpe;
|
||||
insert(mpe)(0, 1)(1, 1);
|
||||
DiscreteValues mpe{{0, 1}, {1, 1}};
|
||||
|
||||
// check:
|
||||
auto actualMPE = dag.argmax();
|
||||
|
|
|
@ -19,9 +19,6 @@
|
|||
|
||||
#include <gtsam/discrete/DiscreteMarginals.h>
|
||||
|
||||
#include <boost/assign/std/vector.hpp>
|
||||
using namespace boost::assign;
|
||||
|
||||
#include <CppUnitLite/TestHarness.h>
|
||||
|
||||
using namespace std;
|
||||
|
|
|
@ -21,9 +21,6 @@
|
|||
#include <gtsam/discrete/DiscreteValues.h>
|
||||
#include <gtsam/discrete/Signature.h>
|
||||
|
||||
#include <boost/assign/std/map.hpp>
|
||||
using namespace boost::assign;
|
||||
|
||||
using namespace std;
|
||||
using namespace gtsam;
|
||||
|
||||
|
|
|
@ -21,12 +21,10 @@
|
|||
#include <gtsam/base/Testable.h>
|
||||
#include <gtsam/discrete/Signature.h>
|
||||
|
||||
#include <boost/assign/std/vector.hpp>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
using namespace gtsam;
|
||||
using namespace boost::assign;
|
||||
|
||||
DiscreteKey X(0, 2), Y(1, 3), Z(2, 2);
|
||||
|
||||
|
@ -57,12 +55,8 @@ TEST(testSignature, simple_conditional) {
|
|||
|
||||
/* ************************************************************************* */
|
||||
TEST(testSignature, simple_conditional_nonparser) {
|
||||
Signature::Table table;
|
||||
Signature::Row row1, row2, row3;
|
||||
row1 += 1.0, 1.0;
|
||||
row2 += 2.0, 3.0;
|
||||
row3 += 1.0, 4.0;
|
||||
table += row1, row2, row3;
|
||||
Signature::Row row1{1, 1}, row2{2, 3}, row3{1, 4};
|
||||
Signature::Table table{row1, row2, row3};
|
||||
|
||||
Signature sig(X | Y = table);
|
||||
CHECK(sig.key() == X);
|
||||
|
|
|
@ -12,14 +12,11 @@
|
|||
#include <gtsam/base/debug.h>
|
||||
#include <gtsam/base/timing.h>
|
||||
|
||||
#include <boost/assign/std/vector.hpp>
|
||||
#include <boost/assign/std/map.hpp>
|
||||
#include <boost/optional.hpp>
|
||||
#include <boost/format.hpp>
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
using namespace boost::assign;
|
||||
using namespace std;
|
||||
using namespace gtsam;
|
||||
|
||||
|
|
|
@ -12,14 +12,11 @@
|
|||
#include <gtsam/base/debug.h>
|
||||
#include <gtsam/base/timing.h>
|
||||
|
||||
#include <boost/assign/std/vector.hpp>
|
||||
#include <boost/assign/std/map.hpp>
|
||||
#include <boost/optional.hpp>
|
||||
#include <boost/format.hpp>
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
using namespace boost::assign;
|
||||
using namespace std;
|
||||
using namespace gtsam;
|
||||
|
||||
|
|
|
@ -12,14 +12,11 @@
|
|||
#include <gtsam/base/debug.h>
|
||||
#include <gtsam/base/timing.h>
|
||||
|
||||
#include <boost/assign/std/vector.hpp>
|
||||
#include <boost/assign/std/map.hpp>
|
||||
#include <boost/optional.hpp>
|
||||
#include <boost/format.hpp>
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
using namespace boost::assign;
|
||||
using namespace std;
|
||||
using namespace gtsam;
|
||||
|
||||
|
|
|
@ -8,8 +8,6 @@
|
|||
#include <gtsam_unstable/discrete/CSP.h>
|
||||
#include <gtsam_unstable/discrete/Domain.h>
|
||||
|
||||
#include <boost/assign/std/map.hpp>
|
||||
using boost::assign::insert;
|
||||
#include <CppUnitLite/TestHarness.h>
|
||||
|
||||
#include <fstream>
|
||||
|
@ -133,8 +131,7 @@ TEST(CSP, allInOne) {
|
|||
|
||||
// Solve
|
||||
auto mpe = csp.optimize();
|
||||
DiscreteValues expected;
|
||||
insert(expected)(ID.first, 1)(UT.first, 0)(AZ.first, 1);
|
||||
DiscreteValues expected {{ID.first, 1}, {UT.first, 0}, {AZ.first, 1}};
|
||||
EXPECT(assert_equal(expected, mpe));
|
||||
EXPECT_DOUBLES_EQUAL(1, csp(mpe), 1e-9);
|
||||
}
|
||||
|
@ -172,8 +169,8 @@ TEST(CSP, WesternUS) {
|
|||
csp.addAllDiff(WY, CO);
|
||||
csp.addAllDiff(CO, NM);
|
||||
|
||||
DiscreteValues mpe;
|
||||
insert(mpe)(0, 2)(1, 3)(2, 2)(3, 1)(4, 1)(5, 3)(6, 3)(7, 2)(8, 0)(9, 1)(10, 0);
|
||||
DiscreteValues mpe{{0, 2}, {1, 3}, {2, 2}, {3, 1}, {4, 1}, {5, 3},
|
||||
{6, 3}, {7, 2}, {8, 0}, {9, 1}, {10, 0}};
|
||||
|
||||
// Create ordering according to example in ND-CSP.lyx
|
||||
Ordering ordering;
|
||||
|
@ -224,8 +221,7 @@ TEST(CSP, ArcConsistency) {
|
|||
|
||||
// Solve
|
||||
auto mpe = csp.optimize();
|
||||
DiscreteValues expected;
|
||||
insert(expected)(ID.first, 1)(UT.first, 0)(AZ.first, 2);
|
||||
DiscreteValues expected {{ID.first, 1}, {UT.first, 0}, {AZ.first, 2}};
|
||||
EXPECT(assert_equal(expected, mpe));
|
||||
EXPECT_DOUBLES_EQUAL(1, csp(mpe), 1e-9);
|
||||
|
||||
|
|
|
@ -10,11 +10,8 @@
|
|||
#include <gtsam/base/timing.h>
|
||||
#include <gtsam_unstable/discrete/Scheduler.h>
|
||||
|
||||
#include <boost/assign/std/map.hpp>
|
||||
#include <boost/assign/std/vector.hpp>
|
||||
#include <boost/optional.hpp>
|
||||
|
||||
using namespace boost::assign;
|
||||
using namespace std;
|
||||
using namespace gtsam;
|
||||
|
||||
|
|
|
@ -9,8 +9,6 @@
|
|||
#include <gtsam/inference/Symbol.h>
|
||||
#include <gtsam_unstable/discrete/CSP.h>
|
||||
|
||||
#include <boost/assign/std/map.hpp>
|
||||
using boost::assign::insert;
|
||||
#include <stdarg.h>
|
||||
|
||||
#include <iostream>
|
||||
|
@ -128,11 +126,14 @@ TEST(Sudoku, small) {
|
|||
// optimize and check
|
||||
auto solution = csp.optimize();
|
||||
DiscreteValues expected;
|
||||
insert(expected)(csp.key(0, 0), 0)(csp.key(0, 1), 1)(csp.key(0, 2), 2)(
|
||||
csp.key(0, 3), 3)(csp.key(1, 0), 2)(csp.key(1, 1), 3)(csp.key(1, 2), 0)(
|
||||
csp.key(1, 3), 1)(csp.key(2, 0), 3)(csp.key(2, 1), 2)(csp.key(2, 2), 1)(
|
||||
csp.key(2, 3), 0)(csp.key(3, 0), 1)(csp.key(3, 1), 0)(csp.key(3, 2), 3)(
|
||||
csp.key(3, 3), 2);
|
||||
expected = {{csp.key(0, 0), 0}, {csp.key(0, 1), 1},
|
||||
{csp.key(0, 2), 2}, {csp.key(0, 3), 3}, //
|
||||
{csp.key(1, 0), 2}, {csp.key(1, 1), 3},
|
||||
{csp.key(1, 2), 0}, {csp.key(1, 3), 1}, //
|
||||
{csp.key(2, 0), 3}, {csp.key(2, 1), 2},
|
||||
{csp.key(2, 2), 1}, {csp.key(2, 3), 0}, //
|
||||
{csp.key(3, 0), 1}, {csp.key(3, 1), 0},
|
||||
{csp.key(3, 2), 3}, {csp.key(3, 3), 2}};
|
||||
EXPECT(assert_equal(expected, solution));
|
||||
// csp.printAssignment(solution);
|
||||
|
||||
|
|
Loading…
Reference in New Issue