Merge branch 'master' of git.tuebingen.mpg.de:libdai
authorJoris Mooij <joris.mooij@tuebingen.mpg.de>
Fri, 22 Jan 2010 13:09:11 +0000 (14:09 +0100)
committerJoris Mooij <joris.mooij@tuebingen.mpg.de>
Fri, 22 Jan 2010 13:09:11 +0000 (14:09 +0100)
Conflicts:
include/dai/doc.h

1  2 
include/dai/alldai.h
include/dai/doc.h
src/alldai.cpp

diff --combined include/dai/alldai.h
@@@ -11,7 -11,6 +11,6 @@@
  
  /// \file
  /// \brief Main libDAI header file. It \#includes all other libDAI headers.
- /// \todo Update documentation about aliases (add a section to the fileformats)
  
  
  #ifndef __defined_libdai_alldai_h
@@@ -30,9 -29,6 +29,9 @@@
  #ifdef DAI_WITH_FBP
      #include <dai/fbp.h>
  #endif
 +#ifdef DAI_WITH_TRWBP
 +    #include <dai/trwbp.h>
 +#endif
  #ifdef DAI_WITH_MF
      #include <dai/mf.h>
  #endif
@@@ -78,11 -74,18 +77,18 @@@ InfAlg *newInfAlg( const std::string &n
   *  \param fg The FactorGraph that the algorithm should be applied to.
   *  \return Returns a pointer to the new InfAlg object; it is the responsibility of the caller to delete it later.
   *  \throw UNKNOWN_DAI_ALGORITHM if the requested name is not known/compiled in.
-  *  \todo Allow alias substitution
   */
  InfAlg *newInfAlgFromString( const std::string &nameOpts, const FactorGraph &fg );
  
  
+ /// Constructs a new inference algorithm.
+ /** \param aliases Maps names to strings in the format "name[key1=val1,key2=val2,...,keyn=valn]"; if not empty, alias substitution
+  *  will be performed when parsing \a nameOpts by invoking parseNameProperties(const std::string &,const std::map<std::string,std::string> &)
+  *  \see newInfAlgFromString(const std::string &, const FactorGraph &)
+  */
+ InfAlg *newInfAlgFromString( const std::string &nameOpts, const FactorGraph &fg, const std::map<std::string,std::string> &aliases );
  /// Extracts the name and property set from a string \a s in the format "name[key1=val1,key2=val2,...]" or "name"
  std::pair<std::string, PropertySet> parseNameProperties( const std::string &s );
  
@@@ -96,6 -99,10 +102,10 @@@ std::pair<std::string, PropertySet> par
  
  
  /// Reads aliases from file named \a filename
+ /** \param filename Name of the alias file
+  *  \return A map that maps aliases to the strings they should be substituted with.
+  *  \see \ref fileformats-aliases
+  */
  std::map<std::string,std::string> readAliasesFile( const std::string &filename );
  
  
@@@ -108,9 -115,6 +118,9 @@@ static const char* DAINames[] = 
  #ifdef DAI_WITH_FBP
      FBP::Name,
  #endif
 +#ifdef DAI_WITH_TRWBP
 +    TRWBP::Name,
 +#endif
  #ifdef DAI_WITH_MF
      MF::Name,
  #endif
diff --combined include/dai/doc.h
@@@ -20,7 -20,7 +20,7 @@@
   *
   *  \todo Document tests and utils
   *
-  *  \todo Add FAQ
+  *  \todo Implement routines for UAI probabilistic inference evaluation data
   *
   *  \idea Adapt (part of the) guidelines in http://www.boost.org/development/requirements.html#Design_and_Programming
   *
   *  variables) share parameters in parameter learning using EM. This convention
   *  is similar to the convention used in factor blocks in a factor graph .fg 
   *  file (see \ref fileformats-factorgraph-factor).
