|
|
|
|
|
|
|
''' |
|
parameter_expression.py |
|
''' |
|
|
|
import numpy as np |
|
|
|
|
|
def choice(options, random_state): |
|
''' |
|
options: 1-D array-like or int |
|
random_state: an object of numpy.random.RandomState |
|
''' |
|
return random_state.choice(options) |
|
|
|
|
|
def randint(lower, upper, random_state): |
|
''' |
|
Generate a random integer from `lower` (inclusive) to `upper` (exclusive). |
|
lower: an int that represent an lower bound |
|
upper: an int that represent an upper bound |
|
random_state: an object of numpy.random.RandomState |
|
''' |
|
return random_state.randint(lower, upper) |
|
|
|
|
|
def uniform(low, high, random_state): |
|
''' |
|
low: an float that represent an lower bound |
|
high: an float that represent an upper bound |
|
random_state: an object of numpy.random.RandomState |
|
''' |
|
assert high >= low, 'Upper bound must be larger than lower bound' |
|
return random_state.uniform(low, high) |
|
|
|
|
|
def quniform(low, high, q, random_state): |
|
''' |
|
low: an float that represent an lower bound |
|
high: an float that represent an upper bound |
|
q: sample step |
|
random_state: an object of numpy.random.RandomState |
|
''' |
|
return np.clip(np.round(uniform(low, high, random_state) / q) * q, low, high) |
|
|
|
|
|
def loguniform(low, high, random_state): |
|
''' |
|
low: an float that represent an lower bound |
|
high: an float that represent an upper bound |
|
random_state: an object of numpy.random.RandomState |
|
''' |
|
assert low > 0, 'Lower bound must be positive' |
|
return np.exp(uniform(np.log(low), np.log(high), random_state)) |
|
|
|
|
|
def qloguniform(low, high, q, random_state): |
|
''' |
|
low: an float that represent an lower bound |
|
high: an float that represent an upper bound |
|
q: sample step |
|
random_state: an object of numpy.random.RandomState |
|
''' |
|
return np.clip(np.round(loguniform(low, high, random_state) / q) * q, low, high) |
|
|
|
|
|
def normal(mu, sigma, random_state): |
|
''' |
|
The probability density function of the normal distribution, |
|
first derived by De Moivre and 200 years later by both Gauss and Laplace independently. |
|
mu: float or array_like of floats |
|
Mean (“centre”) of the distribution. |
|
sigma: float or array_like of floats |
|
Standard deviation (spread or “width”) of the distribution. |
|
random_state: an object of numpy.random.RandomState |
|
''' |
|
return random_state.normal(mu, sigma) |
|
|
|
|
|
def qnormal(mu, sigma, q, random_state): |
|
''' |
|
mu: float or array_like of floats |
|
sigma: float or array_like of floats |
|
q: sample step |
|
random_state: an object of numpy.random.RandomState |
|
''' |
|
return np.round(normal(mu, sigma, random_state) / q) * q |
|
|
|
|
|
def lognormal(mu, sigma, random_state): |
|
''' |
|
mu: float or array_like of floats |
|
sigma: float or array_like of floats |
|
random_state: an object of numpy.random.RandomState |
|
''' |
|
return np.exp(normal(mu, sigma, random_state)) |
|
|
|
|
|
def qlognormal(mu, sigma, q, random_state): |
|
''' |
|
mu: float or array_like of floats |
|
sigma: float or array_like of floats |
|
q: sample step |
|
random_state: an object of numpy.random.RandomState |
|
''' |
|
return np.round(lognormal(mu, sigma, random_state) / q) * q |
|
|