[ 
https://issues.apache.org/jira/browse/MATH-1597?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Gilles Sadowski updated MATH-1597:
----------------------------------
    Description: 
Two low-discrepancy sequences are implemented in Commons Math (in package 
{{o.a.c.math4.legacy.random}}:
* {{SobolSequenceGenerator}}
* {{HaltonSequenceGenerator}}

They both provide several methods:
* {{nextVector()}}
* {{skipTo(int)}}
* {{getNextIndex()}}

of which only the first is part of their common API through the 
{{RandomVectorGenerator}}.

I propose to create an interface that would better represent the specific 
concept (and avoid the confusion with pseudo-random generators):
{code}
public interface LowDiscrepancySequence extends Supplier<double[]> { /* ... */}
{code}

Thus, instead of class {{SobolSequenceGenerator}} we'd have:
{code}
public class SobolSequence implements LowDiscrepancySequence {
    // ...
}
{code}

This functionality could be moved to a new {{o.a.c.m.legacy.quasirandom}} 
package (?).

Method {{skipTo}} could be replaced with an API similar to Commons RNG 
{{JumpableUniformRandomProvider}} (?).

The new design (TBD on the "dev" ML) should ideally take [additional 
implementations|https://en.wikipedia.org/wiki/Low-discrepancy_sequence] into 
account.


  was:
Two low-discrepancy sequences are implemented in Commons Math (in package 
{{o.a.c.math4.legacy.random}}:
* {{SobolSequenceGenerator}}
* {{HaltonSequenceGenerator}}

They both provide several methods:
* {{nextVector()}}
* {{skipTo(int)}}
* {{getNextIndex()}}

of which only the first is part of their common API through the 
{{RandomVectorGenerator}}.

I propose to create an interface that would better represent the specific 
concept (and avoid the confusion with pseudo-random generators):
{code}
public interface LowDiscrepancySequence extends Supplier<double[]> { /* ... */}
{code}

Thus, instead of class {{SobolSequenceGenerator}} we'd have:
{code}
public class SobolSequence implements LowDiscrepancySequence {
    // ...
}
{code}

This functionality could be moved to a new {{o.a.c.m.legacy.quasirandom}} 
package (?).

Method {{skipTo}} could be replaced with an API similar to Commons RNG 
{{JumpableUniformRandomProvider}} (?).



> Refactor low-discrepancy sequence functionality
> -----------------------------------------------
>
>                 Key: MATH-1597
>                 URL: https://issues.apache.org/jira/browse/MATH-1597
>             Project: Commons Math
>          Issue Type: Improvement
>            Reporter: Gilles Sadowski
>            Priority: Minor
>             Fix For: 4.0
>
>          Time Spent: 2h 40m
>  Remaining Estimate: 0h
>
> Two low-discrepancy sequences are implemented in Commons Math (in package 
> {{o.a.c.math4.legacy.random}}:
> * {{SobolSequenceGenerator}}
> * {{HaltonSequenceGenerator}}
> They both provide several methods:
> * {{nextVector()}}
> * {{skipTo(int)}}
> * {{getNextIndex()}}
> of which only the first is part of their common API through the 
> {{RandomVectorGenerator}}.
> I propose to create an interface that would better represent the specific 
> concept (and avoid the confusion with pseudo-random generators):
> {code}
> public interface LowDiscrepancySequence extends Supplier<double[]> { /* ... 
> */}
> {code}
> Thus, instead of class {{SobolSequenceGenerator}} we'd have:
> {code}
> public class SobolSequence implements LowDiscrepancySequence {
>     // ...
> }
> {code}
> This functionality could be moved to a new {{o.a.c.m.legacy.quasirandom}} 
> package (?).
> Method {{skipTo}} could be replaced with an API similar to Commons RNG 
> {{JumpableUniformRandomProvider}} (?).
> The new design (TBD on the "dev" ML) should ideally take [additional 
> implementations|https://en.wikipedia.org/wiki/Low-discrepancy_sequence] into 
> account.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to