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);
181 void setCPTs(
const NodeId& id,
182 const std::vector< std::vector< std::vector< GUM_SCALAR > > >& cpt);
205 setCPT(
const NodeId& id, Size& entry,
const std::vector< std::vector< GUM_SCALAR > >& cpt);
227 void setCPT(
const NodeId& id,
229 const std::vector< std::vector< GUM_SCALAR > >& cpt);
245 void fillConstraints(
const NodeId& id,
246 const std::vector< GUM_SCALAR >& lower,
247 const std::vector< GUM_SCALAR >& upper);
265 void fillConstraint(
const NodeId& id,
267 const std::vector< GUM_SCALAR >& lower,
268 const std::vector< GUM_SCALAR >& upper);
286 void fillConstraint(
const NodeId& id,
288 const std::vector< GUM_SCALAR >& lower,
289 const std::vector< GUM_SCALAR >& upper);
297 Instantiation instantiation(
const NodeId& id);
304 Size domainSize(
const NodeId& id);
336 void bnToCredal(
const GUM_SCALAR beta,
const bool oneNet,
const bool keepZeroes =
false);
347 void intervalToCredalWithFiles();
356 void intervalToCredal();
370 void lagrangeNormalization();
383 void idmLearning(
const Idx s = 0,
const bool keepZeroes =
false);
395 void approximatedBinarization();
416 void saveBNsMinMax(
const std::string& min_path,
const std::string& max_path)
const;
427 std::string toString()
const;
438 void computeBinaryCPTMinMax();
447 const BayesNet< GUM_SCALAR >& src_bn()
const;
454 const BayesNet< GUM_SCALAR >& current_bn()
const;
460 const NodeProperty< std::vector< std::vector< std::vector< GUM_SCALAR > > > >&
461 credalNet_currentCpt()
const;
467 const NodeProperty< std::vector< std::vector< std::vector< GUM_SCALAR > > > >&
468 credalNet_srcCpt()
const;
476 NodeType currentNodeType(
const NodeId& id)
const;
484 NodeType nodeType(
const NodeId& id)
const;
490 const GUM_SCALAR& epsilonMin()
const;
496 const GUM_SCALAR& epsilonMax()
const;
502 const GUM_SCALAR& epsilonMean()
const;
508 const bool isSeparatelySpecified()
const;
516 const bool hasComputedBinaryCPTMinMax()
const;
526 const std::vector< std::vector< GUM_SCALAR > >& get_binaryCPT_min()
const;
536 const std::vector< std::vector< GUM_SCALAR > >& get_binaryCPT_max()
const;
545 GUM_SCALAR _precisionC_;
552 GUM_SCALAR _epsilonMin_;
556 GUM_SCALAR _epsilonMax_;
560 GUM_SCALAR _epsilonMoy_;
565 GUM_SCALAR _epsRedund_;
577 GUM_SCALAR _precision_;
582 bool _separatelySpecified_;
585 BayesNet< GUM_SCALAR > _src_bn_;
588 BayesNet< GUM_SCALAR > _src_bn_min_;
590 BayesNet< GUM_SCALAR > _src_bn_max_;
593 BayesNet< GUM_SCALAR >* _current_bn_;
596 NodeProperty< std::vector< std::vector< std::vector< GUM_SCALAR > > > > _credalNet_src_cpt_;
599 NodeProperty< std::vector< std::vector< std::vector< GUM_SCALAR > > > >*
600 _credalNet_current_cpt_;
603 NodeProperty< std::vector< NodeId > > _var_bits_;
606 NodeProperty< NodeType > _original_nodeType_;
608 NodeProperty< NodeType >* _current_nodeType_;
612 bool _hasComputedBinaryCPTMinMax_;
619 typename std::vector< std::vector< GUM_SCALAR > > _binCptMin_;
627 typename std::vector< std::vector< GUM_SCALAR > > _binCptMax_;
630 void _sort_varType_();
638 int _find_dNode_card_(
639 const std::vector< std::vector< std::vector< GUM_SCALAR > > >& var_cpt)
const;
650 void _intervalToCredal_();
660 void _initCNNets_(
const std::string& src_min_num,
const std::string& src_max_den);
665 void _initCNNets_(
const BayesNet< GUM_SCALAR >& src_min_num,
666 const BayesNet< GUM_SCALAR >& src_max_den);
684 void _bnCopy_(BayesNet< GUM_SCALAR >& bn_dest);
699 void _H2Vlrs_(
const std::vector< std::vector< GUM_SCALAR > >& h_rep,
700 std::vector< std::vector< GUM_SCALAR > >& v_rep)
const;
705 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 706 extern template class CredalNet<
double >;
712 #include <agrum/CN/credalNet_tpl.h>