Voronoi Refined Stratified Sampling - Random Refinement

In this example, Stratified sampling is used to generate samples from Uniform probability distribution and sample are added using adaptive approach Refined Stratified Sampling.

Import the necessary libraries. Here we import standard libraries such as numpy and matplotlib, but also need to import the TrueStratifiedSampling and RefinedStratifiedSampling class from UQpy.

from UQpy.sampling.stratified_sampling.strata import VoronoiStrata
from UQpy.sampling import TrueStratifiedSampling, RefinedStratifiedSampling, RandomRefinement
from UQpy.distributions import Uniform
import matplotlib.pyplot as plt

Create a distribution object.

marginals = [Uniform(loc=0., scale=1.), Uniform(loc=0., scale=1.)]

strata = VoronoiStrata(seeds_number=16, dimension=2)

Run stratified sampling.

x = TrueStratifiedSampling(distributions=marginals, strata_object=strata, nsamples_per_stratum=1, random_state=1)

Plot the resulting stratified samples and the boundaries of the strata in the \(U(0,1)\) space.

from scipy.spatial import voronoi_plot_2d
fig = voronoi_plot_2d(strata.voronoi)
plt.title('Stratified Samples (U(0,1)) - Voronoi Stratification')
plt.plot(x.samples[:, 0], x.samples[:, 1], 'dm')
plt.ylim(0, 1)
plt.xlim(0, 1)
plt.show()

Using UQpy RefinedStratifiedSampling class to expand samples generated by TrueStratifiedSampling class. In this example, two new samples are generated inside cells with maximum weight associated with it.

refinement = RandomRefinement(strata=strata)
y = RefinedStratifiedSampling(stratified_sampling=x, nsamples=18, refinement_algorithm=refinement,
                              samples_per_iteration=2, random_state=2)

The figure shows the voronoi tesselation of initial samples and samples generated using RefinedStratifiedSampling class. The RefinedStratifiedSampling class creates a Delaunay triangulation using existing samples and generate a new sample inside the triangle with maximum volume.

fig2 = voronoi_plot_2d(strata.voronoi)
plt.title('Refined Stratified Samples - Voronoi Stratification')
plt.plot(x.samples[:16, 0], x.samples[:16, 1], 'dm')
plt.scatter(y.samplesU01[16:18, 0], y.samplesU01[16:18, 1], marker='s', color='black')
plt.ylim(0, 1)
plt.xlim(0, 1)
plt.show()

Further, RefinedStratifiedSampling class is used to adaptively increase the sample size. In this example, samples are randomly added in cell with maximum weights associated with it and new sample generated using SimplexSampling class.

y.run(nsamples=50)

In the figure shown below, all samples generated from TrueStratifiedSampling and RefinedStratifiedSampling class are plotted.

fig2 = voronoi_plot_2d(y.refinement_algorithm.strata.voronoi)
plt.title('Refined Stratified Samples - Voronoi Stratification')
plt.plot(x.samples[:16, 0], x.samples[:16, 1], 'dm')
plt.scatter(y.samplesU01[16:, 0], y.samplesU01[16:, 1], marker='s', color='black')
plt.ylim(0, 1)
plt.xlim(0, 1)
plt.show()

Total running time of the script: ( 0 minutes 0.000 seconds)

Gallery generated by Sphinx-Gallery