Merged prob.h, factorgraph.h, factograph.cpp from SVN head (broken!)
[libdai.git] / ChangeLog
index 42406f4..e003b28 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,31 @@
 libDAI-0.2.2 (2008-??-??)
 -------------------------
+
+* Now compiles also under Visual C++.
+* Added Exceptions framework.
+* Replaced ENUM2,ENUM3,ENUM4,ENUM5,ENUM6 by single DAI_ENUM macro.
+* Removed utils/remove_short_loops and matlab/remove_short_loops.
+* Added more features to utils/createfg for creating factor graphs.
+* Pervasive change of BipartiteGraph implementation (based on an idea by
+  Giuseppe Passino). BipartiteGraph no longer stores the node properties 
+  (former _V1 and _V2), nor does it store a dense adjacency matrix anymore, 
+  nor an edge list. Instead, it stores the graph structure as lists of 
+  neighboring nodes. This yields a significant memory/speed improvement for 
+  large factor graphs, and is more elegant as well. Iterating over neighbors is
+  made easy by using boost::foreach.
+* Improved index.h (merged from SVN head):
+  - Renamed Index -> IndexFor
+  - Added some .reserve()'s to IndexFor methods which yields a 
+    25% speedup of testregression
+  - Replaced multind by Permute
+  - Added MultiFor
+  - Added State
+* Improved factor.h (merged from SVN head): mainly new functionality
 * Moved everything into namespace "dai"
+* Added ExactInf class for brute force exact inference
 * Renamed DEBUG to DAI_DEBUG to avoid conflicts
-* Contributions by ???:
+* Added conditional compilation of inference methods
+* Contributions by Peter Gober:
   - Renamed variable _N in mr.* for compatibility with g++ under cygwin
 * Contributions by Giuseppe Passino:
   - removed "using namespace std;" from header files - bad practice
@@ -11,19 +33,79 @@ libDAI-0.2.2 (2008-??-??)
   - changed #ifndefs to GNU style
   - added extra warning checks (-W -Wextra) and fixed resulting warnings
   - dai::TProb: 
-    o  removed copy constructor and assignment operators (redundant)
-    o  implementation of some methods via STL algorithms
-    o  added methods takeExp, takeLog, takeLog0 for transformation in-place
-    o  explicit constructor (prevents implicit conversion from size_t to TProb)
-    o  added operator+,+=,-,-=, with argument T (for calculations in log-scale)
-* Contributions by Christian Wojek, resulting in vast speed and memory improvements
-  for large factor graphs:
-  - Sparse implementation of nodes->edge conversion table _E12ind in bipgraph.h
+    o removed copy constructor and assignment operators (redundant)
+    o implementation of some methods via STL algorithms
+    o added methods takeExp, takeLog, takeLog0 for transformation in-place
+    o explicit constructor (prevents implicit conversion from size_t to TProb)
+    o added operator+,+=,-,-=, with argument T (for calculations in log-scale)
+  - Added "logdomain" property to BP, a boolean that controls whether 
+    calculations are done in the log-domain or in the linear domain;
+    doing calculations in the log-domain may help if the numerical range
+    of a double is too small.
+* Contributions by Christian Wojek:
   - New FactorGraph constructor that constructs from given ranges of factors
     and variables
-  - Optimization of FactorGraph constructors
-* FactorGraph constructors no longer check for short loops and for
-  negative entries. Also, the normtype is now Prob::NORMPROB by default.
+  - Optimization of FactorGraph constructors using tr1::unordered_map.
+* FactorGraph constructors no longer check for short loops (huge speed
+  increase for large factor graphs), nor for negative entries. Also, the 
+  normtype is now Prob::NORMPROB by default.
+* VarSet is now implemented using a std::vector<Var> instead of a
+  std::set<Var>, which yields a significant speed improvement.
+* Improved MaxSpanningTreePrims algorithm (uses boost::graph)
+* Small optimization in Diffs
+* Replaced Complex with real numbers (negative potentials is just not
+  used enough to warrant the additional "complexity" :))
+* Moved Properties and MaxDiff frameworks from InfAlg to each individual
+  inference algorithm, because the Properties framework was not as 
+  convenient as I hoped, and not every inference algorithm needs a maxdiff
+  variable. Also, replaced some FactorGraph functionality in InfAlg by a
+  function that returns the FactorGraph. The result is cleaner (less 
+  entangled) code.
+* Improved ClusterGraph implementation, yielding significant speedups
+  for the JunctionTree algorithm on large factorgraphs.
+* Improved documetation
+* Interface changes:
+  - VarSet::
+      stateSpace() -> states()
+      VarSet( const std::set<Var> ) -> VarSet( begin, end, sizeHint=0 )
+      VarSet( const std::vector<Var> ) -> VarSet( begin, end, sizeHint=0 )
+      removed bool operator||
+      operator&&(const VarSet&) -> intersects(const VarSet&)
+      operator&&(const Var&) -> contains(const Var&)
+  - FactorGraph::
+      delta(const Var &) -> delta(size_t)
+      Delta(const Var &) -> Delta(size_t)
+      makeCavity(const Var &) -> makeCavity(size_t)
+      vars() -> vars
+      factors() -> factors
+      removed MakeFactorCavity(size_t)
+      removed ExactMarginal(const VarSet &)
+      removed ExactlogZ()
+      moved isConnected() to BipartiteGraph
+      removed updatedFactor(size_t)
+      removed _normtype and NormType()
+      WriteToDotFile(const char *filename) -> display( std::ostream& os )
+      undoProb(size_t) -> restoreFactor(size_t)
+      saveProb(size_t) -> backupFactor(size_t)
+      undoProbs(const VarSet &) -> restoreFactors(const VarSet &)
+      saveProbs(const VarSet &) -> backupFactors(const VarSet &)
+  - RegionGraph::
+      nr_ORs() -> nrORs()
+      nr_IRs() -> nrIRs()
+      ORs() -> ORs
+      IRs() -> IRs
+  - *::Regenerate() -> *::create()
+  - Renamed Index -> IndexFor
+  - Diffs:
+      max() -> maxDiff()
+      max_size() -> maxSize()
+  - Prob::max() -> Prob::maxVal()
+  - Factor::
+      max() -> maxVal()
+      part_sum() -> partSum()
+  - toc() in util.h now returns seconds as a double
+  - VarSet::operator&&
+  - Properties -> PropertySet
 
 
 libDAI-0.2.1 (2008-05-26)