From e8f159f66bc7159ba5873cc524942d9ab27241c0 Mon Sep 17 00:00:00 2001
From: Michel Juillard <michel.juillard@mjui.fr>
Date: Thu, 30 Aug 2012 12:44:46 +0200
Subject: [PATCH] fixing bugs in previous commit

---
 matlab/independent_metropolis_hastings_core.m | 10 ++++++++--
 matlab/random_walk_metropolis_hastings_core.m |  9 ++++++++-
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/matlab/independent_metropolis_hastings_core.m b/matlab/independent_metropolis_hastings_core.m
index 829cf4006c..04b2683aa0 100644
--- a/matlab/independent_metropolis_hastings_core.m
+++ b/matlab/independent_metropolis_hastings_core.m
@@ -105,13 +105,19 @@ for b = fblck:nblck,
         % this will not work if the master uses a random generator not
         % available in the slave (different Matlab version or
         % Matlab/Octave cluster). Therefor the trap.
-        set_dynare_seed(options_.DynareRandomStreams.algo);
+        
+        % this set the random generator type (the seed is useless but
+        % needed by the function)
+        set_dynare_seed(options_.DynareRandomStreams.algo,...
+                        options_.DynareRandomStreams.seed);
+        % this set the state 
         set_dynare_random_generator_state(record.Seeds(b).Unifor, ...
                                           record.Seeds(b).Normal);
     catch
+        % if the state set by master is incompatible with the slave, we
+        % only reseed 
         set_dynare_seed(options_.DynareRandomStreams.seed+b);
     end
-    set_dynare_random_generator_state(record.Seeds(b).Unifor,record.Seeds(b).Normal);
     if (options_.load_mh_file~=0)  && (fline(b)>1) && OpenOldFile(b)
         load(['./' MhDirectoryName '/' ModelName '_mh' int2str(NewFile(b)) ...
               '_blck' int2str(b) '.mat'])
diff --git a/matlab/random_walk_metropolis_hastings_core.m b/matlab/random_walk_metropolis_hastings_core.m
index 0cc32ef9fb..8f643d6250 100644
--- a/matlab/random_walk_metropolis_hastings_core.m
+++ b/matlab/random_walk_metropolis_hastings_core.m
@@ -139,10 +139,17 @@ for b = fblck:nblck,
         % this will not work if the master uses a random generator not
         % available in the slave (different Matlab version or
         % Matlab/Octave cluster). Therefor the trap.
-        set_dynare_seed(options_.DynareRandomStreams.algo);
+        
+        % this set the random generator type (the seed is useless but
+        % needed by the function)
+        set_dynare_seed(options_.DynareRandomStreams.algo,...
+                        options_.DynareRandomStreams.seed);
+        % this set the state 
         set_dynare_random_generator_state(record.Seeds(b).Unifor, ...
                                           record.Seeds(b).Normal);
     catch
+        % if the state set by master is incompatible with the slave, we
+        % only reseed 
         set_dynare_seed(options_.DynareRandomStreams.seed+b);
     end
     if (options_.load_mh_file~=0) && (fline(b)>1) && OpenOldFile(b)
-- 
GitLab