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

Gilles edited comment on MATH-310 at 3/8/10 2:33 PM:
-----------------------------------------------------

Wouldn't something along the following lines satisfy everybody's concerns?

In each "...Distribution" interface, add a "nextSample()" (with the appropriate 
return type). In each "...DistributionImpl", add a "RandomData" instance 
variable to be used within the "nextSample()" implementation. E.g. in 
"PoissonDistributionImpl.java"

{code:title=PoissonDistributionImpl.java|borderStyle=solid}
import org.apache.commons.math.random.RandomData;
import org.apache.commons.math.random.RandomDataImpl;

public class PoissonDistributionImpl extends ... {
    private final RandomData randomData = new RandomDataImpl();
    // ....
    long nextSample() {
        randomData.nextPoisson();
    }   
}
{code}


      was (Author: erans):
    Wouldn't something along the following lines satisfy everybody's concerns?

In each "...Distribution" interface, add a "nextSample()" (with the appropriate 
return type). In each "...DistributionImpl", add a "RandomData" instance 
variable to be used within the "nextSample()" implementation. E.g. in 
"PoissonDistributionImpl.java"

---CUT---
import org.apache.commons.math.random.RandomData;
import org.apache.commons.math.random.RandomDataImpl;

public class PoissonDistributionImpl extends ... {
    private final RandomData randomData = new RandomDataImpl();
    // ....
    long nextSample() {
        randomData.nextPoisson();
    }   
}
---CUT---

  
> Supply nextSample for all distributions with inverse cdf using inverse 
> transform sampling approach
> --------------------------------------------------------------------------------------------------
>
>                 Key: MATH-310
>                 URL: https://issues.apache.org/jira/browse/MATH-310
>             Project: Commons Math
>          Issue Type: Improvement
>    Affects Versions: 2.0
>            Reporter: Mikkel Meyer Andersen
>            Priority: Minor
>         Attachments: patch_proposal
>
>   Original Estimate: 3h
>  Remaining Estimate: 3h
>
> To be able to generate samples from the supported probability distributions, 
> a generic function nextSample is implemented in 
> AbstractContinuousDistribution and AbstractIntegerDistribution. This also 
> gives the possibility to override the method if better algorithms are 
> available for specific distributions as shown in the small example with the 
> exponential distribution.
> Because the nextExponential is used several places: in nextPoisson it can be 
> replaces by an instance if the ExponentialDistribution and in ValueServer it 
> can as well, although maybe not in as natural maner as the other. 
> This problem with the Exponential is a special problem. In general the 
> nextSample-approaches immediately gives the possibility the sample from all 
> the distributions with inverse cdf instead just only a couple.
> Only AbstractContinuousDistribution and AbstractIntegerDistribution extends 
> AbstractDistribution, and both AbstractIntegerDistribution and 
> AbstractContinuousDistribution has an inverseCumulativeProbability-function. 
> But in AbstractContinuousDistribution the inverse cdf returns a double, and 
> at AbstractIntegerDistribution it - naturally - returns an integer. Therefor 
> the nextSample is not put on AbstractDistribution, but on each extension with 
> different return types.
> RandomGenerator as parameter instead of getting a RNG inside the nextSample, 
> because one typically wants to use the same RNG because often several random 
> samples are wanted. Another option is to have a RNG as a field in the class, 
> but that would be more ugly and also result in several RNGs at runtime.
> The nextPoisson etc. ought to be moved as well, if the enhancement is 
> accepted, but it should be a quick fix.
> Tests has to be written for this change as well.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to