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,
const std::string& src_max_den =
"");
136 CredalNet(
const BayesNet< GUM_SCALAR >& src_min_num,
137 const BayesNet< GUM_SCALAR >& src_max_den = BayesNet< GUM_SCALAR >());
155 NodeId addVariable(
const std::string& name,
const Size& card);
162 void addArc(
const NodeId& tail,
const NodeId& head);
180 void setCPTs(
const NodeId& id,
181 const std::vector< std::vector< std::vector< GUM_SCALAR > > >& cpt);
204 setCPT(
const NodeId& id, Size& entry,
const std::vector< std::vector< GUM_SCALAR > >& cpt);
226 void setCPT(
const NodeId& id,
228 const std::vector< std::vector< GUM_SCALAR > >& cpt);
244 void fillConstraints(
const NodeId& id,
245 const std::vector< GUM_SCALAR >& lower,
246 const std::vector< GUM_SCALAR >& upper);
264 void fillConstraint(
const NodeId& id,
266 const std::vector< GUM_SCALAR >& lower,
267 const std::vector< GUM_SCALAR >& upper);
285 void fillConstraint(
const NodeId& id,
287 const std::vector< GUM_SCALAR >& lower,
288 const std::vector< GUM_SCALAR >& upper);
296 Instantiation instantiation(
const NodeId& id);
303 Size domainSize(
const NodeId& id);
335 void bnToCredal(
const GUM_SCALAR beta,
const bool oneNet,
const bool keepZeroes =
false);
346 void intervalToCredalWithFiles();
355 void intervalToCredal();
369 void lagrangeNormalization();
382 void idmLearning(
const Idx s = 0,
const bool keepZeroes =
false);
394 void approximatedBinarization();
415 void saveBNsMinMax(
const std::string& min_path,
const std::string& max_path)
const;
426 std::string toString()
const;
437 void computeBinaryCPTMinMax();
446 const BayesNet< GUM_SCALAR >& src_bn()
const;
453 const BayesNet< GUM_SCALAR >& current_bn()
const;
459 const NodeProperty< std::vector< std::vector< std::vector< GUM_SCALAR > > > >&
460 credalNet_currentCpt()
const;
466 const NodeProperty< std::vector< std::vector< std::vector< GUM_SCALAR > > > >&
467 credalNet_srcCpt()
const;
475 NodeType currentNodeType(
const NodeId& id)
const;
483 NodeType nodeType(
const NodeId& id)
const;
489 const GUM_SCALAR& epsilonMin()
const;
495 const GUM_SCALAR& epsilonMax()
const;
501 const GUM_SCALAR& epsilonMean()
const;
507 const bool isSeparatelySpecified()
const;
515 const bool hasComputedBinaryCPTMinMax()
const;
525 const std::vector< std::vector< GUM_SCALAR > >& get_binaryCPT_min()
const;
535 const std::vector< std::vector< GUM_SCALAR > >& get_binaryCPT_max()
const;
544 GUM_SCALAR _precisionC_;
551 GUM_SCALAR _epsilonMin_;
555 GUM_SCALAR _epsilonMax_;
559 GUM_SCALAR _epsilonMoy_;
564 GUM_SCALAR _epsRedund_;
576 GUM_SCALAR _precision_;
581 bool _separatelySpecified_;
584 BayesNet< GUM_SCALAR > _src_bn_;
587 BayesNet< GUM_SCALAR > _src_bn_min_;
589 BayesNet< GUM_SCALAR > _src_bn_max_;
592 BayesNet< GUM_SCALAR >* _current_bn_;
595 NodeProperty< std::vector< std::vector< std::vector< GUM_SCALAR > > > > _credalNet_src_cpt_;
598 NodeProperty< std::vector< std::vector< std::vector< GUM_SCALAR > > > >*
599 _credalNet_current_cpt_;
602 NodeProperty< std::vector< NodeId > > _var_bits_;
605 NodeProperty< NodeType > _original_nodeType_;
607 NodeProperty< NodeType >* _current_nodeType_;
611 bool _hasComputedBinaryCPTMinMax_;
618 typename std::vector< std::vector< GUM_SCALAR > > _binCptMin_;
626 typename std::vector< std::vector< GUM_SCALAR > > _binCptMax_;
629 void _sort_varType_();
637 int _find_dNode_card_(
638 const std::vector< std::vector< std::vector< GUM_SCALAR > > >& var_cpt)
const;
649 void _intervalToCredal_();
659 void _initCNNets_(
const std::string& src_min_num,
const std::string& src_max_den);
664 void _initCNNets_(
const BayesNet< GUM_SCALAR >& src_min_num,
665 const BayesNet< GUM_SCALAR >& src_max_den);
683 void _bnCopy_(BayesNet< GUM_SCALAR >& bn_dest);
698 void _H2Vlrs_(
const std::vector< std::vector< GUM_SCALAR > >& h_rep,
699 std::vector< std::vector< GUM_SCALAR > >& v_rep)
const;
704 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 705 extern template class CredalNet<
double >;
711 #include <agrum/CN/credalNet_tpl.h>