+  *
+  *  \section fileformats-aliases Aliases file format
+  *
+  *  An aliases file is basically a list of "macros" and the strings that they
+  *  should be substituted with.
+  *  
+  *  Each line of the aliases file can be either empty, contain a comment 
+  *  (if the first character is a '#') or contain an alias. In the latter case, 
+  *  the line should contain a colon; the part before the colon contains the 
+  *  name of the alias, the part after the colon the string that it should be 
+  *  substituted with. Any whitespace before and after the colon is ignored.
+  *
+  *  For example, the following line would define the alias \c BP_SEQFIX
+  *  as a shorthand for "BP[updates=SEQFIX,tol=1e-9,maxiter=10000,logdomain=0]":
+  *  <pre>
+  *  BP_SEQFIX:  BP[updates=SEQFIX,tol=1e-9,maxiter=10000,logdomain=0]
+  *  </pre>
+  *
+  *  Aliases files can be used to store default options for algorithms.
   */
  
  /** \page bibliography Bibliography
 + *  \anchor EaG09 \ref EaG09
 + *  F. Eaton and Z. Ghahramani (2009):
 + *  "Choosing a Variable to Clamp",
 + *  <em>Proceedings of the Twelfth International Conference on Artificial Intelligence and Statistics (AISTATS 2009)</em> 5:145-152,
 + *  http://jmlr.csail.mit.edu/proceedings/papers/v5/eaton09a/eaton09a.pdf
 + *
 + *  \anchor EMK06 \ref EMK06
 + *  G. Elidan and I. McGraw and D. Koller (2006):
 + *  "Residual Belief Propagation: Informed Scheduling for Asynchronous Message Passing",
 + *  <em>Proceedings of the 22nd Annual Conference on Uncertainty in Artificial Intelligence (UAI-06)</em>,
 + *  http://uai.sis.pitt.edu/papers/06/UAI2006_0091.pdf
 + *
 + *  \anchor HAK03 \ref HAK03
 + *  T. Heskes and C. A. Albers and H. J. Kappen (2003):
 + *  "Approximate Inference and Constrained Optimization",
 + *  <em>Proceedings of the 19th Annual Conference on Uncertainty in Artificial Intelligence (UAI-03)</em> pp. 313-320,
 + *  http://www.snn.ru.nl/reports/Heskes.uai2003.ps.gz
 + *
   *  \anchor KFL01 \ref KFL01
   *  F. R. Kschischang and B. J. Frey and H.-A. Loeliger (2001):
   *  "Factor Graphs and the Sum-Product Algorithm",
 - *  <em>IEEE Transactions on Information Theory</em> 47(2):498-519.
 + *  <em>IEEE Transactions on Information Theory</em> 47(2):498-519,
   *  http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=910572
   *
++ *  \anchor KoF09 \ref KoF09
++ *  D. Koller and N. Friedman (2009):
++ *  <em>Probabilistic Graphical Models - Principles and Techniques</em>,
++ *  The MIT Press, Cambridge, Massachusetts, London, England.
++
 + *  \anchor Min05 \ref Min05
 + *  T. Minka (2005):
 + *  "Divergence measures and message passing",
 + *  <em>MicroSoft Research Technical Report</em> MSR-TR-2005-173,
 + *  http://research.microsoft.com/en-us/um/people/minka/papers/message-passing/minka-divergence.pdf
 + *
   *  \anchor MiQ04 \ref MiQ04
   *  T. Minka and Y. Qi (2004):
   *  "Tree-structured Approximations by Expectation Propagation",
 - *  <em>Advances in Neural Information Processing Systems</em> (NIPS) 16.
 + *  <em>Advances in Neural Information Processing Systems</em> (NIPS) 16,
   *  http://books.nips.cc/papers/files/nips16/NIPS2003_AA25.pdf
   *
 - *  \anchor MoR05 \ref MoR05
 - *  A. Montanari and T. Rizzo (2005):
 - *  "How to Compute Loop Corrections to the Bethe Approximation",
 - *  <em>Journal of Statistical Mechanics: Theory and Experiment</em>
 - *  2005(10)-P10011.
 - *  http://stacks.iop.org/1742-5468/2005/P10011
 - *
 - *  \anchor YFW05 \ref YFW05
 - *  J. S. Yedidia and W. T. Freeman and Y. Weiss (2005):
 - *  "Constructing Free-Energy Approximations and Generalized Belief Propagation Algorithms",
 - *  <em>IEEE Transactions on Information Theory</em>
 - *  51(7):2282-2312.
 - *  http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=1459044
 - *
 - *  \anchor HAK03 \ref HAK03
 - *  T. Heskes and C. A. Albers and H. J. Kappen (2003):
 - *  "Approximate Inference and Constrained Optimization",
 - *  <em>Proceedings of the 19th Annual Conference on Uncertainty in Artificial Intelligence (UAI-03)</em> pp. 313-320.
 - *  http://www.snn.ru.nl/reports/Heskes.uai2003.ps.gz
 - *
   *  \anchor MoK07 \ref MoK07
   *  J. M. Mooij and H. J. Kappen (2007):
   *  "Loop Corrections for Approximate Inference on Factor Graphs",
 - *  <em>Journal of Machine Learning Research</em> 8:1113-1143.
 + *  <em>Journal of Machine Learning Research</em> 8:1113-1143,
   *  http://www.jmlr.org/papers/volume8/mooij07a/mooij07a.pdf
   *
   *  \anchor MoK07b \ref MoK07b
   *  J. M. Mooij and H. J. Kappen (2007):
   *  "Sufficient Conditions for Convergence of the Sum-Product Algorithm",
 - *  <em>IEEE Transactions on Information Theory</em> 53(12):4422-4437.
 + *  <em>IEEE Transactions on Information Theory</em> 53(12):4422-4437,
   *  http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=4385778
   *
 - *  \anchor EaG09 \ref EaG09
 - *  F. Eaton and Z. Ghahramani (2009):
 - *  "Choosing a Variable to Clamp",
 - *  <em>Proceedings of the Twelfth International Conference on Artificial Intelligence and Statistics (AISTATS 2009)</em> 5:145-152
 - *  http://jmlr.csail.mit.edu/proceedings/papers/v5/eaton09a/eaton09a.pdf
 + *  \anchor MoR05 \ref MoR05
 + *  A. Montanari and T. Rizzo (2005):
 + *  "How to Compute Loop Corrections to the Bethe Approximation",
 + *  <em>Journal of Statistical Mechanics: Theory and Experiment</em> 2005(10)-P10011,
 + *  http://stacks.iop.org/1742-5468/2005/P10011
   *
   *  \anchor StW99 \ref StW99
   *  A. Steger and N. C. Wormald (1999):
   *  "Generating Random Regular Graphs Quickly",
 - *  <em>Combinatorics, Probability and Computing</em> Vol 8, Issue 4, pp. 377-396
 + *  <em>Combinatorics, Probability and Computing</em> Vol 8, Issue 4, pp. 377-396,
   *  http://www.math.uwaterloo.ca/~nwormald/papers/randgen.pdf
   *
 - *  \anchor EMK06 \ref EMK06
 - *  G. Elidan and I. McGraw and D. Koller (2006):
 - *  "Residual Belief Propagation: Informed Scheduling for Asynchronous Message Passing",
 - *  <em>Proceedings of the 22nd Annual Conference on Uncertainty in Artificial Intelligence (UAI-06)</em>
 - *  http://uai.sis.pitt.edu/papers/06/UAI2006_0091.pdf
 - *
   *  \anchor WiH03 \ref WiH03
   *  W. Wiegerinck and T. Heskes (2003):
   *  "Fractional Belief Propagation",
 - *  <em>Advances in Neural Information Processing Systems</em> (NIPS) 15, pp. 438-445.
 + *  <em>Advances in Neural Information Processing Systems</em> (NIPS) 15, pp. 438-445,
   *  http://books.nips.cc/papers/files/nips15/LT16.pdf
   *
 - *  \anchor Min05 \ref Min05
 - *  T. Minka (2005):
 - *  "Divergence measures and message passing",
 - *  <em>MicroSoft Research Technical Report</em> MSR-TR-2005-173,
 - *  http://research.microsoft.com/en-us/um/people/minka/papers/message-passing/minka-divergence.pdf
 + *  \anchor WJW03 \ref WJW03
 + *  M. J. Wainwright, T. S. Jaakkola and A. S. Willsky (2003):
 + *  "Tree-reweighted belief propagation algorithms and approximate ML estimation by pseudo-moment matching",
 + *  <em>9th Workshop on Artificial Intelligence and Statistics</em>,
 + *  http://www.eecs.berkeley.edu/~wainwrig/Papers/WJW_AIStat03.pdf
   *
 - *  \anchor KoF09 \ref KoF09
 - *  D. Koller and N. Friedman (2009):
 - *  <em>Probabilistic Graphical Models - Principles and Techniques</em>,
 - *  The MIT Press, Cambridge, Massachusetts, London, England.
 + *  \anchor YFW05 \ref YFW05
 + *  J. S. Yedidia and W. T. Freeman and Y. Weiss (2005):
 + *  "Constructing Free-Energy Approximations and Generalized Belief Propagation Algorithms",
 + *  <em>IEEE Transactions on Information Theory</em> 51(7):2282-2312,
 + *  http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=1459044
   */
  
  
