[ 
https://issues.apache.org/jira/browse/MATH-764?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13285615#comment-13285615
 ] 

Alex Bertram commented on MATH-764:
-----------------------------------

I think since the sample() method is already part of the 3.0 API, it might be 
better to just leave it alone as a convenience method and have a separate set 
of interfaces/classes that sample from distributions: e.g. InversionSampler 
which would accept a Distribution and RandomData arguments to the constructor. 
I think that adding a RandomData instance as additional state to the 
Distribution classes would really add a new "responsibility" to the 
Distribution classes that muddies the API. 

Basically for the Renjin project we need to solve two concrete problems:

1) Given an arbitrary Distribution and an arbitrary random number generator 
provided by the R developer, create a new Sampler object that can sample values 
from the distribution. This makes it possible to cleanly implement R's large 
number of distribution-related built-in functions.

2) Provide specialized Sampler objects for certain distributions in order to be 
consistent with the original C-R implementation. While InversionSampler would 
be used most of the time, we have ported some of the specialized sampling 
algorithms for some of the more exotic distributions and would like to hide 
them behind a Sampler interface. Hence the desire to cleanly separate the 
Distribution, RandomData, and Sampler classes: a given distribution can have 
multiple sampling implementations, which each need to be paramaterized by the 
random number generator.

We can of course add this hierarchy to Renjin core and leave commons math 
alone, but I really like the idea of pushing as much of the pure math stuff 
into Commons Math and keeping Renjin focused on the R-language interpretration.

I will draft and post a new patch shortly.

Alex


                
> New sample() API should accept RandomGenerator as parameter
> -----------------------------------------------------------
>
>                 Key: MATH-764
>                 URL: https://issues.apache.org/jira/browse/MATH-764
>             Project: Commons Math
>          Issue Type: Improvement
>    Affects Versions: 3.0
>            Reporter: Alex Bertram
>         Attachments: sampler-refactor.diff
>
>   Original Estimate: 48h
>  Remaining Estimate: 48h
>
> This may come to late as I know the 3.0 release is nearing completion, but I 
> had some concerns about the new sample() method on the math3 RealDistribution 
> interface. 
> Specifically, there doesn't seem to be a way to supply a random generator to 
> the sampler. Perhaps it would be better to have a factory method on the 
> RealDistribution interface that accepted a RandomGenerator and returns an 
> instance of some new interface, Sampler, which contains the sample() methods. 
> That is:
> interface RealDistribution {
>     Sampler createSampler(RandomGenerator generator);
>     Sample createSampler(); // uses default RandomGenerator
> }
> interface Sampler {
>     double sample();
>     double[] sample(int sampleSize);
> }

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to