From 8070dc963753142bb86c4ed698d91fd623ed28e7 Mon Sep 17 00:00:00 2001 From: ziejd2 Date: Thu, 28 Sep 2017 15:04:40 -0500 Subject: BNW using Octave instead of Matlab. This version of BNW should perform the same as the original version. The only difference is that it uses Octave instead of Matlab when running BayesNet Toolbox during parameter learning. I am calling this BNW_1.02. It can be accessed at: compbio.uthsc.edu/BNW_1.02 --- .../BNT/inference/@inf_engine/CVS/Entries | 7 +++++++ .../BNT/inference/@inf_engine/CVS/Entries.Log | 1 + .../BNT/inference/@inf_engine/CVS/Repository | 1 + .../bnt-master/BNT/inference/@inf_engine/CVS/Root | 1 + .../BNT/inference/@inf_engine/Old/CVS/Entries | 3 +++ .../BNT/inference/@inf_engine/Old/CVS/Repository | 1 + .../BNT/inference/@inf_engine/Old/CVS/Root | 1 + .../@inf_engine/Old/marginal_family_pot.m | 14 +++++++++++++ .../BNT/inference/@inf_engine/Old/observed_nodes.m | 5 +++++ .../BNT/inference/@inf_engine/bnet_from_engine.m | 12 +++++++++++ .../BNT/inference/@inf_engine/get_field.m | 15 ++++++++++++++ .../BNT/inference/@inf_engine/inf_engine.m | 6 ++++++ .../BNT/inference/@inf_engine/marginal_family.m | 24 ++++++++++++++++++++++ .../BNT/inference/@inf_engine/set_fields.m | 13 ++++++++++++ .../BNT/inference/@inf_engine/update_engine.m | 7 +++++++ 15 files changed, 111 insertions(+) create mode 100644 sourcecodes/bnt-master/BNT/inference/@inf_engine/CVS/Entries create mode 100644 sourcecodes/bnt-master/BNT/inference/@inf_engine/CVS/Entries.Log create mode 100644 sourcecodes/bnt-master/BNT/inference/@inf_engine/CVS/Repository create mode 100644 sourcecodes/bnt-master/BNT/inference/@inf_engine/CVS/Root create mode 100644 sourcecodes/bnt-master/BNT/inference/@inf_engine/Old/CVS/Entries create mode 100644 sourcecodes/bnt-master/BNT/inference/@inf_engine/Old/CVS/Repository create mode 100644 sourcecodes/bnt-master/BNT/inference/@inf_engine/Old/CVS/Root create mode 100644 sourcecodes/bnt-master/BNT/inference/@inf_engine/Old/marginal_family_pot.m create mode 100644 sourcecodes/bnt-master/BNT/inference/@inf_engine/Old/observed_nodes.m create mode 100644 sourcecodes/bnt-master/BNT/inference/@inf_engine/bnet_from_engine.m create mode 100644 sourcecodes/bnt-master/BNT/inference/@inf_engine/get_field.m create mode 100644 sourcecodes/bnt-master/BNT/inference/@inf_engine/inf_engine.m create mode 100644 sourcecodes/bnt-master/BNT/inference/@inf_engine/marginal_family.m create mode 100644 sourcecodes/bnt-master/BNT/inference/@inf_engine/set_fields.m create mode 100644 sourcecodes/bnt-master/BNT/inference/@inf_engine/update_engine.m (limited to 'sourcecodes/bnt-master/BNT/inference/@inf_engine') diff --git a/sourcecodes/bnt-master/BNT/inference/@inf_engine/CVS/Entries b/sourcecodes/bnt-master/BNT/inference/@inf_engine/CVS/Entries new file mode 100644 index 00000000..a5ebeece --- /dev/null +++ b/sourcecodes/bnt-master/BNT/inference/@inf_engine/CVS/Entries @@ -0,0 +1,7 @@ +/bnet_from_engine.m/1.1.1.1/Wed May 29 15:59:56 2002// +/get_field.m/1.1.1.1/Wed May 29 15:59:56 2002// +/inf_engine.m/1.1.1.1/Wed May 29 15:59:56 2002// +/marginal_family.m/1.1.1.1/Wed May 29 15:59:56 2002// +/set_fields.m/1.1.1.1/Wed May 29 15:59:56 2002// +/update_engine.m/1.1.1.1/Wed May 29 15:59:56 2002// +D diff --git a/sourcecodes/bnt-master/BNT/inference/@inf_engine/CVS/Entries.Log b/sourcecodes/bnt-master/BNT/inference/@inf_engine/CVS/Entries.Log new file mode 100644 index 00000000..24f16336 --- /dev/null +++ b/sourcecodes/bnt-master/BNT/inference/@inf_engine/CVS/Entries.Log @@ -0,0 +1 @@ +A D/Old//// diff --git a/sourcecodes/bnt-master/BNT/inference/@inf_engine/CVS/Repository b/sourcecodes/bnt-master/BNT/inference/@inf_engine/CVS/Repository new file mode 100644 index 00000000..07b838d4 --- /dev/null +++ b/sourcecodes/bnt-master/BNT/inference/@inf_engine/CVS/Repository @@ -0,0 +1 @@ +FullBNT/BNT/inference/@inf_engine diff --git a/sourcecodes/bnt-master/BNT/inference/@inf_engine/CVS/Root b/sourcecodes/bnt-master/BNT/inference/@inf_engine/CVS/Root new file mode 100644 index 00000000..f3bd14a6 --- /dev/null +++ b/sourcecodes/bnt-master/BNT/inference/@inf_engine/CVS/Root @@ -0,0 +1 @@ +:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt diff --git a/sourcecodes/bnt-master/BNT/inference/@inf_engine/Old/CVS/Entries b/sourcecodes/bnt-master/BNT/inference/@inf_engine/Old/CVS/Entries new file mode 100644 index 00000000..ce1f8c1e --- /dev/null +++ b/sourcecodes/bnt-master/BNT/inference/@inf_engine/Old/CVS/Entries @@ -0,0 +1,3 @@ +/marginal_family_pot.m/1.1.1.1/Wed May 29 15:59:56 2002// +/observed_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002// +D diff --git a/sourcecodes/bnt-master/BNT/inference/@inf_engine/Old/CVS/Repository b/sourcecodes/bnt-master/BNT/inference/@inf_engine/Old/CVS/Repository new file mode 100644 index 00000000..de36d64e --- /dev/null +++ b/sourcecodes/bnt-master/BNT/inference/@inf_engine/Old/CVS/Repository @@ -0,0 +1 @@ +FullBNT/BNT/inference/@inf_engine/Old diff --git a/sourcecodes/bnt-master/BNT/inference/@inf_engine/Old/CVS/Root b/sourcecodes/bnt-master/BNT/inference/@inf_engine/Old/CVS/Root new file mode 100644 index 00000000..f3bd14a6 --- /dev/null +++ b/sourcecodes/bnt-master/BNT/inference/@inf_engine/Old/CVS/Root @@ -0,0 +1 @@ +:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt diff --git a/sourcecodes/bnt-master/BNT/inference/@inf_engine/Old/marginal_family_pot.m b/sourcecodes/bnt-master/BNT/inference/@inf_engine/Old/marginal_family_pot.m new file mode 100644 index 00000000..c1e63710 --- /dev/null +++ b/sourcecodes/bnt-master/BNT/inference/@inf_engine/Old/marginal_family_pot.m @@ -0,0 +1,14 @@ +function pot = marginal_family_pot(engine, i) +% MARGINAL_FAMILY_POT Compute the marginal on i's family and return as a potentila (inf_engine) +% function pot = marginal_family_pot(engine,i) + +% This function is only called by solve_limid. +% It requires that engine's marginal_family function return a potential. +% This is true for jtree_inf_engine, but not for, say, jtree_ndx_inf_engine. +% All limids must be solved using potentials, +% but this is not true for bnets. + +%[m, pot] = marginal_family(engine, i); + +bnet = bnet_from_engine(engine); +[m, pot] = marginal_nodes(engine, family(bnet.dag, i)); diff --git a/sourcecodes/bnt-master/BNT/inference/@inf_engine/Old/observed_nodes.m b/sourcecodes/bnt-master/BNT/inference/@inf_engine/Old/observed_nodes.m new file mode 100644 index 00000000..97fccdb3 --- /dev/null +++ b/sourcecodes/bnt-master/BNT/inference/@inf_engine/Old/observed_nodes.m @@ -0,0 +1,5 @@ +function onodes = observed_nodes(engine) +% OBSERVED_NODES Return nodes that are guaranteed to be observed, indep of evidence (generic inf_engine) +% onodes = observed_nodes(engine) + +onodes = []; diff --git a/sourcecodes/bnt-master/BNT/inference/@inf_engine/bnet_from_engine.m b/sourcecodes/bnt-master/BNT/inference/@inf_engine/bnet_from_engine.m new file mode 100644 index 00000000..cf579fb0 --- /dev/null +++ b/sourcecodes/bnt-master/BNT/inference/@inf_engine/bnet_from_engine.m @@ -0,0 +1,12 @@ +function bnet = bnet_from_engine(engine) +% BNET_FROM_ENGINE Return the bnet structure stored inside the engine (inf_engine) +% bnet = bnet_from_engine(engine) + +bnet = engine.bnet; + +% We cannot write 'engine.bnet' without writing a 'subsref' function, +% since engine is an object with private parts. +% The bnet field should be the only thing external users of the engine should need access to. +% We do not pass bnet as a separate argument, since it could get out of synch with the one +% encoded inside the engine. + diff --git a/sourcecodes/bnt-master/BNT/inference/@inf_engine/get_field.m b/sourcecodes/bnt-master/BNT/inference/@inf_engine/get_field.m new file mode 100644 index 00000000..a1d16335 --- /dev/null +++ b/sourcecodes/bnt-master/BNT/inference/@inf_engine/get_field.m @@ -0,0 +1,15 @@ +function val = get_field(engine, name) +% GET_FIELD Get the value of a named field from a generic engine +% val = get_field(engine, name) +% +% The following fields can be accessed +% +% bnet +% +% e.g., bnet = get_field(engine, 'bnet') + +switch name + case 'bnet', val = engine.bnet; + otherwise, + error(['invalid argument name ' name]); +end diff --git a/sourcecodes/bnt-master/BNT/inference/@inf_engine/inf_engine.m b/sourcecodes/bnt-master/BNT/inference/@inf_engine/inf_engine.m new file mode 100644 index 00000000..f08e2438 --- /dev/null +++ b/sourcecodes/bnt-master/BNT/inference/@inf_engine/inf_engine.m @@ -0,0 +1,6 @@ +function engine = inf_engine(bnet) + +engine.bnet = bnet; +engine = class(engine, 'inf_engine'); + + diff --git a/sourcecodes/bnt-master/BNT/inference/@inf_engine/marginal_family.m b/sourcecodes/bnt-master/BNT/inference/@inf_engine/marginal_family.m new file mode 100644 index 00000000..0107f1d3 --- /dev/null +++ b/sourcecodes/bnt-master/BNT/inference/@inf_engine/marginal_family.m @@ -0,0 +1,24 @@ +function m = marginal_family(engine, i, t) +% MARGINAL_FAMILY Compute the marginal on i's family (inf_engine) +% m = marginal_family(engine, i, t) +% +% t defaults to 1. + +if nargin < 3, t = 1; end + +bnet = bnet_from_engine(engine); +if t==1 + m = marginal_nodes(engine, family(bnet.dag, i)); +else + ss = length(bnet.intra); + fam = family(bnet.dag, i+ss); + if any(fam<=ss) + % i has a parent in the preceeding slice + % Hence the lowest numbered slice containing the family is t-1 + m = marginal_nodes(engine, fam, t-1); + else + % The family all fits inside slice t + % Hence shift the indexes back to slice 1 + m = marginal_nodes(engine, fam-ss, t); + end +end diff --git a/sourcecodes/bnt-master/BNT/inference/@inf_engine/set_fields.m b/sourcecodes/bnt-master/BNT/inference/@inf_engine/set_fields.m new file mode 100644 index 00000000..e75cfa45 --- /dev/null +++ b/sourcecodes/bnt-master/BNT/inference/@inf_engine/set_fields.m @@ -0,0 +1,13 @@ +function engine = set_fields(engine, varargin) +% SET_FIELDS Set the fields for a generic engine +% engine = set_fields(engine, name/value pairs) +% +% e.g., engine = set_fields(engine, 'maximize', 1) + +args = varargin; +nargs = length(args); +for i=1:2:nargs + switch args{i}, + case 'maximize', engine.maximize = args{i+1}; + end +end diff --git a/sourcecodes/bnt-master/BNT/inference/@inf_engine/update_engine.m b/sourcecodes/bnt-master/BNT/inference/@inf_engine/update_engine.m new file mode 100644 index 00000000..afafdeb9 --- /dev/null +++ b/sourcecodes/bnt-master/BNT/inference/@inf_engine/update_engine.m @@ -0,0 +1,7 @@ +function engine = update_engine(engine, newCPDs) +% UPDATE_ENGINE Update the engine to take into account the new parameters (inf_engine). +% engine = update_engine(engine, newCPDs) +% +% This generic method is suitable for engines that do not process the parameters until 'enter_evidence'. + +engine.bnet.CPD = newCPDs; -- cgit 1.4.1