Re: [xsl] Random number seed generation

Subject: Re: [xsl] Random number seed generation
From: Michel Hendriksen <michel.hendriksen@xxxxxxxxx>
Date: Fri, 10 Dec 2010 10:41:23 +0100
Follow up:

Still would like to know how to implement extensions in general. Any
pointers?

On Fri, Dec 10, 2010 at 10:40 AM, Michel Hendriksen
<michel.hendriksen@xxxxxxxxx> wrote:
> Thnx
>
> This looks like something that I could work with. I only don't know
> how this will be effecting performance as I would need to call it
> often.
>
> Maybe I can combine this with keeping track of the seed in some parts
> of the code.
>
> Michel Hendriksen
> Kensas bv
>
> On Fri, Dec 10, 2010 at 12:38 AM, TW <zupftom@xxxxxxxxxxxxxx> wrote:
>> I don't know whether this would give reasonably results, but what
>> about generating a seed from the result of generate-id()?  Maybe like
>> so, calculating kind of a digit sum (based on the the order the
>> variables occur in "name-chars"):
>>
>> <template name="create-seed">
>>  <param name="string" select="generate-id(.)"/>
>>  <param name="preliminary-seed" select="0"/>
>>  <param name="maximum-value" select="100"/>
>>
>>  <variable name="name-chars"
>>
select="':ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz-.0123456789'"
/>
>>
>>  <choose>
>>    <when test="string-length($string) != 0">
>>      <call-template name="create-seed">
>>        <with-param name="string" select="substring($string,2)"/>
>>        <with-param name="preliminary-seed"
>>          select="($preliminary-seed + string-length(
>>
>> substring-before($name-chars,substring($string,1,1))
>>                                       )
>>                  ) mod $maximum-value"/>
>>        <with-param name="maximum-value" select="$maximum-value"/>
>>      </call-template>
>>    </when>
>>    <otherwise>
>>      <value-of select="$preliminary-seed"/>
>>    </otherwise>
>>  </choose>
>> </template>
>>
>>
>> Of course this only makes sense if you need at most one random number
>> per source document node (after all, the random number will be the
>> same if the seed is the same).  Or you can pass the old seed as
>> parameter "preliminary-seed" when you create a new seed.
>>
>> Thomas W.
>>
>>
>> 2010/12/9 Michel Hendriksen <michel.hendriksen@xxxxxxxxx>:
>>> That is not an issue as that would be fixed easily. But I need to call
>>> the random functions from different places and that code would have to
>>> keep track of the last generated number. Also, when scaling the value
>>> (p.e.) to boolean I would need the original unscaled value for the
>>> next call. So results from any functions like that would have to
>>> return (combined) two values or would need two calls, one for the
>>> random number and one for the scaling.
>>>
>>> So time in millis from 1970 something would be a nice 'seed' and much
>>> easier to work with.
>>>
>>> Michel
>>>
>>> On Thu, Dec 9, 2010 at 4:58 PM, Tony Graham
>>> <Tony.Graham@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>>>> On Thu, Dec 09 2010 14:04:57 +0000, michel.hendriksen@xxxxx wrote:
>>>>> I'm using Saxon9he processor XSLT 2.0, and I am trying to get some
>>>>> random numbers. I'm currently using fxsl/random for this. The problem
>>>>> is that it needs a seed.
>>>>> I tried using current time stuff but that doesn't change during the
>>>>> transfomation using the stylesheet.. So I tried an extension function
>>>>> to cal to Java but that doesn't seem to work. Examples are probably
>>>>
>>>> That would require "Extensibility using reflexion", which isn't in Saxon
>>>> 9 HE.  See http://www.saxonica.com/feature-matrix.xml (ideally after it
>>>> has a stylesheet PI added to it).
>>>>
>>>>> XSLT 1.0 but should be ok.
>>>>>
>>>>> Is this possible on Home Edition? Did things change in transition to
>>>>> 2.0? Is there an other way to get some seed for the random function? I
>>>>
>>>> More in the transition from 'B' to 'HE', IIRC.
>>>>
>>>>> can't resuse the value as I would have to keep it somewhere in between
>>>>> calls. One idea would be to use generate-id() but that gives a string.
>>>>> Could be useful when this is always convertible to a number.
>>>>>
>>>>> I'm running the processor from a Java application now. It is a
>>>>> learning project and should be able to run Genetic Algorithm
>>>>> functionality, so lots of random stuff is needed.
>>>>
>>>> Just pass a seed generated with Java as a stylesheet parameter.
>>>>
>>>> Regards,
>>>>
>>>>
>>>> Tony Graham                         Tony.Graham@xxxxxxxxxxxxxxxxxxxxxx
>>>> Director                                  W3C XSL FO SG Invited Expert
>>>> Menteith Consulting Ltd                               XML Guild member
>>>> XML, XSL and XSLT consulting, programming and training
>>>> Registered Office: 13 Kelly's Bay Beach, Skerries, Co. Dublin, Ireland
>>>> Registered in Ireland - No. 428599   http://www.menteithconsulting.com
>>>>  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --
>>>> xmlroff XSL Formatter                               http://xmlroff.org
>>>> xslide Emacs mode                  http://www.menteith.com/wiki/xslide
>>>> Unicode: A Primer                               urn:isbn:0-7645-4625-2

Current Thread