<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: New Ways With Random Numbers, Part II</title>
	<atom:link href="http://blogs.mathworks.com/loren/2008/11/13/new-ways-with-random-numbers-part-ii/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.mathworks.com/loren/2008/11/13/new-ways-with-random-numbers-part-ii/</link>
	<description>Loren Shure works on design of the MATLAB language at MathWorks. She writes here about once a week on MATLAB programming and related topics.</description>
	<lastBuildDate>Thu, 09 Feb 2012 04:19:21 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: Peter Perkins</title>
		<link>http://blogs.mathworks.com/loren/2008/11/13/new-ways-with-random-numbers-part-ii/#comment-32417</link>
		<dc:creator>Peter Perkins</dc:creator>
		<pubDate>Sun, 07 Aug 2011 16:36:30 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/loren/2008/11/13/new-ways-with-random-numbers-part-ii/#comment-32417</guid>
		<description>Jan, this requires some details, but you asked.

The Ziggurat algorithm, most of the time, requires a random integer to determine the level, and a random uniform to determine the position within that level.  The original Ziggurat algorithm as published by Marsaglia used and reused 32bits of randomness for both purposes, and that&#039;s what SHR3CONG still does (largely to be backwards compatible).  Very fast, but if you look _very_ closely, you can see a &quot;griddiness&quot; that&#039;s a consequence of reusing bits.  Almost certainly not a practical problem, though.  The MT algorithm as implemented in MATLAB&#039;s RandStream uses 64bits of randomness for those two values, and doesn&#039;t reuse any bits.  But the original author of MRG32K3A didn&#039;t do that, L&#039;Ecuyer recommended using two full U(0,1)&#039;s, so that&#039;s what MATLAB does, and it uses up 128 bits of randomness.

Of course, something like 1.5% of the time, the RandStream Ziggurat algorithm requires more randomness, so that&#039;s why you don&#039;t see _exactly_ 1 (MT) or 2(MRG32K3A) d.p. uniform per normal.

