clc
clear all
close all

% *************************************************************************
% This script reproduces Figure 3G of the manuscript.
%   Florian Raudies, 01/30/2014, Boston University.
%   This script will run for about 35 minutes.
% *************************************************************************

LABEL_SIZE = 16;

NLayer      = 1:6;
nNLayer     = length(NLayer);
nHidden     = 40;
nRun        = 50;
nBlock      = 200;
Err         = zeros(nRun,nNLayer);
LetterLabel = {'A','B','C','D'};
NumberLabel = {'1','2','3','4'};

tic
for iRun = 1:nRun,
    % Set seed for random number generator to be able to replicate data.
    rng(1+iRun);
    fprintf('Working on run %d of %d.\n',iRun,nRun);
    for iLayer = 1:nNLayer,
        fprintf('Working on block number %d of %d.\n',iLayer,nNLayer);
        dcl = DoubleContextLearnerDBNaLP(LetterLabel,NumberLabel,nHidden,NLayer(iLayer));
        dcl.learn(nBlock,{'A1','B1'});
        Err(iRun,iLayer) = dcl.testError;
    end
end
toc

nSample = size(Err,1);
sErr    = 1/sqrt(nSample);
id      = dcl.getIdentifier();

figure('Position',[50 50 1200 500],'PaperPosition',[2 2 10 4],'Name','3G');
bar(NLayer,mean(Err,1),'FaceColor',[0.7 0.7 0.7]); hold on;
errorbar(NLayer,mean(Err,1),sErr*std(Err,0,1),'k.',...
        'LineWidth',1.5); hold off;
xlabel('Number of layers','FontSize',LABEL_SIZE);
ylabel('Error probability','FontSize',LABEL_SIZE);
title(id,'FontSize',LABEL_SIZE);
set(gca,'FontSize',LABEL_SIZE);
axis([0 7 0 0.5]); axis square;