Le mer. 26 mai 2021 à 00:06, Alex Herbert <alex.d.herb...@gmail.com> a écrit :
>
> On Tue, 25 May 2021 at 20:15, Gilles Sadowski <gillese...@gmail.com> wrote:
>
> > Hi.
> >
> > I wonder if/how we would introduce the following functionality:
> > ---CUT---
> >     /**
> >      * @param rng Generator that will be shared in the returned sampler.
> >      * @param list Samplers whose underlying generators will be discarded
> > in
> >      * the returned instance.
> >      * @return a sampler sharing the given provider.
> >      */
> >     public static ObjectSampler<double[]>
> > withUniformRandomProvider(final UniformRandomProvider rng, final
> > SharedStateContinuousSampler... list) {
> >         final SharedStateContinuousSampler[] samplers = new
> > SharedStateContinuousSampler[list.length];
> >         for (int i = 0; i < list.length; i++) {
> >             samplers[i] = list[i].withUniformRandomProvider(rng);
> >         }
> >
> >         return new ObjectSampler<double[]>() {
> >             /** {@inheritDoc} */
> >             @Override
> >             public double[] sample() {
> >                 final double[] out = new double[list.length];
> >                 for (int i = 0; i < list.length; i++) {
> >                     out[i] = samplers[i].sample();
> >                 }
> >                 return out;
> >             }
> >         };
> >     }
> > ---CUT---
> >
>
> Note it can return SharedStateObjectSampler<double[]>. The implementation
> is to create a new instance using the same method:
>
> static SharedStateObjectSampler<double[]> of(UniformRandomProvider rng,
>         SharedStateContinuousSampler... list) {
>     final SharedStateContinuousSampler[] samplers = new
> SharedStateContinuousSampler[list.length];
>     for (int i = 0; i < list.length; i++) {
>         samplers[i] = list[i].withUniformRandomProvider(rng);
>     }
>
>     return new SharedStateObjectSampler<double[]>() {
>         @Override
>         public double[] sample() {
>             final double[] out = new double[samplers.length];
>             for (int i = 0; i < samplers.length; i++) {
>                 out[i] = samplers[i].sample();
>             }
>             return out;
>         }
>
>         @Override
>         public SharedStateObjectSampler<double[]>
> withUniformRandomProvider(UniformRandomProvider rng) {
>             return of(rng, samplers);
>         }
>     };
> }
>
> In this case though the anonymous inner class retains a reference to the
> enclosing class. So chaining the withUniformRandomProvider calls on
> returned objects would have a memory overhead. It would be cleaner to
> return a static class with the same functionality.
>
> Out of interest, do you have a use case?

Purpose is to supersede CM's "UncorrelatedRandomVectorGenerator".

> Possible name:
> CompoundSampler
>
> This is a variation on the CompositeSampler I suggested in another thread.
> A composite sampler (name TBD) is composed of 2 or more samplers. A sampler
> is chosen using a weighted distribution and a single sample returned from 1
> sampler. Here a compound sampler (name TBD) is composed of 2 or more
> samplers. The return sample is a single sample from each sampler in the
> compound.
>
> I will open a ticket and PR with the static CompositeSamplers factory class
> I created. The idea of a compound sampler could be added to the same class.

+1

>
> Alex

[1] 
https://gitbox.apache.org/repos/asf?p=commons-math.git;a=blob;f=commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/random/UncorrelatedRandomVectorGenerator.java;h=9df5fef1a39fc535ab66874169f329a9adbef36b;hb=refs/heads/modularized_master

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to