You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Dennis Hendriks (JIRA)" <ji...@apache.org> on 2012/07/14 00:26:36 UTC

[jira] [Commented] (MATH-823) Distribution classes should allow randomData to be configured via constructor or setter

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

Dennis Hendriks commented on MATH-823:
--------------------------------------

It seems to me that this overlaps with MATH-764. Both issues discuss sampling of distributions with user provided random generators (or RandomDataImpl).
                
> Distribution classes should allow randomData to be configured via constructor or setter
> ---------------------------------------------------------------------------------------
>
>                 Key: MATH-823
>                 URL: https://issues.apache.org/jira/browse/MATH-823
>             Project: Commons Math
>          Issue Type: Improvement
>    Affects Versions: 3.0
>            Reporter: Steve Phelps
>            Priority: Minor
>
> In my application I would like to represent several different probability distributions using polymorphism - see example below.  At compile-time the distributions are declared of type RealDistribution.  These distributions are then configured with concrete classes at run-time using, e.g. dependency injection.  However, because there is no way to configure the underlying PRNG -- ie the randomData field of these distributions, there is a danger of introducing correlations into the random number streams through poor seed management.  If I have dozens of distributions, each configured automatically with a new RandomDataImpl() then there is the possibility that some of these streams will share the same seed value introducing spurious correlations.  
> One solution to this would be to explicitly manage seed values for every distribution in my simulation by calling reseedRandomGenerator().  However, this introduces unnecessary complexity and dependencies throughout my code.  A far simpler solution for my use case would be to configure all the distributions in my simulation to use the same singleton instance of RandomDataImpl for their randomData field (eg using dependency injection), thus ensuring truly independent distributions -  however currently the API does not support this.
>  
> Could the Distribution classes be refactored to allow the randomData field to be configured, eg through setters or via the constructor?   This would be similar to the design of the distribution classes provided by the CERN colt library, which I believe offers more flexibility in this respect.  It would also be ideal, IMHO, if the Distribution objects were POJOs with zero-arg constructors, which would then allow them to be configured using a dependency-injection framework.
> public class Simulation {
> 	RealDistribution interArrivalTimeDistribution;
> 	
> 	RealDistribution sizeDistribution;
> 	
> 	double t;
> 	
> 	public void run() {
> 		t = 0;
> 		while (true) {
> 			t += interArrivalTimeDistribution.sample();
> 			double magnitude = sizeDistribution.sample();
> 			System.out.println(t  + "\t" + magnitude);
> 		}
> 	}
> 	public RealDistribution getInterArrivalTimeDistribution() {
> 		return interArrivalTimeDistribution;
> 	}
> 	public void setInterArrivalTimeDistribution(RealDistribution interArrivalTimes) {
> 		this.interArrivalTimeDistribution = interArrivalTimes;
> 	}
> 	public RealDistribution getSizeDistribution() {
> 		return sizeDistribution;
> 	}
> 	public void setSizeDistribution(RealDistribution xsizeDistribution) {
> 		this.sizeDistribution = sizeDistribution;
> 	}
> 	
> 	
> }

--
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