Fixed bug in findMaximum (it only considered a single connected component of the...
[libdai.git] / ChangeLog
index 11b2ceb..a734860 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
-git HEAD
---------
-
-* Improved BipartiteGraph code:
-  - Fixed bug in BipartiteGraph::eraseNode1()
-  - Fixed bug in BipartiteGraph::eraseNode2()
-  - Fixed bug in BipartiteGraph::isTree()
-* Improved GraphAL code:
-  - Fixed bug in GraphAL::nrEdges()
-  - Fixed bug in GraphAL::addEdge()
-  - Fixed bug in GraphAL::isTree()
-  - Fixed bug in GraphAL::eraseNode()
-  - Fixed bug in GraphAL::printDot()
-  - Fixed bug in createGraphGrid3D()
-  - Fixed bug in createGraphRegular()
-  - Added GraphAL::hasEdge(size_t,size_t)
-* Removed RandomDRegularGraph()
-* Compressed Makefile
-* Added unit tests for Var, SmallSet, VarSet, Graph, BipartiteGraph
-* Added unit testing framework
-* Added initialization of TRWBP weights by sampling spanning trees
-* Cleaned up MR code:
+git master
+----------
+* Fixed bug in findMaximum (it only considered a single connected component of the factor graph)
+* [Benjamin Piwowarski] Renamed "foreach" macro into "bforeach" to avoid conflicts with newer Boost library versions
+* Optimized ClusterGraph( const FactorGraph&, bool) constructor
+* Fixed "typename" bug in src/alldai.cpp which resulted in FTBFS for older g++ compilers
+* Fixed memory leak in alldai.cpp and removed the function builtinInfAlgs()
+* Fixed memory leak in CBP::run()
+* Fixed typo in Priya's name
+
+
+libDAI-0.3.0 (2011-07-12)
+-------------------------
+
+New license:
+* Changed license from GPL v2+ to FreeBSD (BSD 2-clause)
+
+Miscellaneous improvements:
+* Improved Exception class 
+  (it now stores more information and doesn't print to stderr by default)
+* Added builtinInfAlgs() and builtinInfAlgNames()
+
+Bug fixes:
+* [Laurens van der Maaten] src/matlab/dai.cpp now correctly handles missing logZ() 
+  and maxDiff() implementations
+* Now uses GMP big integer type to represent linear states and the number of
+  states of VarSets (in some cases). This fixes a bug Jerome Maye and Priya 
+  found in the State class. Unfortunately, the supplied Makefile.WINDOWS now 
+  no longer works out-of-the-box.
+* Fixed numerical issues in MF, FBP and TRWBP (discovered in sparse branch)
+* Fixed bug in findMaximum(): inconsistent max-beliefs are now detected,
+  instead of returning a MAP state with zero joint probability
+  (reported by Hynek Urban)
+* Fixed a Boost-related bug in src/util.cpp (reported by Avneesh Saluja)
+  (the random seed needs to be an unsigned int on some platforms)
+* Fixed two bugs in examples/example_sprinkler_gibbs (reported by Priya)
+* Fixed bug in tokenizeString() and Evidence::addEvidenceTabFile()
+  (a tab character at the end of a line was incorrectly discarded - bug reported by Priya)
+* Replaced all Name members by name() virtual functions and removed global variable DAINames
+  (this fixes a bug in matlab/dai.cpp reported by Thomas Mensink)
+
+
+libDAI-0.2.7 (2010-08-19)
+-------------------------
+
+* Removed interfaces deprecated in 0.2.6.
+* Fixed a bug in JTree::findMaximum() (reported by zhengyun84 and Dhruv Batra):
+  if one or more variables had a MAP belief with more than one maximum, an 
+  incorrect MAP state could result.
+
+
+libDAI-0.2.6 (2010-08-05)
+-------------------------
+
+New features:
+* Added decimation algorithm DecMAP for MAP inference (decmap.h/cpp).
+* Added source code for one of the winning solvers of the 
+  UAI 2010 Approximate Inference Challenge (examples/uai2010-aie-solver.cpp).
+* Added support for reading files in the UAI Approximate Inference Challenge
+  format, supporting both the 2006/2008 evidence file format and the 2010
+  evidence file format (io.h/cpp).
+
+Miscellaneous improvements:
+* 'maxtime' property added to various algorithms (BP, Gibbs, HAK, TreeEP)
+  for setting an upper limit on execution time.
+* 'maxmem' property added to JTree for setting an upper limit on memory usage.
+* SmallSet:
+  - Added SmallSet::erase( const T& t ).
+* VarSet:
+  - nrStates() now returns a long double instead of a size_t.
+* Permute:
+  - Added ranges() accessor.
+  - Added inverse() method.
+  - Added optional reverse argument to Permute( const std::vector<Var>& ) constructor.
+* Factor:
+  - Added createFactorDelta( const VarSet& vs, size_t state ).
+* ClusterGraph:
+  - Added ClusterGraph(const FactorGraph& fg, bool onlyMaximal) constructor.
+  - Added findCluster( const VarSet& cl ).
+  - Added elimVar( size_t i ).
+  - Added 'maxStates' argument to VarElim( EliminationChoice f, size_t maxStates=0 ).
+* FactorGraph:
+  - Added isMaximal(size_t).
+  - Added maximalFactor(size_t).
+  - Added FactorGraph::logScore( const std::vector<size_t>& statevec ).
+* Gibbs:
+  - Added 'restart' property.
+  - Added Gibbs::findMaximum() for MAP inference.
+* HAK:
+  - Optimized region graph construction for HAK/GBP with clusters=BETHE.
+* examples/examples_imagesegmentation.cpp:
+  - [Peter Rockett] Improved Makefiles for image segmentation example.
+  - Added build flag to specify the CImg version.
+* util.h/cpp:
+  - Added fromString<>( const std::string& x ).
+
+Interface changes (the old interface is marked obsolete and will be removed in the next release):
+* Added InfAlg::setMaxIter(size_t) for setting the maximum number of iterations.
+* Deprecated Graph::Neighbor, BipartiteGraph::Neighbor and DAG::Neighbor
+  and replaced them by a globally defined Neighbor structure
+* Deprecated Graph::Neighbors, BipartiteGraph::Neighbors and DAG::Neighbors
+  and replaced them by a globally defined Neighbors type
+* Deprecated Graph::Edge, BipartiteGraph::Edge and DAG::Edge
+  and replaced them by a globally defined Edge type
+* Renamed 'iters' property of Gibbs algorithm into 'maxiter'.
+* ClusterGraph::findVar( const Var& n ) no longer throws an exception if the
+  variable is not found.
+* Deprecated 'void tokenizeString( const string&, vector<string>&, const string& )'
+  and replaced it with an improved version
+  'vector<string> tokenizeString( const string&, bool, const string& )'
+* Removed interfaces deprecated in 0.2.5.
+
+Bug fixes:
+* Fixed a problem with isnan() on FreeBSD; it is now in the dai namespace.
+* Workaround for older g++ compilers (e.g. version 4.0.0 on Darwin 9.8.0)
+  which have problems when comparing const_reverse_iterator with
+  reverse_iterator.
+* [Matt Dunham] Fixed a bug in Factors2mx in src/matlab/matlab.cpp
+  (segfault if factors depending on 0 variables were passed to MatLab)
+
+
+libDAI-0.2.5 (2010-05-09)
+-------------------------
+
+New features:
+* Added unit tests for var, smallset, varset, graph, dag, bipgraph,
+  weightedgraph, enum, util, exceptions, properties, index, prob, 
+  factor, factorgraph, clustergraph, regiongraph, daialg, alldai
+* [Ofer Meshi] Added a script for converting from FastInf to libDAI format
+* Added utils/uai2fg, a utility to convert the UAI inference competition file
+  formats to the libDAI factor graph file format
+* Added dag.h/cpp, an implementation of Directed Acyclic Graphs
+* Added examples/example_imagesegmentation
+
+Miscellaneous improvements:
+* TRWBP:
+  - Added initialization of TRWBP weights by sampling spanning trees
+* MF:
+  - Added an "init" option that allows to initialize randomly
+  - Added an "updates" option that allows to choose between standard
+    mean field and "hard-spin" mean field
+* MR:
   - rewrote response propagation implementation with help of BBP
   - now uses GraphAL to represent the Markov graph
   - miscellaneous smaller cleanups
+* TreeEP:
+  - Now also supports disconnected factor graphs
+* JTree:
+  - Now also supports disconnected factor graphs
+* ExactInf:
+  - Added findMaximum()
+* RegionGraph:
+  - Added error checking code
+  - Changed the way a RegionGraph is streamed to an std::ostream.
+* ClusterGraph:
+  - Added nrVars() method
+  - Added var( size_t ) method
+  - Added cluster( size_t ) method
+* FactorGraph:
+  - clamped() now contains a delta factor for the clamped variable
+  - Added MarkovGraph()
+* TFactor:
+  - Added takeAbs()
+  - Added takeExp()
+  - Added takeLog( bool )
+  - Added operator-() const
+  - Added sumAbs() const
+  - Added operator==( const TFactor<T> &y )
+  - Added get(size_t), set(size_t,T)
+* TProb:
+  - Added operator==( const TProb<T> &q )
+  - accumulate() now also applies op2 to init
+  - operator/= (T x) now yields 0 when dividing by 0
+  - Added resize(size_t)
+  - Added get(size_t) and set(size_t,T) 
+  - Changed format of TProb<T> when streamed to an ostream
+* multifor:
+  - Added reset()
+* PropertySet:
+  - Added size()
+  - Added clear()
+  - Added erase()
+* util.h/cpp:
+  - Added std::string toString( const T& x )
+* weightedgraph.h/cpp:
+  - Added option to MaxSpanningTree and MinSpanningTree for
+    choosing between Prim's algorithm and Kruskal's algorithm
+  - Better error checking in RootedTree constructor
+  - Added GraphEL::GraphEL( const GraphAL& G ) constructor
+* BipartiteGraph:
+  - Added hasEdge()
+  - Added findNb1()
+  - Added findNb2()
+  - Added nb1Set()
+  - Added nb2Set()
+  - Added operator==( const BipartiteGraph& )
+  - Added BipartiteGraph( size_t nr1, size_t nr2 ) constructor
+  - Added operator<<( std::ostream&, const BipartiteGraph& )
+* GraphAL:
+  - Added hasEdge(size_t,size_t)
+  - Added nbSet(size_t)
+  - Added operator==( const GraphAL& )
+  - Added operator<<( std::ostream&, const GraphAL& )
+* SmallSet:
+  - Added insert( const T& t ) method
+* Improved regression test
+* Made all "verbose" properties optional
+* utils/createfg now has a new factor type ('ISINGUNIFORM') and the old
+  'ISING' factor type has been renamed to 'ISINGGAUSS'
+* tests/testdai option "marginals" now has five possible values: NONE
+  outputs no marginals, VAR only variable marginals, FAC only factor
+  marginals, VARFAC both types of marginals, and ALL outputs all
+  marginals calculated by the algorithm.
+* Compressed Makefile
+
+Interface changes (the old interface is marked obsolete and will be removed in the next release):
+* Removed RandomDRegularGraph(), please use createGraphRegular() instead
+* TreeEP:
+  - Changed construct( const RootedTree& ) into
+    construct( const FactorGraph&, const RootedTree& )
+* JTree:
+  - Changed construct( const std::vector<VarSet>&, bool ) into
+    construct( const FactorGraph&, const std::vector<VarSet>&, bool )
+  - Changed GenerateJT( const std::vector<VarSet> & )
+    into GenerateJT( const FactorGraph &, const std::vector<VarSet> & )
+* RegionGraph: 
+  - Made (previously public) members G, ORs, IRs and fac2OR protected and
+    added DAG() accessor which returns a reference to the region graph DAG 
+    structure (currently implemented as a BipartiteGraph).
+  - Renamed calcCountingNumbers() into calcCVMCountingNumbers() and made it 
+    protected, because exposing it to the world serves no purpose.
+  - Removed partial constructor RegionGraph( const FactorGraph& fg )
+  - Made RecomputeORs(), RecomputeORs( const VarSet& ) and RecomputeOR( size_t ) 
+    protected and renamed them by changing the "Recompute" into "recompute", 
+    because exposing them to the world serves no purpose.
+* ClusterGraph:
+  - Made (previously public) members G, vars and clusters private and added 
+    bipGraph(), vars() and clusters() methods which offer read-only access 
+    to these members.
+  - Deprecated toVector()
+  - Renamed size() into nrClusters()
+* FactorGraph:
+  - Renamed Cliques() into maximalFactorDomains() and made it faster
+  - findVars( const VarSet& ) now returns a SmallSet<size_t>
+    and its argument now has a const-qualifier (which fixes a small bug).
+  - Made (previously public) member G private and added the 
+    bipGraph() method, which offers read-only access to it.
+  - Deprecated the iterator interface:
+    o FactorGraph::iterator typedef
+    o FactorGraph::const_iterator typedef
+    o FactorGraph::begin() members
+    o FactorGraph::end() members
+  - Deprecated factor(size_t) which offered write access to a factor
+    because using this functionality in the descendant RegionGraph is dangerous,
+    as the outer regions are not automatically recomputed.
+* TFactor:
+  - Renamed states() into nrStates()
+  - Added get(size_t) and set(size_t,T) operators; 
+    get() is equivalent to "operator[](size_t) const" and set() should
+    be used instead of the non-const operator[], which has been deprecated
+* TProb:
+  - Deprecated TProb( TIterator begin, TIterator end, size_t sizeHint=0 )
+    constructor: the sizeHint argument no longer defaults to 0
+  - Deprecated accumulate( T init, binOp op1, unOp op2 );
+    instead, accumulateSum( T init, unOp op ) and
+    accumulateMax( T init, unOp op, bool minimize ) should be used.
+  - Deprecated TProb::NormType and TProb::DistType;
+    ProbNormType and ProbDistType should be used instead.
+  - Fixed bug by renaming operator<=() to operator<()
+  - Added get(size_t) and set(size_t,T) operators; 
+    get() is equivalent to "operator[](size_t) const" and set() should
+    be used instead of the non-const operator[], which has been deprecated
+* PropertySet:
+  - Renamed Set() -> set()
+  - Renamed Get() -> get()
+  - Renamed GetAs<T>() -> getAs<T>()
+  - Renamed ConvertTo<T>() -> convertTo<T>()
+* util.h/cpp:
+  - Removed max( const std::vector<Real> &v )
+* weightedgraph.h/cpp:
+  - Renamed MaxSpanningTreePrims into MaxSpanningTree
+  - Renamed MinSpanningTreePrims into MinSpanningTree
+  - The vertices in DEdge and UEdge are now named "first" and "second"
+    for compatibility with a std::pair<size_t,size_t>
+* BipartiteGraph:
+  - delta1() and delta2() now return a SmallSet<size_t> instead of a vector<size_t>
+* SmallSet:
+  - The sizeHint argument of the iterator constructor
+     SmallSet::SmallSet( TIterator begin, TIterator end, size_t sizeHint=0 )
+    no longer has a default value in order to avoid confusion with the
+     SmallSet::SmallSet( const T &t1, const T &t2 )
+    constructor.
+
+Bug fixes:
+* [Stefano Pellegrini] Fixed bug in JTree::findMaximum()
+* [Stefano Pellegrini] Fixed bug in BP[logdomain=1,inference=MAXPROD]
+* Fixed some bugs in the MatLab interface build system
+* Fixed a bug in utils/fginfo.cpp
+* Fixed a bug in JTree::findMaximum() and simplified the code
 * Fixed bug in BBPCostFunction::operator=() which prevented the desired 
   assignment from happening
-* [Stefano Pellegrini] Fixed bug in BP[logdomain=1,inference=MAXPROD]
-* Removed deprecated functionality
-* Updated ChangeLog for libDAI-0.2.4 (forgot a few entries)
+* RegionGraph::WriteToFile( const char* ), RegionGraph::ReadFromFile( const char * )
+  and RegionGraph::printDot( std::ostream& ) incorrectly called their respective
+  FactorGraph ancestor methods; this has been corrected by letting them throw a
+  NOT_IMPLEMENTED exception.
+* Fixed bug in FactorGraph::clone()
+* Fixed bug in min( const TFactor<T> &, const TFactor<T> & )
+* Fixed bug in max( const TFactor<T> &, const TFactor<T> & )
+* Fixed bug by renaming TProb<T>::operator<=() to TProb<T>::operator<()
+* Fixed bug in PropertySet::setAsString<T>()
+* Fixed a bug in rnd_seed()
+* BipartiteGraph:
+  - Fixed bug in eraseNode1()
+  - Fixed bug in eraseNode2()
+  - Fixed bug in isTree()
+* GraphAL:
+  - Fixed bug in nrEdges()
+  - Fixed bug in addEdge()
+  - Fixed bug in isTree()
+  - Fixed bug in eraseNode()
+  - Fixed bug in printDot()
+* Fixed bug in createGraphGrid3D()
+* Fixed bug in createGraphRegular()
 
 
 libDAI-0.2.4 (2010-02-11)
@@ -318,9 +611,9 @@ Code cleanup:
 
 Miscellaneous improvements:
 * Now compiles also with MS Visual C++ (thanks to Jiuxiang Hu) and with
-  GCC under cygwin.
+  GCC under Cygwin.
 * Contributions by Peter Gober:
-  - Renamed variable _N in mr.* for compatibility with g++ under cygwin.
+  - Renamed variable _N in mr.* for compatibility with g++ under Cygwin.
 * Misc contributions by Giuseppe Passino:
   - removed "using namespace std;" from header files - bad practice;
   - moved header files in include/dai and sources in src;
@@ -708,4 +1001,4 @@ description in the help).
 
 0.1.0   (2006-02-28)
 --------------------
-First version worthy a version number.
+First version worthy of a version number.