If you switch to &#039;Inversion&#039;, you&#039;ll find that _exactly_ one uniform gets used up for each normal in all cases, but it&#039;s slower to do that computation.</description>
		<content:encoded><![CDATA[<p>Jan, this requires some details, but you asked.</p>
<p>The Ziggurat algorithm, most of the time, requires a random integer to determine the level, and a random uniform to determine the position within that level.  The original Ziggurat algorithm as published by Marsaglia used and reused 32bits of randomness for both purposes, and that&#8217;s what SHR3CONG still does (largely to be backwards compatible).  Very fast, but if you look _very_ closely, you can see a &#8220;griddiness&#8221; that&#8217;s a consequence of reusing bits.  Almost certainly not a practical problem, though.  The MT algorithm as implemented in MATLAB&#8217;s RandStream uses 64bits of randomness for those two values, and doesn&#8217;t reuse any bits.  But the original author of MRG32K3A didn&#8217;t do that, L&#8217;Ecuyer recommended using two full U(0,1)&#8217;s, so that&#8217;s what MATLAB does, and it uses up 128 bits of randomness.</p>
<p>Of course, something like 1.5% of the time, the RandStream Ziggurat algorithm requires more randomness, so that&#8217;s why you don&#8217;t see _exactly_ 1 (MT) or 2(MRG32K3A) d.p. uniform per normal.</p>
<p>If you switch to &#8216;Inversion&#8217;, you&#8217;ll find that _exactly_ one uniform gets used up for each normal in all cases, but it&#8217;s slower to do that computation.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jan</title>
		<link>http://blogs.mathworks.com/loren/2008/11/13/new-ways-with-random-numbers-part-ii/#comment-32416</link>
		<dc:creator>Jan</dc:creator>
		<pubDate>Fri, 05 Aug 2011 22:25:37 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/loren/2008/11/13/new-ways-with-random-numbers-part-ii/#comment-32416</guid>
		<description>Hi,

I have a question about the difference in generating normal 
(pseudo) random numbers with the mt19937ar algorithm and the mrg32k3a algorithm. 

For some reason the mt19937ar algorithm uses 1.0218 uniform (pseudo) random numbers and the mrg32k3a algorithm uses 2.0282.

Both algorithms use the Ziggurat algorithm to tranform the uniform random numbers into normal random numbers.

Can you explain the difference?

Test code:
&lt;pre&gt;
stream0 = RandStream(&#039;mt19937ar&#039;,&#039;Seed&#039;,0);
RandStream.setDefaultStream(stream0);
a=rand(3e6,1);

stream0 = RandStream(&#039;mt19937ar&#039;,&#039;Seed&#039;,0);
RandStream.setDefaultStream(stream0);
b=randn(1e6,1);
c=rand;
find(a==c)

stream1 = RandStream(&#039;mrg32k3a&#039;,&#039;Seed&#039;,0);
RandStream.setDefaultStream(stream1);
a=rand(3e6,1);

stream1 = RandStream(&#039;mrg32k3a&#039;,&#039;Seed&#039;,0);
RandStream.setDefaultStream(stream1);
b=randn(1e6,1);
c=rand;
find(a==c)
&lt;/pre&gt;

ans =

     1021808


ans =

     2028211</description>
		<content:encoded><![CDATA[<p>Hi,</p>
<p>I have a question about the difference in generating normal<br />
(pseudo) random numbers with the mt19937ar algorithm and the mrg32k3a algorithm. </p>
<p>For some reason the mt19937ar algorithm uses 1.0218 uniform (pseudo) random numbers and the mrg32k3a algorithm uses 2.0282.</p>
<p>Both algorithms use the Ziggurat algorithm to tranform the uniform random numbers into normal random numbers.</p>
<p>Can you explain the difference?</p>
<p>Test code:</p>
<pre>
stream0 = RandStream('mt19937ar','Seed',0);
RandStream.setDefaultStream(stream0);
a=rand(3e6,1);

stream0 = RandStream('mt19937ar','Seed',0);
RandStream.setDefaultStream(stream0);
b=randn(1e6,1);
c=rand;
find(a==c)

stream1 = RandStream('mrg32k3a','Seed',0);
RandStream.setDefaultStream(stream1);
a=rand(3e6,1);

stream1 = RandStream('mrg32k3a','Seed',0);
RandStream.setDefaultStream(stream1);
b=randn(1e6,1);
c=rand;
find(a==c)
</pre>
<p>ans =</p>
<p>     1021808</p>
<p>ans =</p>
<p>     2028211</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jan</title>
		<link>http://blogs.mathworks.com/loren/2008/11/13/new-ways-with-random-numbers-part-ii/#comment-32415</link>
		<dc:creator>Jan</dc:creator>
		<pubDate>Fri, 05 Aug 2011 20:25:43 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/loren/2008/11/13/new-ways-with-random-numbers-part-ii/#comment-32415</guid>
		<description>Consider the following Matlab code.

&lt;pre&gt;
stream0 = RandStream(&#039;mt19937ar&#039;,&#039;Seed&#039;,0);
RandStream.setDefaultStream(stream0);
a=rand(4e6,1);

stream0 = RandStream(&#039;mt19937ar&#039;,&#039;Seed&#039;,0);
RandStream.setDefaultStream(stream0);
b=randn(1e6,1);
c=rand(1);
find(a==c)


stream1 = RandStream(&#039;mrg32k3a&#039;,&#039;Seed&#039;,0);
RandStream.setDefaultStream(stream1);
a=rand(4e6,1);

stream1 = RandStream(&#039;mrg32k3a&#039;,&#039;Seed&#039;,0);
RandStream.setDefaultStream(stream1);
b=randn(1e6,1);
c=rand(1);
find(a==c)
&lt;/pre&gt;

The output is:

ans =

     1021808


ans =

     2028211

Why does the mt19937ar algorithm uses only 1.0218 rand values on average?
The mrg32k3a uses 2.028 on average as expected.</description>
		<content:encoded><![CDATA[<p>Consider the following Matlab code.</p>
<pre>
stream0 = RandStream('mt19937ar','Seed',0);
RandStream.setDefaultStream(stream0);
a=rand(4e6,1);

stream0 = RandStream('mt19937ar','Seed',0);
RandStream.setDefaultStream(stream0);
b=randn(1e6,1);
c=rand(1);
find(a==c)

stream1 = RandStream('mrg32k3a','Seed',0);
RandStream.setDefaultStream(stream1);
a=rand(4e6,1);

stream1 = RandStream('mrg32k3a','Seed',0);
RandStream.setDefaultStream(stream1);
b=randn(1e6,1);
c=rand(1);
find(a==c)
</pre>
<p>The output is:</p>
<p>ans =</p>
<p>     1021808</p>
<p>ans =</p>
<p>     2028211</p>
<p>Why does the mt19937ar algorithm uses only 1.0218 rand values on average?<br />
The mrg32k3a uses 2.028 on average as expected.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Michael</title>
		<link>http://blogs.mathworks.com/loren/2008/11/13/new-ways-with-random-numbers-part-ii/#comment-31141</link>
		<dc:creator>Michael</dc:creator>
		<pubDate>Tue, 09 Mar 2010 01:22:33 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/loren/2008/11/13/new-ways-with-random-numbers-part-ii/#comment-31141</guid>
		<description>Boh just forget i wrote above. That was my bad. Just lost some 5 hours on this. A couple beers too many and i havent noticed matlab had been writing my rand data to a mat file in a different directory. Meantime another part of the programme kept reading an old file of the same name placed where i was expecting new rand data to be written in at each iteration, but of cours never beeing updated with the new data at all. Anyways. 

Thnanks for the info on rand!

I wish everyone all the best including seldom &quot;matrix dimensions must agree&quot; error.

Keep wearing them F5 buttons off!

Kind Regards.</description>
		<content:encoded><![CDATA[<p>Boh just forget i wrote above. That was my bad. Just lost some 5 hours on this. A couple beers too many and i havent noticed matlab had been writing my rand data to a mat file in a different directory. Meantime another part of the programme kept reading an old file of the same name placed where i was expecting new rand data to be written in at each iteration, but of cours never beeing updated with the new data at all. Anyways. </p>
<p>Thnanks for the info on rand!</p>
<p>I wish everyone all the best including seldom &#8220;matrix dimensions must agree&#8221; error.</p>
<p>Keep wearing them F5 buttons off!</p>
<p>Kind Regards.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Michael</title>
		<link>http://blogs.mathworks.com/loren/2008/11/13/new-ways-with-random-numbers-part-ii/#comment-31139</link>
		<dc:creator>Michael</dc:creator>
		<pubDate>Tue, 09 Mar 2010 00:23:46 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/loren/2008/11/13/new-ways-with-random-numbers-part-ii/#comment-31139</guid>
		<description>Hello.
I havent read all the piecess of the article so please exuse me if i&#039;m asking something obvious brought up already...
My Matlab 7.1.02xxx does generate uncorrelated randn results after using 

randn(&#039;state&#039;,sum(100*clock));

however when i use this inside a function only subsequent randn() functions inside that function generate different random numbers, as soon as another main file iteration enters the same function again these sequences repeat as if the generator state was reset and not really &quot;listening&quot; to changing sum(100*clock) values... Any idea if thats a know bug or some fault on my side?

This is the second time i struggle against this loosing many, many hours...

Please help.

Kind Regars
Thanks for the article

Michael</description>
		<content:encoded><![CDATA[<p>Hello.<br />
I havent read all the piecess of the article so please exuse me if i&#8217;m asking something obvious brought up already&#8230;<br />
My Matlab 7.1.02xxx does generate uncorrelated randn results after using </p>
<p>randn(&#8216;state&#8217;,sum(100*clock));</p>
<p>however when i use this inside a function only subsequent randn() functions inside that function generate different random numbers, as soon as another main file iteration enters the same function again these sequences repeat as if the generator state was reset and not really &#8220;listening&#8221; to changing sum(100*clock) values&#8230; Any idea if thats a know bug or some fault on my side?</p>
<p>This is the second time i struggle against this loosing many, many hours&#8230;</p>
<p>Please help.</p>
<p>Kind Regars<br />
Thanks for the article</p>
<p>Michael</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Nugroho</title>
		<link>http://blogs.mathworks.com/loren/2008/11/13/new-ways-with-random-numbers-part-ii/#comment-31124</link>
		<dc:creator>Nugroho</dc:creator>
		<pubDate>Mon, 01 Mar 2010 08:52:56 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/loren/2008/11/13/new-ways-with-random-numbers-part-ii/#comment-31124</guid>
		<description>Dear Peter, 

I am sorry for the late reply. 

Thank you very much for making me think about the things at the higher level so that I do not overuse the substreams feature. 

Thank you too for giving the idea on the number of available substreams. 

Have a great month.</description>
		<content:encoded><![CDATA[<p>Dear Peter, </p>
<p>I am sorry for the late reply. </p>
<p>Thank you very much for making me think about the things at the higher level so that I do not overuse the substreams feature. </p>
<p>Thank you too for giving the idea on the number of available substreams. </p>
<p>Have a great month.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Peter Perkins</title>
		<link>http://blogs.mathworks.com/loren/2008/11/13/new-ways-with-random-numbers-part-ii/#comment-31096</link>
		<dc:creator>Peter Perkins</dc:creator>
		<pubDate>Fri, 19 Feb 2010 18:00:03 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/loren/2008/11/13/new-ways-with-random-numbers-part-ii/#comment-31096</guid>
		<description>Mike, parfor can be tricky, and there are a couple things going on here:

1) parfor and for do not iterate the same &quot;order&quot;, and because your loop bodies have side effects (meaning that you&#039;re calling rand which maintains an internal state), you won&#039;t get the same results.  The loop body in the for case gets run with i going sequentially from 1 to 10.  The loop body in the parfor case gets executed in &quot;some&quot; order.  There&#039;s no wo way to guarantee, for example, that the 4th and 5th iterations are run on the same worker in that order.  If you run the same parfor twice, or run it with a different number of workers, things change.  That&#039;s the nature of parfor.  It&#039;s also a good reason to use substreams if you want reproduceability.

2) You&#039;re using _copies_ of the same stream on your workers, and they work separately from each other, so the first time rand is called on each worker, you&#039;ll get the same value.  In fact, that&#039;s the whole reason for using multiple parallel streams when you want calculations on different workers to be statistically independent.

To answer your specific question: you can get the exact same calculations in a parfor that you&#039;d get in a for by using substreams.  Something like

&lt;pre&gt;
stream = RandStream(&#039;mrg32k3a&#039;);
parfor ii = 1:10
    set(stream,&#039;Substream&#039;,ii);
    par(ii) = rand(stream);
end
&lt;/pre&gt;

This uses (copies of) the same stream on all workers, but ties the values returned by rand to the iteration number, so regardless of whether you run this loop on one worker, or many, or change it to a for loop in serial mode, it will return the same vector.  Ordinarily, you&#039;d probably set the substream index by assigning to the property

&lt;pre&gt;
   stream.Substream = ii;
&lt;/pre&gt;

but parfor won&#039;t let you do that.

If you want to run this same loop again but get different (but still repeatable) results, you might:

* use a different seed to create the stream, or
* add some offset to the substream index.

Using substreams gets you reproduceability.  If you don&#039;t care about that, you most likely want to create a set of independent parallel streams using RandStream.create, and passing in labindex as the StreamIndices parameter.</description>
		<content:encoded><![CDATA[<p>Mike, parfor can be tricky, and there are a couple things going on here:</p>
<p>1) parfor and for do not iterate the same &#8220;order&#8221;, and because your loop bodies have side effects (meaning that you&#8217;re calling rand which maintains an internal state), you won&#8217;t get the same results.  The loop body in the for case gets run with i going sequentially from 1 to 10.  The loop body in the parfor case gets executed in &#8220;some&#8221; order.  There&#8217;s no wo way to guarantee, for example, that the 4th and 5th iterations are run on the same worker in that order.  If you run the same parfor twice, or run it with a different number of workers, things change.  That&#8217;s the nature of parfor.  It&#8217;s also a good reason to use substreams if you want reproduceability.</p>
<p>2) You&#8217;re using _copies_ of the same stream on your workers, and they work separately from each other, so the first time rand is called on each worker, you&#8217;ll get the same value.  In fact, that&#8217;s the whole reason for using multiple parallel streams when you want calculations on different workers to be statistically independent.</p>
<p>To answer your specific question: you can get the exact same calculations in a parfor that you&#8217;d get in a for by using substreams.  Something like</p>
<pre>
stream = RandStream('mrg32k3a');
parfor ii = 1:10
    set(stream,'Substream',ii);
    par(ii) = rand(stream);
end
</pre>
<p>This uses (copies of) the same stream on all workers, but ties the values returned by rand to the iteration number, so regardless of whether you run this loop on one worker, or many, or change it to a for loop in serial mode, it will return the same vector.  Ordinarily, you&#8217;d probably set the substream index by assigning to the property</p>
<pre>
   stream.Substream = ii;
</pre>
<p>but parfor won&#8217;t let you do that.</p>
<p>If you want to run this same loop again but get different (but still repeatable) results, you might:</p>
<p>* use a different seed to create the stream, or<br />
* add some offset to the substream index.</p>
<p>Using substreams gets you reproduceability.  If you don&#8217;t care about that, you most likely want to create a set of independent parallel streams using RandStream.create, and passing in labindex as the StreamIndices parameter.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mike McCoy</title>
		<link>http://blogs.mathworks.com/loren/2008/11/13/new-ways-with-random-numbers-part-ii/#comment-31094</link>
		<dc:creator>Mike McCoy</dc:creator>
		<pubDate>Fri, 19 Feb 2010 02:04:13 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/loren/2008/11/13/new-ways-with-random-numbers-part-ii/#comment-31094</guid>
		<description>How do we ensure stream independence when using parfor? For instance, if I do this:

&lt;pre&gt;
% Assume a matlabpool open
stream = RandStream.create(&#039;mrg32k3a&#039;,&#039;seed&#039;,1234);
parfor ii = 1:10
    par(ii) = rand(stream);
end

stream = RandStream.create(&#039;mrg32k3a&#039;,&#039;seed&#039;,1234);

for ii = 1:10
    nopar(ii) = rand(stream);
end
&lt;/pre&gt;

Not only do I get different answers in &quot;par&quot; and &quot;nopar&quot;, but the values in &quot;par&quot; are repeated! How do I avoid this issue while still maintaining reproducibility of my results?</description>
		<content:encoded><![CDATA[<p>How do we ensure stream independence when using parfor? For instance, if I do this:</p>
<pre>
% Assume a matlabpool open
stream = RandStream.create('mrg32k3a','seed',1234);
parfor ii = 1:10
    par(ii) = rand(stream);
end

stream = RandStream.create('mrg32k3a','seed',1234);

for ii = 1:10
    nopar(ii) = rand(stream);
end
</pre>
<p>Not only do I get different answers in &#8220;par&#8221; and &#8220;nopar&#8221;, but the values in &#8220;par&#8221; are repeated! How do I avoid this issue while still maintaining reproducibility of my results?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Peter Perkins</title>
		<link>http://blogs.mathworks.com/loren/2008/11/13/new-ways-with-random-numbers-part-ii/#comment-31071</link>
		<dc:creator>Peter Perkins</dc:creator>
		<pubDate>Thu, 11 Feb 2010 14:30:57 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/loren/2008/11/13/new-ways-with-random-numbers-part-ii/#comment-31071</guid>
		<description>Nugroho, I&#039;m not sure I see the need for you to use substreams at all.  You say you, &quot;need to use the same random number seed for each design when testing their performance in each simulation trial&quot;.  Forget about seeds for the moment, and think about things at a higher level.  I think what you mean by the above is that you want to use the same random numbers for each of the 20 simulations, so that you know that each of the 20 procedures was given the exact same data to work on.  If that&#039;s the case, then I see no reason why you can&#039;t simply reset the RNG before each of 20 runs.

If for some reason the different procedures use up different numbers of random numbers, then it might make sense to use substreams, one for each iteration, but even then it would seem like you&#039;d still want to reset the RNG to the same point before each of 20 runs.

I can&#039;t tell for sure what you need.  But I can say that it&#039;s possible to &quot;overuse&quot; some of these parallel RNG features.

In any case, the number of substreams for &#039;mrg32k3a&#039; or &#039;mlfg6331_64&#039;, as described in the documentation in the User Guide, is much larger than 20,000.  It&#039;s something like 2^51.

Hope this helps.</description>
		<content:encoded><![CDATA[<p>Nugroho, I&#8217;m not sure I see the need for you to use substreams at all.  You say you, &#8220;need to use the same random number seed for each design when testing their performance in each simulation trial&#8221;.  Forget about seeds for the moment, and think about things at a higher level.  I think what you mean by the above is that you want to use the same random numbers for each of the 20 simulations, so that you know that each of the 20 procedures was given the exact same data to work on.  If that&#8217;s the case, then I see no reason why you can&#8217;t simply reset the RNG before each of 20 runs.</p>
<p>If for some reason the different procedures use up different numbers of random numbers, then it might make sense to use substreams, one for each iteration, but even then it would seem like you&#8217;d still want to reset the RNG to the same point before each of 20 runs.</p>
<p>I can&#8217;t tell for sure what you need.  But I can say that it&#8217;s possible to &#8220;overuse&#8221; some of these parallel RNG features.</p>
<p>In any case, the number of substreams for &#8216;mrg32k3a&#8217; or &#8216;mlfg6331_64&#8242;, as described in the documentation in the User Guide, is much larger than 20,000.  It&#8217;s something like 2^51.</p>
<p>Hope this helps.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Nugroho</title>
		<link>http://blogs.mathworks.com/loren/2008/11/13/new-ways-with-random-numbers-part-ii/#comment-31070</link>
		<dc:creator>Nugroho</dc:creator>
		<pubDate>Thu, 11 Feb 2010 13:28:36 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/loren/2008/11/13/new-ways-with-random-numbers-part-ii/#comment-31070</guid>
		<description>Dear Loren and Peter, 

Thank you very much for your insightful posts. They are very helpful. 

I have one question, is there any maximum number of substreams we can use?

I am currently writing a program to compare the performance of several procedures. The purpose of each procedure is to select the best among 20 independent alternatives. In order to make a fair comparison between the procedures, I need to use the same random number seed for each design when testing their performance in each simulation trial.

I need to independently repeat the simulation 10,000 times. As far as I can think of, the best way to have the statistical independence is to have 20 x 10,000 = 200,000 substreams. However, I am not sure whether there could be 200,000 independent substreams (or more).   

Thank you for your kind attention.</description>
		<content:encoded><![CDATA[<p>Dear Loren and Peter, </p>
<p>Thank you very much for your insightful posts. They are very helpful. </p>
<p>I have one question, is there any maximum number of substreams we can use?</p>
<p>I am currently writing a program to compare the performance of several procedures. The purpose of each procedure is to select the best among 20 independent alternatives. In order to make a fair comparison between the procedures, I need to use the same random number seed for each design when testing their performance in each simulation trial.</p>
<p>I need to independently repeat the simulation 10,000 times. As far as I can think of, the best way to have the statistical independence is to have 20 x 10,000 = 200,000 substreams. However, I am not sure whether there could be 200,000 independent substreams (or more).   </p>
<p>Thank you for your kind attention.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

