I want to ask some questions regarding the inference algorithms in Smile, since the documentation is a bit incomplete at times.
Sources of information about the Smile inference algorithms are:
Documentation:
http://genie.sis.pitt.edu/wiki/Applicat ... _a_Network
http://genie.sis.pitt.edu/wiki/Referenc ... SL_network (scroll down to SetDefaultBNAlgorithm)
constants.h in the C++ API; excerpt:
Code: Select all
// BN algorithms
#define DSL_ALG_BN_LAURITZEN 0
#define DSL_ALG_BN_HENRION 1
#define DSL_ALG_BN_PEARL 2
#define DSL_ALG_BN_LSAMPLING 3
#define DSL_ALG_BN_SELFIMPORTANCE 4
#define DSL_ALG_BN_HEURISTICIMPORTANCE 5
#define DSL_ALG_BN_BACKSAMPLING 6
#define DSL_ALG_BN_AISSAMPLING 7
#define DSL_ALG_BN_EPISSAMPLING 8
#define DSL_ALG_BN_LBP 9
#define DSL_ALG_BN_LAURITZEN_OLD 10
#define DSL_ALG_BN_RELEVANCEDECOMP 11
#define DSL_ALG_BN_RELEVANCEDECOMP2 12
#define DSL_ALG_HBN_HEPIS 13
#define DSL_ALG_HBN_HLW 14
#define DSL_ALG_HBN_HLBP 15
#define DSL_ALG_HBN_HLOGICSAMPLING 16
// ID algorithms
#define DSL_ALG_ID_COOPERSOLVING 0
#define DSL_ALG_ID_SHACHTER 1
Code: Select all
// Bayesian network algoritm types
public class BayesianAlgorithmType
{
public static final int Lauritzen = 0;
public static final int Henrion = 1;
public static final int Pearl = 2;
public static final int LSampling = 3;
public static final int SelfImportance = 4;
public static final int HeuristicImportance = 5;
public static final int BackSampling = 6;
public static final int AisSampling = 7;
public static final int EpisSampling = 8;
public static final int LBP = 9;
}
// Influence diagram algoritm types
public class InfluenceDiagramAlgorithmType
{
public static final int PolicyEvaluation = 0;
public static final int FindBestPolicy = 1;
}
- It's difficult and time-consuming to find information about all the different algorithms
- The ID algorithms have different names in C++ and Java; I guess that confuses some people
- BN-algorithms 10-12 and the HBN-algorithms are not available in Java.

My questions are:
- I guess DSL_ALG_BN_LBP means Loopy Belief Propagation. However, it's nowhere stated clearly, so is that correct?
- Which algorithms are exact, which are approximate? I guess algorithms named *Sampling and *Importance are approximate, as is LBP; and Lauritzen is exact. Correct? What about the others?
- Why are some algorithms not available in Java? Are they in beta stadium or something like that?
- What does "HBN" mean? A guess could be that the H stands for hybrid, that is, they are for networks with continuous nodes...
- Can someone provide a short description (one or two lines) for each algorithm to describe what they do?
Thanks for reading & helping
