Source code for romtools.workflows.sampling_methods
# pylint: disable=invalid-name
from typing import Protocol
import numpy as np
from scipy.stats import qmc
[docs]
class Sampler(Protocol):
'''
Generate UIID samples
Returns np.ndarray of shape (number_of_samples, dimensionality)
'''
def __call__(self, number_of_samples: int, dimensionality: int = 1, seed=None) -> np.ndarray:
pass
##########################################
# Sampling Methods
##########################################
[docs]
def MonteCarloSampler(number_of_samples: int, dimensionality: int = 1, seed=None) -> np.ndarray:
'''
Generate UIID Monte Carlo samples
Conforms to the Sampler protocol
'''
if seed is not None:
np.random.seed(seed)
return np.random.uniform(size=(number_of_samples, dimensionality))
[docs]
def LatinHypercubeSampler(number_of_samples: int, dimensionality: int = 1, seed=None) -> np.ndarray:
'''
Generate UIID LHS samples
Conforms to the Sampler protocol
'''
sampler = qmc.LatinHypercube(dimensionality, seed=seed)
return sampler.random(n=number_of_samples)