Mercurial > hg > camir-aes2014
diff toolboxes/FullBNT-1.0.7/docs/changelog.html @ 0:e9a9cd732c1e tip
first hg version after svn
author | wolffd |
---|---|
date | Tue, 10 Feb 2015 15:05:51 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toolboxes/FullBNT-1.0.7/docs/changelog.html Tue Feb 10 15:05:51 2015 +0000 @@ -0,0 +1,1617 @@ +<title>History of changes to BNT</title> +<h1>History of changes to BNT</h1> + + +<h2>Changes since 4 Oct 2007</h2> + +<pre> +- 19 Oct 07 murphyk + +* BNT\CPDs\@noisyor_CPD\CPD_to_CPT.m: 2nd half of the file is a repeat +of the first half and was deleted (thanks to Karl Kuschner) + +* KPMtools\myismember.m should return logical for use in "assert" so add line at end + p=logical(p); this prevents "assert" from failing on an integer input. +(thanks to Karl Kuschner) + + + +- 17 Oct 07 murphyk + +* Updated subv2ind and ind2subv in KPMtools to Tom Minka's implementation. +His ind2subv is faster (vectorized), but I had to modify it so it +matched the behavior of my version when called with siz=[]. +His subv2inv is slightly simpler than mine because he does not treat +the siz=[2 2 ... 2] case separately. +Note: there is now no need to ever use the C versions of these +functions (or any others, for that matter). + +* removed BNT/add_BNT_to_path since no longer needed. + + + +- 4 Oct 07 murphyk + +* moved code from sourceforge to UBC website, made version 1.0.4 + +* @pearl_inf_engine/pearl_inf_engine line 24, default +argument for protocol changed from [] to 'parallel'. +Also, changed private/parallel_protocol so it doesn't write to an +empty file id (Matlab 7 issue) + +* added foptions (Matlab 7 issue) + +* changed genpathKPM to exclude svn. Put it in toplevel directory to +massively simplify the installation process. + +</pre> + + +<h2>Sourceforge changelog</h2> + +BNT was first ported to sourceforge on 28 July 2001 by yozhik. +BNT was removed from sourceforge on 4 October 2007 by Kevin Murphy; +that version is cached as <a +href="FullBNT-1.0.3.zip">FullBNT-1.0.3.zip</a>. +See <a href="ChangeLog.Sourceforge.txt">Changelog from +sourceforge</a> for a history of that version of the code, +which formed the basis of the branch currently on Murphy's web page. + + +<h2> Changes from August 1998 -- July 2004</h2> + +Kevin Murphy made the following changes to his own private copy. +(Other small changes were made between July 2004 and October 2007, but were +not documented.) +These may or may not be reflected in the sourceforge version of the +code (which was independently maintained). + + +<ul> +<li> 9 June 2004 +<ul> +<li> Changed tabular_CPD/learn_params back to old syntax, to make it +compatible with gaussian_CPD/learn_params (and re-enabled +generic_CPD/learn_params). +Modified learning/learn_params.m and learning/score_family +appropriately. +(In particular, I undid the change Sonia Leach had to make to +score_family to handle this asymmetry.) +Added examples/static/gaussian2 to test this new functionality. + +<li> Added bp_mrf2 (for generic pairwise MRFs) to +inference/static/@bp_belprop_mrf2_inf_engine. [MRFs are not +"officially" supported in BNT, so this code is just for expert +hackers.] + +<li> Added examples/static/nodeorderExample.m to illustrate importance +of using topological ordering. + +<li> Ran dos2unix on all *.c files within BNT to eliminate compiler +warnings. + +</ul> + +<li> 7 June 2004 +<ul> +<li> Replaced normaliseC with normalise in HMM/fwdback, for maximum +portability (and negligible loss in speed). +<li> Ensured FullBNT versions of HMM, KPMstats etc were as up-to-date +as stand-alone versions. +<li> Changed add_BNT_to_path so it no longer uses addpath(genpath()), +which caused Old versions of files to mask new ones. +</ul> + +<li> 18 February 2004 +<ul> +<li> A few small bug fixes to BNT, as posted to the Yahoo group. +<li> Several new functions added to KPMtools, KPMstats and Graphviz +(none needed by BNT). +<li> Added CVS to some of my toolboxes. +</ul> + +<li> 30 July 2003 +<ul> +<li> qian.diao fixed @mpot/set_domain_pot and @cgpot/set_domain_pot +<li> Marco Grzegorczyk found, and Sonia Leach fixed, a bug in +do_removal inside learn_struct_mcmc +</ul> + + +<li> 28 July 2003 +<ul> +<li> Sebastian Luehr provided 2 minor bug fixes, to HMM/fwdback (if any(scale==0)) +and FullBNT\HMM\CPDs\@hhmmQ_CPD\update_ess.m (wrong transpose). +</ul> + +<li> 8 July 2003 +<ul> +<li> Removed buggy BNT/examples/static/MRF2/Old/mk_2D_lattice.m which was +masking correct graph/mk_2D_lattice. +<li> Fixed bug in graph/mk_2D_lattice_slow in the non-wrap-around case +(line 78) +</ul> + + +<li> 2 July 2003 +<ul> +<li> Sped up normalize(., 1) in KPMtools by avoiding general repmat +<li> Added assign_cols and marginalize_table to KPMtools +</ul> + + +<li> 29 May 2003 +<ul> +<li> Modified KPMstats/mixgauss_Mstep so it repmats Sigma in the tied +covariance case (bug found by galt@media.mit.edu). + +<li> Bob Welch found bug in gaussian_CPDs/maximize_params in the way +cpsz was computed. + +<li> Added KPMstats/mixgauss_em, because my code is easier to +understand/modify than netlab's (at least for me!). + +<li> Modified BNT/examples/dynamic/viterbi1 to call multinomial_prob +instead of mk_dhmm_obs_lik. + +<li> Moved parzen window and partitioned models code to KPMstats. + +<li> Rainer Deventer fixed some bugs in his scgpot code, as follows: +1. complement_pot.m +Problems occured for probabilities equal to zero. The result is an +division by zero error. +<br> +2. normalize_pot.m +This function is used during the calculation of the log-likelihood. +For a probability of zero a warning "log of zero" occurs. I have not +realy fixed the bug. As a workaround I suggest to calculate the +likelihhod based on realmin (the smallest real number) instead of +zero. +<br> +3. recursive_combine_pots +At the beginning of the function there was no test for the trivial case, +which defines the combination of two potentials as equal to the direct +combination. The result might be an infinite recursion which leads to +a stack overflow in matlab. +</ul> + + + +<li> 11 May 2003 +<ul> +<li> Fixed bug in gaussian_CPD/maximize_params so it is compatible +with the new clg_Mstep routine +<li> Modified KPMstats/cwr_em to handle single cluster case +separately. +<li> Fixed bug in netlab/gmminit. +<li> Added hash tables to KPMtools. +</ul> + + +<li> 4 May 2003 +<ul> +<li> +Renamed many functions in KPMstats so the name of the +distribution/model type comes first, +Mstep_clg -> clg_Mstep, +Mstep_cond_gauss -> mixgauss_Mstep. +Also, renamed eval_pdf_xxx functions to xxx_prob, e.g. +eval_pdf_cond_mixgauss -> mixgauss_prob. +This is simpler and shorter. + +<li> +Renamed many functions in HMM toolbox so the name of the +distribution/model type comes first, +log_lik_mhmm -> mhmm_logprob, etc. +mk_arhmm_obs_lik has finally been re-implemented in terms of clg_prob +and mixgauss_prob (for slice 1). +Removed the Demos directory, and put them in the main directory. +This code is not backwards compatible. + +<li> Removed some of the my_xxx functions from KPMstats (these were +mostly copies of functions from the Mathworks stats toolbox). + + +<li> Modified BNT to take into account changes to KPMstats and +HMM toolboxes. + +<li> Fixed KPMstats/Mstep_clg (now called clg_Mstep) for spherical Gaussian case. +(Trace was wrongly parenthesised, and I used YY instead of YTY. +The spherical case now gives the same result as the full case +for cwr_demo.) +Also, mixgauss_Mstep now adds 0.01 to the ML estimate of Sigma, +to act as a regularizer (it used to add 0.01 to E[YY'], but this was +ignored in the spherical case). + +<li> Added cluster weighted regression to KPMstats. + +<li> Added KPMtools/strmatch_substr. +</ul> + + + +<li> 28 Mar 03 +<ul> +<li> Added mc_stat_distrib and eval_pdf_cond_prod_parzen to KPMstats +<li> Fixed GraphViz/arrow.m incompatibility with matlab 6.5 +(replace all NaN's with 0). +Modified GraphViz/graph_to_dot so it also works on windows. +<li> I removed dag_to_jtree and added graph_to_jtree to the graph +toolbox; the latter expects an undirected graph as input. +<li> I added triangulate_2Dlattice_demo.m to graph. +<li> Rainer Deventer fixed the stable conditional Gaussian potential +classes (scgpot and scgcpot) and inference engine +(stab_cond_gauss_inf_engine). +<li> Rainer Deventer added (stable) higher-order Markov models (see +inference/dynamic/@stable_ho_inf_engine). +</ul> + + +<li> 14 Feb 03 +<ul> +<li> Simplified learning/learn_params so it no longer returns BIC +score. Also, simplified @tabular_CPD/learn_params so it only takes +local evidence. +Added learn_params_dbn, which does ML estimation of fully observed +DBNs. +<li> Vectorized KPMstats/eval_pdf_cond_mixgauss for tied Sigma +case (much faster!). +Also, now works in log-domain to prevent underflow. +eval_pdf_mixgauss now calls eval_pdf_cond_mixgauss and inherits these benefits. +<li> add_BNT_to_path now calls genpath with 2 arguments if using +matlab version 5. +</ul> + + +<li> 30 Jan 03 +<ul> +<li> Vectorized KPMstats/eval_pdf_cond_mixgauss for scalar Sigma +case (much faster!) +<li> Renamed mk_dotfile_from_hmm to draw_hmm and moved it to the +GraphViz library. +<li> Rewrote @gaussian_CPD/maximize_params.m so it calls +KPMstats/Mstep_clg. +This fixes bug when using clamped means (found by Rainer Deventer +and Victor Eruhimov) +and a bug when using a Wishart prior (no gamma term in the denominator). +It is also easier to read. +I rewrote the technical report re-deriving all the equations in a +clearer notation, making the solution to the bugs more obvious. +(See www.ai.mit.edu/~murphyk/Papers/learncg.pdf) +Modified Mstep_cond_gauss to handle priors. +<li> Fixed bug reported by Ramgopal Mettu in which add_BNT_to_path +calls genpath with only 1 argument, whereas version 5 requires 2. +<li> Fixed installC and uninstallC to search in FullBNT/BNT. +</ul> + + +<li> 24 Jan 03 +<ul> +<li> Major simplification of HMM code. +The API is not backwards compatible. +No new functionality has been added, however. +There is now only one fwdback function, instead of 7; +different behaviors are controlled through optional arguments. +I renamed 'evaluate observation likelihood' (local evidence) +to 'evaluate conditional pdf', since this is more general. +i.e., renamed +mk_dhmm_obs_lik to eval_pdf_cond_multinomial, +mk_ghmm_obs_lik to eval_pdf_cond_gauss, +mk_mhmm_obs_lik to eval_pdf_cond_mog. +These functions have been moved to KPMstats, +so they can be used by other toolboxes. +ghmm's have been eliminated, since they are just a special case of +mhmm's with M=1 mixture component. +mixgauss HMMs can now handle a different number of +mixture components per state. +init_mhmm has been eliminated, and replaced with init_cond_mixgauss +(in KPMstats) and mk_leftright/rightleft_transmat. +learn_dhmm can no longer handle inputs (although this is easy to add back). +</ul> + + + + + +<li> 20 Jan 03 +<ul> +<li> Added arrow.m to GraphViz directory, and commented out line 922, +in response to a bug report. +</ul> + +<li> 18 Jan 03 +<ul> +<li> Major restructuring of BNT file structure: +all code that is not specific to Bayes nets has been removed; +these packages must be downloaded separately. (Or just download FullBNT.) +This makes it easier to ensure different toolboxes are consistent. +misc has been slimmed down and renamed KPMtools, so it can be shared by other toolboxes, +such as HMM and Kalman; some of the code has been moved to BNT/general. +The Graphics directory has been slimmed down and renamed GraphViz. +The graph directory now has no dependence on BNT (dag_to_jtree has +been renamed graph_to_jtree and has a new API). +netlab2 no longer contains any netlab files, only netlab extensions. +None of the functionality has changed. +</ul> + + + +<li> 11 Jan 03 +<ul> +<li> jtree_dbn_inf_engine can now support soft evidence. + +<li> Rewrote graph/dfs to make it clearer. +Return arguments have changed, as has mk_rooted_tree. +The acyclicity check for large undirected graphs can cause a stack overflow. +It turns out that this was not a bug, but is because Matlab's stack depth +bound is very low by default. + +<li> Renamed examples/dynamic/filter2 to filter_test1, so it does not +conflict with the filter2 function in the image processing toolbox. + +<li> Ran test_BNT on various versions of matlab to check compatibility. +On matlab 6.5 (r13), elapsed time = 211s, cpu time = 204s. +On matlab 6.1 (r12), elapsed time = 173s, cpu time = 164s. +On matlab 5.3 (r11), elapsed time = 116s, cpu time = 114s. +So matlab is apparently getting slower with time!! +(All results were with a linux PIII machine.) +</ul> + + +<li> 14 Nov 02 +<ul> +<li> Removed all ndx inference routines, since they are only +marginally faster on toy problems, +and are slower on large problems due to having to store and lookup +the indices (causes cache misses). +In particular, I removed jtree_ndx_inf_eng and jtree_ndx_dbn_inf_eng, all the *ndx* +routines from potentials/Tables, and all the UID stuff from +add_BNT_to_path, +thus simplifying the code. +This required fixing hmm_(2TBN)_inf_engine/marginal_nodes\family, +and updating installC. + + +<li> Removed jtree_C_inf_engine and jtree_C_dbn_inf_engine. +The former is basically the same as using jtree_inf_engine with +mutliply_by_table.c and marginalize_table.c. +The latter benefited slightly by assuming potentials were tables +(arrays not objects), but these negligible savings don't justify the +complexity and code duplication. + +<li> Removed stab_cond_gauss_inf_engine and +scg_unrolled_dbn_inf_engine, +written by shan.huang@intel.com, since the code was buggy. + +<li> Removed potential_engine, which was only experimental anyway. + +</ul> + + + +<li> 13 Nov 02 +<ul> +<li> <b>Released version 5</b>. +The previous version, released on 7/28/02, is available +<a href="BNT4.zip">here</a>. + +<li> Moved code and documentation to MIT. + +<li> Added repmat.c from Thomas Minka's lightspeed library. +Modified it so it can return an empty matrix. + +<li> Tomas Kocka fixed bug in the BDeu option for tabular_CPD, +and contributed graph/dag_to_eg, to convert to essential graphs. + +<!--<li> Wrote a <a href="../Papers/fastmult.pdf">paper</a> which explains +the ndx methods and the ndx cache BNT uses for fast +multiplication/ marginalization of multi-dimensional arrays. +--> + +<li> Modified definition of hhmmQ_CPD, so that Qps can now accept +parents in either the current or previous slice. + +<li> Added hhmm2Q_CPD class, which is simpler than hhmmQ (no embedded +sub CPDs, etc), and which allows the conditioning parents, Qps, to +be before (in the topological ordering) the F or Q(t-1) nodes. +See BNT/examples/dynamic/HHMM/Map/mk_map_hhmm for an example. +</ul> + + +<li> 7/28/02 +<ul> +<li> Changed graph/best_first_elim_order from min-fill to min-weight. +<li> Ernest Chan fixed bug in Kalman/sample_lds (G{i} becomes G{m} in +line 61). +<li> Tal Blum <bloom@cs.huji.ac.il> fixed bug in HMM/init_ghmm (Q +becomes K, the number of states). +<li> Fixed jtree_2tbn_inf_engine/set_fields so it correctly sets the +maximize flag to 1 even in subengines. +<li> Gary Bradksi did a simple mod to the PC struct learn alg so you can pass it an +adjacency matrix as a constraint. Also, CovMat.m reads a file and +produces a covariance matrix. +<li> KNOWN BUG in CPDs/@hhmmQ_CPD/update_ess.m at line 72 caused by +examples/dynamic/HHMM/Square/learn_square_hhmm_cts.m at line 57. +<li> +The old version is available from www.cs.berkeley.edu/~murphyk/BNT.24june02.zip +</ul> + + +<li> 6/24/02 +<ul> +<li> Renamed dag_to_dot as graph_to_dot and added support for +undirected graphs. +<li> Changed syntax for HHMM CPD constructors: no need to specify d/D +anymore,so they can be used for more complex models. +<li> Removed redundant first argument to mk_isolated_tabular_CPD. +</ul> + + +<li> 6/19/02 +<ul> +<li> +Fixed most probable explanation code. +Replaced calc_mpe with find_mpe, which is now a method of certain +inference engines, e.g., jtree, belprop. +calc_mpe_global has become the find_mpe method of global_joint. +calc_mpe_bucket has become the find_mpe method of var_elim. +calc_mpe_dbn has become the find_mpe method of smoother. +These routines now correctly find the jointly most probable +explanation, instead of the marginally most probable assignments. +See examples/static/mpe1\mpe2 and examples/dynamic/viterbi1 +for examples. +Removed maximize flag from constructor and enter_evidence +methods, since this no longer needs to be specified by the user. + +<li> Rainer Deventer fixed in a bug in +CPDs/@gaussian_CPD/udpate_ess.m: +now, hidden_cps = any(hidden_bitv(cps)), whereas it used to be +hidden_cps = all(hidden_bitv(cps)). + +</ul> + + +<li> 5/29/02 +<ul> +<li> CPDs/@gaussian_CPD/udpate_ess.m fixed WX,WXX,WXY (thanks to Rainer Deventer and +Yohsuke Minowa for spotting the bug). Does the C version work?? +<li> potentials/@cpot/mpot_to_cpot fixed K==0 case (thanks to Rainer Deventer). +<li> CPDs/@gaussian_CPD/log_prob_node now accepts non-cell array data +on self (thanks to rishi <rishi@capsl.udel.edu> for catching this). +</ul> + + +<li> 5/19/02 +<ul> + +<!-- +<li> Finally added <a href="../Papers/wei_ndx.ps.gz">paper</a> by Wei Hu (written +November 2001) +describing ndxB, ndxD, and ndxSD. +--> + +<li> Wei Hu made the following changes. +<ul> +<li> Memory leak repair: + a. distribute_evidence.c in static/@jtree_C directory + b. distribute_evidence.c in static/@jtree_ndx directory + c. marg_tablec. in Tables dir + +<li> Add "@jtree_ndx_2TBN_inf_engine" in inference/online dir + +<li> Add "@jtree_sparse_inf_engine" in inference/static dir + +<li> Add "@jtree_sparse_2TBN_inf_engine" in inference/online dir + +<li> Modify "tabular_CPD.m" in CPDs/@tabular_CPD dir , used for sparse + +<li> In "@discrete_CPD" dir: + a. modify "convert_to_pot.m", used for sparse + b. add "convert_to_sparse_table.c" + +<li> In "potentials/@dpot" dir: + a. remove "divide_by_pot.c" and "multiply_by_pot.c" + b. add "divide_by_pot.m" and "multiply_by_pot.m" + c. modify "dpot.m", "marginalize_pot.m" and "normalize_pot.m" + +<li> In "potentials/Tables" dir: + a. modify mk_ndxB.c;(for speedup) + b. add "mult_by_table.m", + "divide_by_table.m", + "divide_by_table.c", + "marg_sparse_table.c", + "mult_by_sparse_table.c", + "divide_by_sparse_table.c". + +<li> Modify "normalise.c" in misc dir, used for sparse. + +<li>And, add discrete2, discrete3, filter2 and filter3 as test applications in test_BNT.m +Modify installC.m +</ul> + +<li> Kevin made the following changes related to strong junction +trees: +<ul> +<li> jtree_inf_engin line 75: +engine.root_clq = length(engine.cliques); +the last clq is guaranteed to be a strong root + +<li> dag_to_jtree line 38: [jtree, root, B, w] = +cliques_to_jtree(cliques, ns); +never call cliques_to_strong_jtree + +<li> strong_elim_order: use Ilya's code instead of topological sorting. +</ul> + +<li> Kevin fixed CPDs/@generic_CPD/learn_params, so it always passes +in the correct hidden_bitv field to update_params. + +</ul>. + + +<li> 5/8/02 +<ul> + +<li> Jerod Weinman helped fix some bugs in HHMMQ_CPD/maximize_params. + +<li> Removed broken online inference from hmm_inf_engine. +It has been replaced filter_inf_engine, which can take hmm_inf_engine +as an argument. + +<li> Changed graph visualization function names. +'draw_layout' is now 'draw_graph', +'draw_layout_dbn' is now 'draw_dbn', +'plotgraph' is now 'dag_to_dot', +'plothmm' is now 'hmm_to_dot', +added 'dbn_to_dot', +'mkdot' no longer exists': its functioality has been subsumed by dag_to_dot. +The dot functions now all take optional args in string/value format. +</ul> + + +<li> 4/1/02 +<ul> +<li> Added online inference classes. +See BNT/inference/online and BNT/examples/dynamic/filter1. +This is work in progress. +<li> Renamed cmp_inference to cmp_inference_dbn, and made its + interface and behavior more similar to cmp_inference_static. +<li> Added field rep_of_eclass to bnet and dbn, to simplify +parameter tying (see ~murphyk/Bayes/param_tieing.html). +<li> Added gmux_CPD (Gaussian mulitplexers). +See BNT/examples/dynamic/SLAM/skf_data_assoc_gmux for an example. +<li> Modified the forwards sampling routines. +general/sample_dbn and sample_bnet now take optional arguments as +strings, and can sample with pre-specified evidence. +sample_bnet can only generate a single sample, and it is always a cell +array. +sample_node can only generate a single sample, and it is always a +scalar or vector. +This eliminates the false impression that the function was +ever vectorized (which was only true for tabular_CPDs). +(Calling sample_bnet inside a for-loop is unlikely to be a bottleneck.) +<li> Updated usage.html's description of CPDs (gmux) and inference +(added gibbs_sampling and modified the description of pearl). +<li> Modified BNT/Kalman/kalman_filter\smoother so they now optionally +take an observed input (control) sequence. +Also, optional arguments are now passed as strings. +<li> Removed BNT/examples/static/uci_data to save space. +</ul> + +<li> 3/14/02 +<ul> +<li> pearl_inf_engine now works for (vector) Gaussian nodes, as well +as discrete. compute_pi has been renamed CPD_to_pi. compute_lambda_msg + has been renamed CPD_to_lambda_msg. These are now implemented for + the discrete_CPD class instead of tabular_CPD. noisyor and + Gaussian have their own private implemenations. +Created examples/static/Belprop subdirectory. +<li> Added examples/dynamic/HHMM/Motif. +<li> Added Matt Brand's entropic prior code. +<li> cmp_inference_static has changed. It no longer returns err. It + can check for convergence. It can accept 'observed'. +</ul> + + +<li> 3/4/02 +<ul> +<li> Fixed HHMM code. Now BNT/examples/dynamic/HHMM/mk_abcd_hhmm +implements the example in the NIPS paper. See also +Square/sample_square_hhmm_discrete and other files. + +<li> Included Bhaskara Marthi's gibbs_sampling_inf_engine. Currently +this only works if all CPDs are tabular and if you call installC. + +<li> Modified Kalman/tracking_demo so it calls plotgauss2d instead of + gaussplot. + +<li> Included Sonia Leach's speedup of mk_rnd_dag. +My version created all NchooseK subsets, and then picked among them. Sonia +reorders the possible parents randomly and choose +the first k. This saves on having to enumerate the large number of +possible subsets before picking from one. + +<li> Eliminated BNT/inference/static/Old, which contained some old +.mexglx files which wasted space. +</ul> + + + +<li> 2/15/02 +<ul> +<li> Removed the netlab directory, since most of it was not being +used, and it took up too much space (the goal is to have BNT.zip be +less than 1.4MB, so if fits on a floppy). +The required files have been copied into netlab2. +</ul> + +<li> 2/14/02 +<ul> +<li> Shan Huang fixed most (all?) of the bugs in his stable CG code. +scg1-3 now work, but scg_3node and scg_unstable give different + behavior than that reported in the Cowell book. + +<li> I changed gaussplot so it plots an ellipse representing the + eigenvectors of the covariance matrix, rather than numerically + evaluating the density and using a contour plot; this + is much faster and gives better pictures. The new function is + called plotgauss2d in BNT/Graphics. + +<li> Joni Alon <jalon@cs.bu.edu> fixed some small bugs: + mk_dhmm_obs_lik called forwards with the wrong args, and + add_BNT_to_path should quote filenames with spaces. + +<li> I added BNT/stats2/myunidrnd which is called by learn_struct_mcmc. + +<li> I changed BNT/potentials/@dpot/multiply_by_dpot so it now says +Tbig.T(:) = Tbig.T(:) .* Ts(:); +</ul> + + +<li> 2/6/02 +<ul> +<li> Added hierarchical HMMs. See BNT/examples/dynamic/HHMM and +CPDs/@hhmmQ_CPD and @hhmmF_CPD. +<li> sample_dbn can now sample until a certain condition is true. +<li> Sonia Leach fixed learn_struct_mcmc and changed mk_nbrs_of_digraph +so it only returns DAGs. +Click <a href="sonia_mcmc.txt">here</a> for details of her changes. +</ul> + + +<li> 2/4/02 +<ul> +<li> Wei Hu fixed a bug in +jtree_ndx_inf_engine/collect\distribute_evidence.c which failed when +maximize=1. +<li> +I fixed various bugs to do with conditional Gaussians, +so mixexp3 now works (thansk to Gerry Fung <gerry.fung@utoronto.ca> + for spotting the error). Specifically: +Changed softmax_CPD/convert_to_pot so it now puts cts nodes in cdom, and no longer inherits + this function from discrete_CPD. + Changed root_CPD/convert_to_put so it puts self in cdom. +</ul> + + +<li> 1/31/02 +<ul> +<li> Fixed log_lik_mhmm (thanks to ling chen <real_lingchen@yahoo.com> +for spotting the typo) +<li> Now many scripts in examples/static call cmp_inference_static. +Also, SCG scripts have been simplified (but still don't work!). +<li> belprop and belprop_fg enter_evidence now returns [engine, ll, + niter], with ll=0, so the order of the arguments is compatible with other engines. +<li> Ensured that all enter_evidence methods support optional + arguments such as 'maximize', even if they ignore them. +<li> Added Wei Hu's potentials/Tables/rep_mult.c, which is used to + totally eliminate all repmats from gaussian_CPD/update_ess. +</ul> + + +<li> 1/30/02 +<ul> +<li> update_ess now takes hidden_bitv instead of hidden_self and +hidden_ps. This allows gaussian_CPD to distinguish hidden discrete and +cts parents. Now learn_params_em, as well as learn_params_dbn_em, + passes in this info, for speed. + +<li> gaussian_CPD update_ess is now vectorized for any case where all + the continuous nodes are observed (eg., Gaussian HMMs, AR-HMMs). + +<li> mk_dbn now automatically detects autoregressive nodes. + +<li> hmm_inf_engine now uses indexes in marginal_nodes/family for + speed. Marginal_ndoes can now only handle single nodes. + (SDndx is hard-coded, to avoid the overhead of using marg_ndx, + which is slow because of the case and global statements.) + +<li> add_ev_to_dmarginal now retains the domain field. + +<li> Wei Hu wrote potentials/Tables/repmat_and_mult.c, which is used to + avoid some of the repmat's in gaussian_CPD/update_ess. + +<li> installC now longer sets the global USEC, since USEC is set to 0 + by add_BNT_to_path, even if the C files have already been compiled + in a previous session. Instead, gaussian_CPD checks to + see if repmat_and_mult exists, and (bat1, chmm1, water1, water2) + check to see if jtree_C_inf_engine/collect_evidence exists. + Note that checking if a file exists is slow, so we do the check + inside the gaussian_CPD constructor, not inside update_ess. + +<li> uninstallC now deletes both .mex and .dll files, just in case I + accidently ship a .zip file with binaries. It also deletes mex + files from jtree_C_inf_engine. + +<li> Now marginal_family for both jtree_limid_inf_engine and + global_joint_inf_engine returns a marginal structure and + potential, as required by solve_limid. + Other engines (eg. jtree_ndx, hmm) are not required to return a potential. +</ul> + + + +<li> 1/22/02 +<ul> +<li> Added an optional argument to mk_bnet and mk_dbn which lets you +add names to nodes. This uses the new assoc_array class. + +<li> Added Yimin Zhang's (unfinished) classification/regression tree +code to CPDs/tree_CPD. + +</ul> + + + +<li> 1/14/02 +<ul> +<li> Incorporated some of Shan Huang's (still broken) stable CG code. +</ul> + + +<li> 1/9/02 +<ul> +<li> Yimin Zhang vectorized @discrete_CPD/prob_node, which speeds up +structure learning considerably. I fixed this to handle softmax CPDs. + +<li> Shan Huang changed the stable conditional Gaussian code to handle +vector-valued nodes, but it is buggy. + +<li> I vectorized @gaussian_CPD/update_ess for a special case. + +<li> Removed denom=min(1, ... Z) from gaussian_CPD/maximize_params +(added to cope with negative temperature for entropic prior), which +gives wrong results on mhmm1. +</ul> + + +<li> 1/7/02 + +<ul> +<li> Removed the 'xo' typo from mk_qmr_bnet. + +<li> convert_dbn_CPDs_to_tables has been vectorized; it is now +substantially faster to compute the conditional likelihood for long sequences. + +<li> Simplified constructors for tabular_CPD and gaussian_CPD, so they +now both only take the form CPD(bnet, i, ...) for named arguments - +the CPD('self', i, ...) format is gone. Modified mk_fgraph_given_ev +to use mk_isolated_tabular_CPD instead. + +<li> Added entropic prior to tabular and Gaussian nodes. +For tabular_CPD, changed name of arguments to the constructor to +distinguish Dirichlet and entropic priors. In particular, +tabular_CPD(bnet, i, 'prior', 2) is now +tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_weight', 2). + +<li> Added deterministic annealing to learn_params_dbn_em for use with +entropic priors. The old format learn(engine, cases, max_iter) has +been replaced by learn(engine, cases, 'max_iter', max_iter). + +<li> Changed examples/dynamic/bat1 and kjaerulff1, since default +equivalence classes have changed from untied to tied. +</ul> + +<li> 12/30/01 +<ul> +<li> DBN default equivalence classes for slice 2 has changed, so that +now parameters are tied for nodes with 'equivalent' parents in slices +1 and 2 (e.g., observed leaf nodes). This essentially makes passing in +the eclass arguments redundant (hooray!). +</ul> + + +<li> 12/20/01 +<ul> +<li> <b>Released version 4</b>. +Version 4 is considered a major new release +since it is not completely backwards compatible with V3. +Observed nodes are now specified when the bnet/dbn is created, +not when the engine is created. This changes the interface to many of +the engines, making the code no longer backwards compatible. +Hence support for non-named optional arguments (BNT2 style) has also +been removed; hence mk_dbn etc. requires arguments to be passed by name. + +<li> Ilya Shpitser's C code for triangulation now compiles under +Windows as well as Unix, thanks to Wei Hu. + +<li> All the ndx engines have been combined, and now take an optional +argument specifying what kind of index to use. + +<li> learn_params_dbn_em is now more efficient: +@tabular_CPD/update_ess for nodes whose families +are hidden does not need need to call add_evidence_to_dmarginal, which +is slow. + +<li> Wei Hu fixed bug in jtree_ndxD, so now the matlab and C versions +both work. + +<li> dhmm_inf_engine replaces hmm_inf_engine, since the former can +handle any kind of topology and is slightly more efficient. dhmm is +extended to handle Gaussian, as well as discrete, +observed nodes. The new hmm_inf_engine no longer supports online +inference (which was broken anyway). + +<li> Added autoregressive HMM special case to hmm_inf_engine for +speed. + +<li> jtree_ndxSD_dbn_inf_engine now computes likelihood of the +evidence in a vectorized manner, where possible, just like +hmm_inf_engine. + +<li> Added mk_limid, and hence simplified mk_bnet and mk_dbn. + + +<li> Gaussian_CPD now uses 0.01*I prior on covariance matrix by +default. To do ML estimation, set 'cov_prior_weight' to 0. + +<li> Gaussian_CPD and tabular_CPD +optional binary arguments are now set using 0/1 rather no 'no'/'yes'. + +<li> Removed Shan Huang's PDAG and decomposable graph code, which will +be put in a separate structure learning library. +</ul> + + +<li> 12/11/01 +<ul> +<li> Wei Hu fixed jtree_ndx*_dbn_inf_engine and marg_table.c. + +<li> Shan Huang contributed his implementation of stable conditional +Gaussian code (Lauritzen 1999), and methods to search through the +space of PDAGs (Markov equivalent DAGs) and undirected decomposable +graphs. The latter is still under development. +</ul> + + +<li> 12/10/01 +<ul> +<li> Included Wei Hu's new versions of the ndx* routines, which use +integers instead of doubles. The new versions are about 5 times faster +in C. In general, ndxSD is the best choice. + +<li> Fixed misc/add_ev_to_dmarginal so it works with the ndx routines +in bat1. + +<li> Added calc_mpe_dbn to do Viterbi parsing. + +<li> Updated dhmm_inf_engine so it computes marginals. +</ul> + + + +<li> 11/23/01 +<ul> +<li> learn_params now does MAP estimation (i.e., uses Dirichlet prior, +if define). Thanks to Simon Keizer skeizer@cs.utwente.nl for spotting +this. +<li> Changed plotgraph so it calls ghostview with the output of dotty, +instead of converting from .ps to .tif. The resulting image is much +easier to read. +<li> Fixed cgpot/multiply_by_pots.m. +<li> Wei Hu fixed ind2subv.c. +<li> Changed arguments to compute_joint_pot. +</ul> + + +<li> 11/1/01 +<ul> +<li> Changed sparse to dense in @dpot/multiply_pots, because sparse +arrays apparently cause a bug in the NT version of Matlab. + +<li> Fixed the bug in gaussian_CPD/log_prob_node.m which +incorrectly called the vectorized gaussian_prob with different means +when there were continuous parents and more than one case. +(Thanks to Dave Andre for finding this.) + +<li> Fixed the bug in root_CPD/convert_to_pot which did not check for +pot_type='g'. +(Thanks to Dave Andre for finding this.) + +<li> Changed calc_mpe and calc_mpe_global so they now return a cell array. + +<li> Combine pearl and loopy_pearl into a single inference engine +called 'pearl_inf_engine', which now takes optional arguments passed +in using the name/value pair syntax. +marginal_nodes/family now takes the optional add_ev argument (same as +jtree), which is the opposite of the previous shrink argument. + +<li> Created pearl_unrolled_dbn_inf_engine and "resurrected" +pearl_dbn_inf_engine in a simplified (but still broken!) form. + +<li> Wei Hi fixed the bug in ind2subv.c, so now ndxSD works. +He also made C versions of ndxSD and ndxB, and added (the unfinished) ndxD. + +</ul> + + +<li> 10/20/01 + +<ul> +<li> Removed the use_ndx option from jtree_inf, +and created 2 new inference engines: jtree_ndxSD_inf_engine and +jtree_ndxB_inf_engine. +The former stores 2 sets of indices for the small and difference +domains; the latter stores 1 set of indices for the big domain. +In Matlab, the ndxB version is often significantly faster than ndxSD +and regular jree, except when the clique size is large. +When compiled to C, the difference between ndxB and ndxSD (in terms of +speed) vanishes; again, both are faster than compiled jtree, except +when the clique size is large. +Note: ndxSD currently has a bug in it, so it gives the wrong results! +(The DBN analogs are jtree_dbn_ndxSD_inf_engine and +jtree_dbn_ndxB_inf_engine.) + +<li> Removed duplicate files from the HMM and Kalman subdirectories. +e.g., normalise is now only in BNT/misc, so when compiled to C, it +masks the unique copy of the Matlab version. +</ul> + + + +<li> 10/17/01 +<ul> +<li> Fixed bugs introduced on 10/15: +Renamed extract_gaussian_CPD_params_given_ev_on_dps.m to +gaussian_CPD_params_given_dps.m since Matlab can't cope with such long +names (this caused cg1 to fail). Fixed bug in +gaussian_CPD/convert_to_pot, which now calls convert_to_table in the +discrete case. + +<li> Fixed bug in bk_inf_engine/marginal_nodes. +The test 'if nodes < ss' is now +'if nodes <= ss' (bug fix due to Stephen seg_ma@hotmail.com) + +<li> Simplified uninstallC. +</ul> + + +<li> 10/15/01 +<ul> + +<li> Added use_ndx option to jtree_inf and jtree_dbn_inf. +This pre-computes indices for multiplying, dividing and marginalizing +discrete potentials. +This is like the old jtree_fast_inf_engine, but we use an extra level +of indirection to reduce the number of indices needed (see +uid_generator object). +Sometimes this is faster than the original way... +This is work in progress. + +<li> The constructor for dpot no longer calls myreshape, which is very +slow. +But new dpots still must call myones. +Hence discrete potentials are only sometimes 1D vectors (but should +always be thought of as multi-D arrays). This is work in progress. +</ul> + + +<li> 10/6/01 +<ul> +<li> Fixed jtree_dbn_inf_engine, and added kjaerulff1 to test this. +<li> Added option to jtree_inf_engine/marginal_nodes to return "full +sized" marginals, even on observed nodes. +<li> Clustered BK in examples/dynamic/bat1 seems to be broken, +so it has been commented out. +BK will be re-implemented on top of jtree_dbn, which should much more +efficient. +</ul> + +<li> 9/25/01 +<ul> +<li> jtree_dbn_inf_engine is now more efficient than calling BK with +clusters = exact, since it only uses the interface nodes, instead of +all of them, to maintain the belief state. +<li> Uninstalled the broken C version of strong_elim_order. +<li> Changed order of arguments to unroll_dbn_topology, so that intra1 +is no longer required. +<li> Eliminated jtree_onepass, which can be simulated by calling +collect_evidence on jtree. +<li> online1 is no longer in the test_BNT suite, since there is some +problem with online prediction with mixtures of Gaussians using BK. +This functionality is no longer supported, since doing it properly is +too much work. +</ul> +</li> + +<li> 9/7/01 +<ul> +<li> Added Ilya Shpitser's C triangulation code (43x faster!). +Currently this only compiles under linux; windows support is being added. +</ul> + + +<li> 9/5/01 +<ul> +<li> Fixed typo in CPDs/@tabular_kernel/convert_to_table (thanks, +Philippe!) +<li> Fixed problems with clamping nodes in tabular_CPD, learn_params, +learn_params_tabular, and bayes_update_params. See +BNT/examples/static/learn1 for a demo. +</ul> + + +<li> 9/3/01 +<ul> +<li> Fixed typo on line 87 of gaussian_CPD which caused error in cg1.m +<li> Installed Wei Hu's latest version of jtree_C_inf_engine, which +can now compute marginals on any clique/cluster. +<li> Added Yair Weiss's code to compute the Bethe free energy +approximation to the log likelihood in loopy_pearl (still need to add +this to belprop). The return arguments are now: engine, loglik and +niter, which is different than before. +</ul> + + + +<li> 8/30/01 +<ul> +<li> Fixed bug in BNT/examples/static/id1 which passed hard-coded +directory name to belprop_inf_engine. + +<li> Changed tabular_CPD and gaussian_CPD so they can now be created +without having to pass in a bnet. + +<li> Finished mk_fgraph_given_ev. See the fg* files in examples/static +for demos of factor graphs (work in progress). +</ul> + + + +<li> 8/22/01 +<ul> + +<li> Removed jtree_compiled_inf_engine, +since the C code it generated was so big that it would barf on large +models. + +<li> Tidied up the potentials/Tables directory. +Removed mk_marg/mult_ndx.c, +which have been superceded by the much faster mk_marg/mult_index.c +(written by Wei Hu). +Renamed the Matlab versions mk_marginalise/multiply_table_ndx.m +to be mk_marg/mult_index.m to be compatible with the C versions. +Note: nobody calls these routines anymore! +(jtree_C_inf_engine/enter_softev.c has them built-in.) +Removed mk_ndx.c, which was only used by jtree_compiled. +Removed mk_cluster_clq_ndx.m, mk_CPD_clq_ndx, and marginalise_table.m +which were not used. +Moved shrink_obs_dims_in_table.m to misc. + +<li> In potentials/@dpot directory: removed multiply_by_pot_C_old.c. +Now marginalize_pot.c can handle maximization, +and divide_by_pot.c has been implmented. +marginalize/multiply/divide_by_pot.m no longer have useC or genops options. +(To get the C versions, use installC.m) + +<li> Removed useC and genops options from jtree_inf_engine.m +To use the C versions, install the C code. + +<li> Updated BNT/installC.m. + +<li> Added fclose to @loopy_pearl_inf/enter_evidence. + +<li> Changes to MPE routines in BNT/general. +The maximize parameter is now specified inside enter_evidence +instead of when the engine is created. +Renamed calc_mpe_given_inf_engine to just calc_mpe. +Added Ron Zohar's optional fix to handle the case of ties. +Now returns log-likelihood instead of likelihood. +Added calc_mpe_global. +Removed references to genops in calc_mpe_bucket.m +Test file is now called mpe1.m + +<li> For DBN inference, filter argument is now passed by name, +as is maximize. This is NOT BACKWARDS COMPATIBLE. + +<li> Removed @loopy_dbn_inf_engine, which will was too complicated. +In the future, a new version, which applies static loopy to the +unrolled DBN, will be provided. + +<li> discrete_CPD class now contains the family sizes and supports the +method dom_sizes. This is because it could not access the child field +CPD.sizes, and mysize(CPT) may give the wrong answer. + +<li> Removed all functions of the form CPD_to_xxx, where xxx = dpot, cpot, +cgpot, table, tables. These have been replaced by convert_to_pot, +which takes a pot_type argument. +@discrete_CPD calls convert_to_table to implement a default +convert_to_pot. +@discrete_CPD calls CPD_to_CPT to implement a default +convert_to_table. +The convert_to_xxx routines take fewer arguments (no need to pass in +the globals node_sizes and cnodes!). +Eventually, convert_to_xxx will be vectorized, so it will operate on +all nodes in the same equivalence class "simultaneously", which should +be significantly quicker, at least for Gaussians. + +<li> Changed discrete_CPD/sample_node and prob_node to use +convert_to_table, instead of CPD_to_CPT, so mlp/softmax nodes can +benefit. + +<li> Removed @tabular_CPD/compute_lambda_msg_fast and +private/prod_CPD_and_pi_msgs_fast, since no one called them. + +<li> Renamed compute_MLE to learn_params, +by analogy with bayes_update_params (also because it may compute an +MAP estimate). + +<li> Renamed set_params to set_fields +and get_params to get_field for CPD and dpot objects, to +avoid confusion with the parameters of the CPD. + +<li> Removed inference/doc, which has been superceded +by the web page. + +<li> Removed inference/static/@stab_cond_gauss_inf_engine, which is +broken, and all references to stable CG. + +</ul> + + + + + +<li> 8/12/01 +<ul> +<li> I removed potentials/@dpot/marginalize_pot_max. +Now marginalize_pot for all potential classes take an optional third +argument, specifying whether to sum out or max out. +The dpot class also takes in optional arguments specifying whether to +use C or genops (the global variable USE_GENOPS has been eliminated). + +<li> potentials/@dpot/marginalize_pot has been simplified by assuming +that 'onto' is always in ascending order (i.e., we remove +Maynard-Reid's patch). This is to keep the code identical to the C +version and the other class implementations. + +<li> Added Ron Zohar's general/calc_mpe_bucket function, +and my general/calc_mpe_given_inf_engine, for calculating the most +probable explanation. + + +<li> Added Wei Hu's jtree_C_inf_engine. +enter_softev.c is about 2 times faster than enter_soft_evidence.m. + +<li> Added the latest version of jtree_compiled_inf_engine by Wei Hu. +The 'C' ndx_method now calls potentials/Tables/mk_marg/mult_index, +and the 'oldC' ndx_method calls potentials/Tables/mk_marg/mult_ndx. + +<li> Added potentials/@dpot/marginalize_pot_C.c and +multiply_by_pot_C.c by Wei Hu. +These can be called by setting the 'useC' argument in +jtree_inf_engine. + +<li> Added BNT/installC.m to compile all the mex files. + +<li> Renamed prob_fully_instantiated_bnet to log_lik_complete. + +<li> Added Shan Huang's unfinished stable conditional Gaussian +inference routines. +</ul> + + + +<li> 7/13/01 +<ul> +<li> Added the latest version of jtree_compiled_inf_engine by Wei Hu. +<li> Added the genops class by Doug Schwarz (see +BNT/genopsfun/README). This provides a 1-2x speed-up of +potentials/@dpot/multiply_by_pot and divide_by_pot. +<li> The function BNT/examples/static/qmr_compiled compares the +performance gains of these new functions. +</ul> + +<li> 7/6/01 +<ul> +<li> Made bk_inf_engine use the name/value argument syntax. This can +now do max-product (Viterbi) as well as sum-product +(forward-backward). +<li> Changed examples/static/mfa1 to use the new name/value argument +syntax. +</ul> + + +<li> 6/28/01 + +<ul> + +<li> <b>Released version 3</b>. +Version 3 is considered a major new release +since it is not completely backwards compatible with V2. +V3 supports decision and utility nodes, loopy belief propagation on +general graphs (including undirected), structure learning for non-tabular nodes, +a simplified way of handling optional +arguments to functions, +and many other features which are described below. +In addition, the documentation has been substantially rewritten. + +<li> The following functions can now take optional arguments specified +as name/value pairs, instead of passing arguments in a fixed order: +mk_bnet, jtree_inf_engine, tabular_CPD, gaussian_CPD, softmax_CPD, mlp_CPD, +enter_evidence. +This is very helpful if you want to use default values for most parameters. +The functions remain backwards compatible with BNT2. + +<li> dsoftmax_CPD has been renamed softmax_CPD, replacing the older +version of softmax. The directory netlab2 has been updated, and +contains weighted versions of some of the learning routines in netlab. +(This code is still being developed by P. Brutti.) + +<li> The "fast" versions of the inference engines, which generated +matlab code, have been removed. +@jtree_compiled_inf_engine now generates C code. +(This feature is currently being developed by Wei Hu of Intel (China), +and is not yet ready for public use.) + +<li> CPD_to_dpot, CPD_to_cpot, CPD_to_cgpot and CPD_to_upot +are in the process of being replaced by convert_to_pot. + +<li> determine_pot_type now takes as arguments (bnet, onodes) +instead of (onodes, cnodes, dag), +so it can detect the presence of utility nodes as well as continuous +nodes. +Hence this function is not backwards compatible with BNT2. + +<li> The structure learning code (K2, mcmc) now works with any node +type, not just tabular. +mk_bnets_tabular has been eliminated. +bic_score_family and dirichlet_score_family will be replaced by score_family. +Note: learn_struct_mcmc has a new interface that is not backwards +compatible with BNT2. + +<li> update_params_complete has been renamed bayes_update_params. +Also, learn_params_tabular has been replaced by learn_params, which +works for any CPD type. + +<li> Added decision/utility nodes. +</ul> + + +<li> 6/6/01 +<ul> +<li> Added soft evidence to jtree_inf_engine. +<li> Changed the documentation slightly (added soft evidence and +parameter tying, and separated parameter and structure learning). +<li> Changed the parameters of determine_pot_type, so it no longer +needs to be passed a DAG argument. +<li> Fixed parameter tying in mk_bnet (num. CPDs now equals num. equiv +classes). +<li> Made learn_struct_mcmc work in matlab version 5.2 (thanks to +Nimrod Megiddo for finding this bug). +<li> Made 'acyclic.m' work for undirected graphs. +</ul> + + +<li> 5/23/01 +<ul> +<li> Added Tamar Kushnir's code for the IC* algorithm +(learn_struct_pdag_ic_star). This learns the +structure of a PDAG, and can identify the presence of latent +variables. + +<li> Added Yair Weiss's code for computing the MAP assignment using +junction tree (i.e., a new method called @dpot/marginalize_pot_max +instead of marginalize_pot.) + +<li> Added @discrete_CPD/prob_node in addition to log_prob_node to handle +deterministic CPDs. +</ul> + + +<li> 5/12/01 +<ul> +<li> Pierpaolo Brutti updated his mlp and dsoftmax CPD classes, +and improved the HME code. + +<li> HME example now added to web page. (The previous example was non-hierarchical.) + +<li> Philippe Leray (author of the French documentation for BNT) +pointed out that I was including netlab.tar unnecessarily. +</ul> + + +<li> 5/4/01 +<ul> +<li> Added mlp_CPD which defines a CPD as a (conditional) multi-layer perceptron. +This class was written by Pierpaolo Brutti. + +<li> Added hierarchical mixtures of experts demo (due to Pierpaolo Brutti). + +<li> Fixed some bugs in dsoftmax_CPD. + +<li> Now the BNT distribution includes the whole +<a href="http://www.ncrg.aston.ac.uk/netlab/">Netlab</a> library in a +subdirectory. +It also includes my HMM and Kalman filter toolboxes, instead of just +fragments of them. +</ul> + + +<li> 5/2/01 +<ul> +<li> gaussian_inf_engine/enter_evidence now correctly returns the +loglik, even if all nodes are instantiated (bug fix due to +Michael Robert James). + +<li> Added dsoftmax_CPD which allows softmax nodes to have discrete +and continuous parents; the discrete parents act as indices into the +parameters for the continuous node, by analogy with conditional +Gaussian nodes. This class was written by Pierpaolo Brutti. +</ul> + + +<li> 3/27/01 +<ul> +<li> learn_struct_mcmc no longer returns sampled_bitv. +<li> Added mcmc_sample_to_hist to post-process the set of samples. +</ul> + +<li> 3/21/01 +<ul> +<li> Changed license from UC to GNU Library GPL. + +<li> Made all CPD constructors accept 0 arguments, so now bnets can be +saved to and loaded from files. + +<li> Improved the implementation of sequential and batch Bayesian +parameter learning for tabular CPDs with completely observed data (see +log_marg_lik_complete and update_params_complete). This code also +handles interventional data. + +<li> Added MCMC structure learning for completely observed, discrete, +static BNs. + +<li> Started implementing Bayesian estimation of linear Gaussian +nodes. See root_gaussian_CPD and +linear_gaussian_CPD. The old gaussian_CPD class has not been changed. + +<li> Renamed evaluate_CPD to log_prob_node, and simplified its +arguments. + +<li> Renamed sample_CPD to sample_node, simplified its +arguments, and vectorized it. + +<li> Renamed "learn_params_tabular" to "update_params_complete". +This does Bayesian updating, but no longer computes the BIC score. + +<li> Made routines for completely observed networks (sampling, +complete data likelihood, etc.) handle cell arrays or regular arrays, +which are faster. +If some nodes are not scalars, or are hidden, you must use cell arrays. +You must convert to a cell array before passing to an inference routine. + +<li> Fixed bug in gaussian_CPD constructor. When creating CPD with +more than 1 discrete parent with random parameters, the matrices were +the wrong shape (Bug fix due to Xuejing Sun). +</ul> + + + +<li> 11/24/00 +<ul> +<li> Renamed learn_params and learn_params_dbn to learn_params_em/ +learn_params_dbn_em. The return arguments are now [bnet, LLtrace, +engine] instead of [engine, LLtrace]. +<li> Added structure learning code for static nets (K2, PC). +<li> Renamed learn_struct_inter_full_obs as learn_struct_dbn_reveal, +and reimplemented it to make it simpler and faster. +<li> Added sequential Bayesian parameter learning (learn_params_tabular). +<li> Major rewrite of the documentation. +</ul> + +<!-- +<li> 6/1/00 +<ul> +<li> Subtracted 1911 off the counter, so now it counts hits from +5/22/00. (The initial value of 1911 was a conservative lower bound on the number of +hits from the time the page was created.) +</ul> +--> + +<li> 5/22/00 +<ul> +<li> Added online filtering and prediction. +<li> Added the factored frontier and loopy_dbn algorithms. +<li> Separated the online user manual into two, for static and dynamic +networks. +<!-- +<li> Added a counter to the BNT web page, and initialized it to 1911, +which is the number of people who have downloaded my software (BNT and +other toolboxes) since 8/24/98. +--> +<li> Added a counter to the BNT web page. +<!-- +Up to this point, 1911 people had downloaded my software (BNT and +other toolboxes) since 8/24/98. +--> +</ul> + + +<li> 4/27/00 +<ul> +<li> Fixed the typo in bat1.m +<li> Added preliminary code for online inference in DBNs +<li> Added coupled HMM example +</ul> + +<li> 4/23/00 +<ul> +<li> Fixed the bug in the fast inference routines where the indices +are empty (arises in bat1.m). +<li> Sped up marginal_family for the fast engines by precomputing indices. +</ul> + +<li> 4/17/00 +<ul> +<li> Simplified implementation of BK_inf_engine by using soft evidence. +<li> Added jtree_onepass_inf_engine (which computes a single marginal) +and modified jtree_dbn_fast to use it. +</ul> + +<li> 4/14/00 +<ul> +<li> Added fast versions of jtree and BK, which are +designed for models where the division into hidden/observed is fixed, +and all hidden variables are discrete. These routines are 2-3 times +faster than their non-fast counterparts. + +<li> Added graph drawing code +contributed by Ali Taylan Cemgil from the University of Nijmegen. +</ul> + +<li> 4/10/00 +<ul> +<li> Distinguished cnodes and cnodes_slice in DBNs so that kalman1 +works with BK. +<li> Removed dependence on cellfun (which only exists in matlab 5.3) +by adding isemptycell. Now the code works in 5.2. +<li> Changed the UC copyright notice. +</ul> + + + +<li> 3/29/00 +<ul> +<li><b>Released BNT 2.0</b>, now with objects! +Here are the major changes. + +<li> There are now 3 classes of objects in BNT: +Conditional Probability Distributions, potentials (for junction tree), +and inference engines. +Making an inference algorithm (junction tree, sampling, loopy belief +propagation, etc.) an object might seem counter-intuitive, but in +fact turns out to be a good idea, since the code and documentation +can be made modular. +(In Java, each algorithm would be a class that implements the +inferenceEngine interface. Since Matlab doesn't support interfaces, +inferenceEngine is an abstract (virtual) base class.) + +<p> +<li> +In version 1, instead of Matlab's built-in objects, +I used structs and a + simulated dispatch mechanism based on the type-tag system in the + classic textbook by Abelson + and Sussman ("Structure and Interpretation of Computer Programs", + MIT Press, 1985). This required editing the dispatcher every time a + new object type was added. It also required unique (and hence long) + names for each method, and allowed the user unrestricted access to + the internal state of objects. + +<p> +<li> The Bayes net itself is now a lightweight struct, and can be +used to specify a model independently of the inference algorithm used +to process it. +In version 1, the inference engine was stored inside the Bayes net. + +<!-- +See the list of <a href="differences2.html">changes from version +1</a>. +--> +</ul> + + + +<li> 11/24/99 +<ul> +<li> Added fixed lag smoothing, online EM and the ability to learn +switching HMMs (POMDPs) to the HMM toolbox. +<li> Renamed the HMM toolbox function 'mk_dhmm_obs_mat' to +'mk_dhmm_obs_lik', and similarly for ghmm and mhmm. Updated references +to these functions in BNT. +<li> Changed the order of return params from kalman_filter to make it +more natural. Updated references to this function in BNT. +</ul> + + + +<li>10/27/99 +<ul> +<li>Fixed line 42 of potential/cg/marginalize_cgpot and lines 32-39 of bnet/add_evidence_to_marginal +(thanks to Rainer Deventer for spotting these bugs!) +</ul> + + +<li>10/21/99 +<ul> +<li>Completely changed the blockmatrix class to make its semantics +more sensible. The constructor is not backwards compatible! +</ul> + +<li>10/6/99 +<ul> +<li>Fixed all_vals = cat(1, vals{:}) in user/enter_evidence +<li>Vectorized ind2subv and sub2indv and removed the C versions. +<li>Made mk_CPT_from_mux_node much faster by having it call vectorized +ind2subv +<li>Added Sondhauss's bug fix to line 68 of bnet/add_evidence_to_marginal +<li>In dbn/update_belief_state, instead of adding eps to likelihood if 0, +we leave it at 0, and set the scale factor to 0 instead of dividing. +</ul> + +<li>8/19/99 +<ul> +<li>Added Ghahramani's mfa code to examples directory to compare with +fa1, which uses BNT +<li>Changed all references of assoc to stringmatch (e.g., in +examples/mk_bat_topology) +</ul> + +<li>June 1999 +<ul> +<li><b>Released BNT 1.0</b> on the web. +</ul> + + +<li>August 1998 +<ul> +<li><b>Released BNT 0.0</b> via email. +</ul> + + +<li>October 1997 +<ul> +<li>First started working on Matlab version of BNT. +</ul> + +<li>Summer 1997 +<ul> +<li> First started working on C++ version of BNT while working at DEC (now Compaq) CRL. +</ul> + +<!-- +<li>Fall 1996 +<ul> +<li>Made a C++ program that generates DBN-specific C++ code +for inference using the frontier algorithm. +</ul> + +<li>Fall 1995 +<ul> +<li>Arrive in Berkeley, and first learn about Bayes Nets. Start using +Geoff Zweig's C++ code. +</ul> +--> + +</ul>