22 #ifndef __CREDAL_NET__H__ 23 #define __CREDAL_NET__H__ 31 #include <agrum/agrum.h> 39 # include <agrum/tools/core/mvsc/unistd.h> 54 #include <agrum/tools/core/math/math_utils.h> 55 #include <agrum/BN/BayesNet.h> 56 #include <agrum/BN/io/BIF/BIFReader.h> 57 #include <agrum/BN/io/BIF/BIFWriter.h> 58 #include <agrum/tools/core/exceptions.h> 60 #include <agrum/tools/core/math/pow.h> 61 #include <agrum/tools/core/math/rational.h> 63 #include <agrum/CN/polytope/LrsWrapper.h> 65 #include <agrum/tools/core/OMPThreads.h> 69 typedef __int64 int64_t;
70 typedef unsigned __int64 uint64_t;
87 template <
typename GUM_SCALAR >
91 enum class NodeType :
char 122 CredalNet(
const std::string& src_min_num,
123 const std::string& src_max_den =
"");
137 CredalNet(
const BayesNet< GUM_SCALAR >& src_min_num,
138 const BayesNet< GUM_SCALAR >& src_max_den
139 = BayesNet< GUM_SCALAR >());
157 NodeId addVariable(
const std::string& name,
const Size& card);
164 void addArc(
const NodeId& tail,
const NodeId& head);
185 const std::vector< std::vector< std::vector< GUM_SCALAR > > >& cpt);
207 void setCPT(
const NodeId& id,
209 const std::vector< std::vector< GUM_SCALAR > >& cpt);
231 void setCPT(
const NodeId& id,
233 const std::vector< std::vector< GUM_SCALAR > >& cpt);
249 void fillConstraints(
const NodeId& id,
250 const std::vector< GUM_SCALAR >& lower,
251 const std::vector< GUM_SCALAR >& upper);
269 void fillConstraint(
const NodeId& id,
271 const std::vector< GUM_SCALAR >& lower,
272 const std::vector< GUM_SCALAR >& upper);
290 void fillConstraint(
const NodeId& id,
292 const std::vector< GUM_SCALAR >& lower,
293 const std::vector< GUM_SCALAR >& upper);
301 Instantiation instantiation(
const NodeId& id);
308 Size domainSize(
const NodeId& id);
340 void bnToCredal(
const GUM_SCALAR beta,
342 const bool keepZeroes =
false);
353 void intervalToCredalWithFiles();
362 void intervalToCredal();
376 void lagrangeNormalization();
389 void idmLearning(
const Idx s = 0,
const bool keepZeroes =
false);
401 void approximatedBinarization();
422 void saveBNsMinMax(
const std::string& min_path,
423 const std::string& max_path)
const;
434 std::string toString()
const;
445 void computeBinaryCPTMinMax();
454 const BayesNet< GUM_SCALAR >& src_bn()
const;
461 const BayesNet< GUM_SCALAR >& current_bn()
const;
468 std::vector< std::vector< std::vector< GUM_SCALAR > > > >&
469 credalNet_currentCpt()
const;
476 std::vector< std::vector< std::vector< GUM_SCALAR > > > >&
477 credalNet_srcCpt()
const;
485 NodeType currentNodeType(
const NodeId& id)
const;
493 NodeType nodeType(
const NodeId& id)
const;
499 const GUM_SCALAR& epsilonMin()
const;
505 const GUM_SCALAR& epsilonMax()
const;
511 const GUM_SCALAR& epsilonMean()
const;
517 const bool isSeparatelySpecified()
const;
525 const bool hasComputedBinaryCPTMinMax()
const;
535 const std::vector< std::vector< GUM_SCALAR > >& get_binaryCPT_min()
const;
545 const std::vector< std::vector< GUM_SCALAR > >& get_binaryCPT_max()
const;
554 GUM_SCALAR precisionC__;
561 GUM_SCALAR epsilonMin__;
565 GUM_SCALAR epsilonMax__;
569 GUM_SCALAR epsilonMoy__;
574 GUM_SCALAR epsRedund__;
586 GUM_SCALAR precision__;
591 bool separatelySpecified__;
594 BayesNet< GUM_SCALAR > src_bn__;
597 BayesNet< GUM_SCALAR > src_bn_min__;
599 BayesNet< GUM_SCALAR > src_bn_max__;
602 BayesNet< GUM_SCALAR >* current_bn__;
605 NodeProperty< std::vector< std::vector< std::vector< GUM_SCALAR > > > >
609 NodeProperty< std::vector< std::vector< std::vector< GUM_SCALAR > > > >*
610 credalNet_current_cpt__;
613 NodeProperty< std::vector< NodeId > > var_bits__;
616 NodeProperty< NodeType > original_nodeType__;
618 NodeProperty< NodeType >* current_nodeType__;
622 bool hasComputedBinaryCPTMinMax__;
629 typename std::vector< std::vector< GUM_SCALAR > > binCptMin__;
637 typename std::vector< std::vector< GUM_SCALAR > > binCptMax__;
640 void sort_varType__();
648 int find_dNode_card__(
649 const std::vector< std::vector< std::vector< GUM_SCALAR > > >& var_cpt)
661 void intervalToCredal__();
671 void initCNNets__(
const std::string& src_min_num,
672 const std::string& src_max_den);
677 void initCNNets__(
const BayesNet< GUM_SCALAR >& src_min_num,
678 const BayesNet< GUM_SCALAR >& src_max_den);
696 void bnCopy__(BayesNet< GUM_SCALAR >& bn_dest);
711 void H2Vlrs__(
const std::vector< std::vector< GUM_SCALAR > >& h_rep,
712 std::vector< std::vector< GUM_SCALAR > >& v_rep)
const;
717 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 718 extern template class CredalNet<
double >;
724 #include <agrum/CN/credalNet_tpl.h>