Mercurial > hg > camir-aes2014
diff toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/ho1.m @ 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/bnt/examples/dynamic/ho1.m Tue Feb 10 15:05:51 2015 +0000 @@ -0,0 +1,156 @@ +function ho1() + +% Example of how to create a higher order DBN +% Written by Rainer Deventer <deventer@informatik.uni-erlangen.de> 3/28/03 + +bnet = createBNetNL(); + +%%%%%%%%%%%% + + +function bnet = createBNetNL(varargin) + % Generate a Bayesian network, which is able to model nonlinearities at +% the input. The only input is the order of the dynamic system. If this +% parameter is missing, the an order of two is assumed +if nargin > 0 + order = varargin{1} +else + order = 2; +end + +ss = 6; % For each time slice the following nodes are modeled + % ud(t_k) Discrete node, which decides whether saturation is reached. + % Node number 2 + % uv(t_k) Visible input node with node number 2 + % uh(t_k) Hidden input node with node number 3 + % y(t_k) Modeled output, Number 4 + % z(t_k) Disturbing variable, number 5 + % q(t_k), number6 6 + +intra = zeros(ss,ss); +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Within each timeslice ud(t_k) is connected with uv(t_k) and uh(t_k) % +% This part is used to model saturation % +% A connection from uv(t_k) to uh(t_k) is omitted % +% Additionally y(t_k) is connected with q(t_k). To model the disturbing% +% value z(t_k) is connected with q(t_k). % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +intra(1,2:3) = 1; % Connections ud(t_k) -> uv(t_k) and ud(t_k) -> uh(t_k) +intra(4:5,6) = 1; % Connectios y(t_k) -> q(t_k) and z(t_k) -> q(t_k) + + + +inter = zeros(ss,ss,order); +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% The Markov assumption is not met as connections from time slice t to t+2 % +% exist. % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +for i = 1:order + if i == 1 + inter(1,1,i) = 1; %Connect the discrete nodes. This is necessary to improve + %the disturbing reaction + inter(3,4,i) = 1; %Connect uh(t_{k-1}) with y(t_k) + inter(4,4,i) = 1; %Connect y(t_{k-1}) with y(t_k) + inter(5,5,i) = 1; %Connect z(t_{k-1}) with z(t_k) + else + inter(3,4,i) = 1; %Connect uh(t_{k-i}) with y(t_k) + inter(4,4,i) = 1; %Connect y(t_{k-i}) with y(t_k) + end +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Define the dimensions of the discrete nodes. Node 1 has two states % +% 1 = lower saturation reached % +% 2 = Upper saturation reached % +% Values in between are model by probabilities between 0 and 1 % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +node_sizes = ones(1,ss); +node_sizes(1) = 2; +dnodes = [1]; + +eclass = [1:6;7 2:3 8 9 6;7 2:3 10 11 6]; +bnet = mk_higher_order_dbn(intra,inter,node_sizes,... + 'discrete',dnodes,... + 'eclass',eclass); + +cov_high = 400; +cov_low = 0.01; +weight1 = randn(1,1); +weight2 = randn(1,1); +weight3 = randn(1,1); +weight4 = randn(1,1); + +numOfNodes = 5 + order; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Nodes of the first time-slice % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Discrete input node, +bnet.CPD{1} = tabular_CPD(bnet,1,'CPT',[1/2 1/2],'adjustable',0); + + +% Modeled visible input +bnet.CPD{2} = gaussian_CPD(bnet,2,'mean',[0 10],'clamp_mean',1,... + 'cov',[10 10],'clamp_cov',1); + +% Modeled hidden input +bnet.CPD{3} = gaussian_CPD(bnet,3,'mean',[0, 10],'clamp_mean',1,... + 'cov',[0.1 0.1],'clamp_cov',1); + +% Modeled output in the first timeslice, thus there are no parents +% Usuallz the output nodes get a low covariance. But in the first +% time-slice a prediction of the output is not possible due to +% missing information +bnet.CPD{4} = gaussian_CPD(bnet,4,'mean',0,'clamp_mean',1,... + 'cov',cov_high,'clamp_cov',1); + +%Disturbance +bnet.CPD{5} = gaussian_CPD(bnet,5,'mean',0,... + 'cov',[4],... + 'clamp_mean',1,... + 'clamp_cov',1); + +%Observed output. +bnet.CPD{6} = gaussian_CPD(bnet,6,'mean',0,... + 'clamp_mean',1,... + 'cov',cov_low,'clamp_cov',1,... + 'weights',[1 1],'clamp_weights',1); + +% Discrete node at second time slice +bnet.CPD{7} = tabular_CPD(bnet,7,'CPT',[0.6 0.4 0.4 0.6],'adjustable',0); +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Node for the model output % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +bnet.CPD{8} = gaussian_CPD(bnet,10,'mean',0,... + 'cov',cov_high,... + 'clamp_mean',1,... + 'clamp_cov',1); +% 'weights',[0.0791 0.9578]); + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Node for the disturbance % +%%%%%%%%%%%%%%%%%%%%%%%%%%%% +bnet.CPD{9} = gaussian_CPD(bnet,11,'mean',0,'clamp_mean',1,... + 'cov',[4],'clamp_cov',1,... + 'weights',[1],'clamp_weights',1); + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Node for the model output % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +bnet.CPD{10} = gaussian_CPD(bnet,16,'mean',0,'clamp_mean',1,... + 'cov',cov_low,'clamp_cov',1); +% 'weights',[0.0188 -0.0067 0.0791 0.9578]); + + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Node for the disturbance % +%%%%%%%%%%%%%%%%%%%%%%%%%%%% +bnet.CPD{11} = gaussian_CPD(bnet,17,'mean',0,'clamp_mean',1,... + 'cov',[0.2],'clamp_cov',1,... + 'weights',[1],'clamp_weights',1); + + + +