So, we keep the status quo, users can still be confused, and I still am uncomfortable with the interface.&nbsp; I can live with it, I would just prefer it weren&#39;t the case. <br><br><div class="gmail_quote">On Dec 30, 2007 3:04 PM, Chongkai Zhu &lt;
<a href="mailto:czhu@cs.utah.edu">czhu@cs.utah.edu</a>&gt; wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="Ih2E3d"><br>
<br>Doug Williams wrote:<br>&gt;<br>&gt;<br>&gt; On Dec 30, 2007 12:40 PM, Chongkai Zhu &lt;<a href="mailto:czhu@cs.utah.edu">czhu@cs.utah.edu</a><br></div><div class="Ih2E3d">&gt; &lt;mailto:<a href="mailto:czhu@cs.utah.edu">
czhu@cs.utah.edu</a>&gt;&gt; wrote:<br>&gt;<br>&gt;<br>&gt;<br>&gt; &nbsp; &nbsp; &gt;Doug Williams wrote:<br>&gt; &nbsp; &nbsp; &gt;&gt; And while we&#39;re on the subject, there is another problem with<br>&gt; &nbsp; &nbsp; the new<br>&gt; &nbsp; &nbsp; &gt;&gt; SRFI 27 implementation I&#39;ve noticed. &nbsp;The randomization of
<br>&gt; &nbsp; &nbsp; &gt;&gt; (random-source-pseudo-randomize! s i j) and<br>&gt; &nbsp; &nbsp; &gt;&gt; (random-source-pseudo-randomize! s j i) will always be the<br>&gt; &nbsp; &nbsp; same. &nbsp;The<br>&gt; &nbsp; &nbsp; &gt;&gt; code uses equal-hash-code of i and j to come up with a seed and
<br>&gt; &nbsp; &nbsp; that<br>&gt; &nbsp; &nbsp; &gt;&gt; function is symmetric wrt i and j.<br>&gt; &nbsp; &nbsp; &gt;&gt;<br>&gt; &nbsp; &nbsp; &gt;<br>&gt; &nbsp; &nbsp; &gt; DrScheme, version 372-svn12nov2007 [3m]<br>&gt; &nbsp; &nbsp; &gt;<br>&gt; &nbsp; &nbsp; &gt;(equal-hash-code (list 1 2))
<br>&gt; &nbsp; &nbsp; &gt;(equal-hash-code (list 2 1))<br>&gt; &nbsp; &nbsp; &gt;<br>&gt; &nbsp; &nbsp; &gt;(equal-hash-code (list 1 0))<br>&gt; &nbsp; &nbsp; &gt;(equal-hash-code (list 0 1))<br>&gt; &nbsp; &nbsp; &gt;<br>&gt; &nbsp; &nbsp; &gt;=&gt;<br>&gt; &nbsp; &nbsp; &gt;<br>&gt; &nbsp; &nbsp; &gt;94564159
<br>&gt; &nbsp; &nbsp; &gt;95385186<br>&gt; &nbsp; &nbsp; &gt;94562141<br>&gt; &nbsp; &nbsp; &gt;93284415<br>&gt;<br>&gt;<br>&gt; My bad on that one. &nbsp;Sorry. &nbsp;But, I still don&#39;t like compressing the<br>&gt; repeatable random space - there are collisions there.
<br><br></div>Yes, there are collisions. But the space is still big, so collisions<br>will be very rare.<br><div><div></div><div class="Wj3C7c"><br>&gt;<br>&gt;<br>&gt;<br>&gt; &nbsp; &nbsp; &gt;&gt; I think we still need to do some thinking on the
<br>&gt; &nbsp; &nbsp; implementation. &nbsp;I<br>&gt; &nbsp; &nbsp; &gt;&gt; think we need to either expose the SRFI 27 interface from PLT<br>&gt; &nbsp; &nbsp; Scheme<br>&gt; &nbsp; &nbsp; &gt;&gt; (and implement the old interface on top of that) or separate them<br>
&gt; &nbsp; &nbsp; &gt;&gt; completely and go back to the old SRFI 27 implementation. &nbsp;[There<br>&gt; &nbsp; &nbsp; &gt;&gt; would also be some middle ground. &nbsp;But, I don&#39;t think there is<br>&gt; &nbsp; &nbsp; &gt;&gt; currently enough of the internal implementation exposed to
<br>&gt; &nbsp; &nbsp; adequately<br>&gt; &nbsp; &nbsp; &gt;&gt; implement SRFI 27 - there are too many kludges in that code now.]<br>&gt; &nbsp; &nbsp; &gt;&gt;<br>&gt; &nbsp; &nbsp; &gt;The current SRFI 27 implement does the following:<br>&gt; &nbsp; &nbsp; &gt;<br>&gt; &nbsp; &nbsp; &gt;1. to meet SRFI 27;
<br>&gt; &nbsp; &nbsp; &gt;2. to be as efficient as possible (i.e., using PLT&#39;s random<br>&gt; &nbsp; &nbsp; procedures<br>&gt; &nbsp; &nbsp; &gt;as much as possible).<br>&gt;<br>&gt; &nbsp; &nbsp; &gt;I did once tried to connect SRFI 27&#39;s default-random-source and PLT&#39;s
<br>&gt; &nbsp; &nbsp; &gt;current-pseudo-random-generator, but that doesn&#39;t goes very well,<br>&gt; &nbsp; &nbsp; so it<br>&gt; &nbsp; &nbsp; &gt;comes the current implement: they are not connected at all. In that<br>&gt; &nbsp; &nbsp; &gt;sense, SRFI 27 and PLT&#39;s random procedures are completely
<br>&gt; &nbsp; &nbsp; separated. I<br>&gt; &nbsp; &nbsp; &gt;can&#39;t see what you are suggestion here.<br>&gt;<br>&gt;<br>&gt; I&#39;m not sure what the &#39;right&#39; answer is, I&#39;m just trying to figure out<br>&gt; the best way to keep users from being confused. &nbsp;[Noel is by no means
<br>&gt; a novice user and he was confused.] &nbsp;The best options seem to be at<br>&gt; opposite ends of the spectrum. &nbsp;Either make them the same (and<br>&gt; therefore there is nothing to confuse) or make them so different that
<br>&gt; you lessen the confusion.<br>&gt;<br>&gt; I would rather lean toward making them the same:<br>&gt;<br>&gt; 1) Make both random sources have the same &#39;type&#39; - i.e.<br>&gt; make-pseudo-random-generator from PLT Scheme and make-random-source
<br>&gt; from SRFI 27 should return objects that can be used in either context<br>&gt; because they are the same implementation.<br>&gt; 2) Make PLT Scheme random routines (like random and random-seed) be<br>&gt; able to accept a random-source as an argument. &nbsp;It seems wasteful to
<br>&gt; continually parameterize current-pseudo-random-stream to fake passing<br>&gt; random (or random-seed) an argument, which is one of the main kludges<br>&gt; I was referring to.<br>&gt; 3) Implement a SRFI 27 pseudo randomize in PLT Scheme (because it is
<br>&gt; more robust than a single seed) and then implement random-seed in<br>&gt; terms of it. &nbsp;For example, we might define (random-seed s k) as being<br>&gt; equivalent to (random-source-pseudo-randomize! s k 0).<br>&gt;
<br>&gt; I think that would give us an interface in PLT Scheme that is<br>&gt; compatible with (but an extension of) the current implementation and<br>&gt; give what is needed to make the SRFI 27 implementation better.<br>
&gt;<br>&gt; I don&#39;t think there is a good way top reconcile the differences<br>&gt; between the default-random-source behavior of SRFI 27 and the<br>&gt; current-pseudo-random-generator in PLT Scheme. &nbsp;SRFI 27 did not
<br>&gt; anticipate as rich as environment - i.e., with parameters, threads,<br>&gt; etc - as PLT Scheme. &nbsp;Leave them both in as they are - and avoid the<br>&gt; temptation to make default-random-stream be a parameter, it&#39;s just a
<br>&gt; global variable. &nbsp;In essence this is what I did in the science<br>&gt; collection by adding a current-random-source parameter. &nbsp;[It is doing<br>&gt; the same for SRFI 27 as current-pseudo-random-generator does for PLT
<br>&gt; Scheme.]<br>&gt;<br>&gt; The other extreme is to just put the old SRFI 27 implementation back<br>&gt; and just say they&#39;re different.<br>&gt;<br>&gt; My personal opinion is that the current PLT Scheme random source
<br>&gt; interface (not the underlying implementation) is inadequate for the<br>&gt; work I want to use it for - simulations, in my case. &nbsp;But, it is more<br>&gt; efficient than the old SRFI 27 implementation. &nbsp;The SRFI 27 interface
<br>&gt; is suitable for the work - in particular, I can easily specify<br>&gt; repeatable, independent random variables. &nbsp;However, it&#39;s<br>&gt; implementation was not as efficient as the PLT Scheme implementation.<br>
&gt; And, because the PLT Scheme implementation doesn&#39;t expose enough of<br>&gt; the underlying implementation to make a straightforward implementation<br>&gt; of SRFI 27 on top of it, I don&#39;t have the same confidence in the
<br>&gt; interface code as I do in either the underlying PLT implementation or<br>&gt; the old SRFI implementation. &nbsp;[For example, the procedure returned by<br>&gt; (random-source-make-integers n) may call the underlying PLT Scheme
<br>&gt; random routine once or twice, depending on the value of n. &nbsp;Some of<br>&gt; those manipulations seem innocuous, but can bias the macro-level<br>&gt; behavior of the random sources.]<br>&gt;<br>&gt; In the short term, the best thing for the users of the science
<br>&gt; collection to remember is that there is no inherent connection between<br>&gt; the SRFI 27 random routines (and the science collection distributions,<br>&gt; etc) and the built in PLT scheme ones.<br>&gt;<br>&gt;
<br><br></div></div>The current PLT&#39;s SRFI 27 implementation provides all features the<br>reference implementation (or, the old SRFI implementation as Doug calls<br>it) provides, while being more efficient. Here&#39;s the reasons:
<br><br>1. They both meet the SRFI 27 interface;<br>2. &quot;default-random-source&quot; in both have nothing to do with PLT&#39;s<br>current-pseudo-random-generator (or any parameter in PLT).<br><br>So there is no reason to bring the old SRFI 27 implementation back.
<br><br>You SHOULD have the same confidence in the interface code as you do in<br><div class="Ih2E3d">either the underlying PLT implementation or the old SRFI implementation.<br></div>You are right that the procedure returned by
<br><div class="Ih2E3d">(random-source-make-integers s) may call the underlying PLT Scheme<br></div>random routine more than once, depending on the value of its input. But<br>that&#39;s fine (and necessary). I don&#39;t think it will bias the macro-level
<br><div><div></div><div class="Wj3C7c">behavior of the random sources.<br><br><br></div></div><font color="#888888">Chongkai<br><br></font></blockquote></div><br>