diff --combined src/alldai.cpp
@@@ -32,10 -32,6 +32,10 @@@ InfAlg *newInfAlg( const std::string &n
      if( name == FBP::Name )
          return new FBP (fg, opts);
  #endif
 +#ifdef DAI_WITH_TRWBP
 +    if( name == TRWBP::Name )
 +        return new TRWBP (fg, opts);
 +#endif
  #ifdef DAI_WITH_MF
      if( name == MF::Name )
          return new MF (fg, opts);
  
  
  InfAlg *newInfAlgFromString( const std::string &nameOpts, const FactorGraph &fg ) {
-     string::size_type pos = nameOpts.find_first_of('[');
-     string name;
-     PropertySet opts;
-     if( pos == string::npos ) {
-         name = nameOpts;
-     } else {
-         name = nameOpts.substr(0,pos);
+     pair<string,PropertySet> no = parseNameProperties( nameOpts );
+     return newInfAlg( no.first, fg, no.second );
+ }
  
-         stringstream ss;
-         ss << nameOpts.substr(pos,nameOpts.length());
-         ss >> opts;
-     }
-     return newInfAlg(name,fg,opts);
+ InfAlg *newInfAlgFromString( const std::string &nameOpts, const FactorGraph &fg, const std::map<std::string,std::string> &aliases ) {
+     pair<string,PropertySet> no = parseNameProperties( nameOpts, aliases );
+     return newInfAlg( no.first, fg, no.second );
  }