67 #ifndef GUM_BN_DATABASE_GENERATOR 68 #define GUM_BN_DATABASE_GENERATOR 70 #include <agrum/BN/BayesNet.h> 71 #include <agrum/tools/core/progressNotification.h> 72 #include <agrum/tools/database/databaseTable.h> 78 template <
typename GUM_SCALAR >
79 class BNDatabaseGenerator:
public ProgressNotifier {
87 BNDatabaseGenerator(
const BayesNet< GUM_SCALAR >& bn);
90 ~BNDatabaseGenerator();
102 double drawSamples(Size nbSamples);
105 void toCSV(
const std::string& csvFileURL,
106 bool useLabels =
true,
108 std::string csvSeparator =
",",
109 bool checkOnAppend =
false)
const;
112 DatabaseTable<> toDatabaseTable(
bool useLabels =
true)
const;
116 std::vector< std::vector< Idx > > database()
const;
119 void setVarOrder(
const std::vector< Idx >& varOrder);
122 void setVarOrder(
const std::vector< std::string >& varOrder);
125 void setVarOrderFromCSV(
const std::string& csvFileURL,
126 const std::string& csvSeparator =
",");
129 void setTopologicalVarOrder();
132 void setAntiTopologicalVarOrder();
135 void setRandomVarOrder();
138 std::vector< Idx > varOrder()
const;
141 std::vector< std::string > varOrderNames()
const;
144 double log2likelihood()
const;
150 const BayesNet< GUM_SCALAR >& bn__;
153 Bijection< std::string, NodeId > names2ids__;
159 std::vector< std::vector< Idx > > database__;
162 std::vector< Idx > varOrder__;
165 bool drawnSamples__ =
false;
168 double log2likelihood__ = 0;
171 std::vector< Idx > varOrderFromCSV__(
const std::string& csvFileURL,
172 const std::string& csvSeparator
176 std::vector< Idx > varOrderFromCSV__(std::ifstream& csvFile,
177 const std::string& csvSeparator
181 BNDatabaseGenerator(
const BNDatabaseGenerator&) =
delete;
182 BNDatabaseGenerator(BNDatabaseGenerator&&) =
delete;
183 BNDatabaseGenerator& operator=(
const BNDatabaseGenerator&) =
delete;
184 BNDatabaseGenerator& operator=(BNDatabaseGenerator&&) =
delete;
188 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 189 extern template class BNDatabaseGenerator<
double >;
195 #include <agrum/BN/database/BNDatabaseGenerator_tpl.h>