Source code for openmdao.drivers.uniform_driver

"""
OpenMDAO design-of-experiments driver implementing the Uniform method.
"""

from openmdao.drivers.predeterminedruns_driver import PredeterminedRunsDriver
from six import moves, iteritems
import numpy as np


[docs]class UniformDriver(PredeterminedRunsDriver): """Design-of-experiments Driver implementing the Uniform method. Args ---- num_samples : int, optional The number of samples to run. Defaults to 1. seed : iint, optional Seed for randon number generator. num_par_doe : int, optional The number of DOE cases to run concurrently. Defaults to 1. load_balance : bool, Optional If True, use rank 0 as master and load balance cases among all of the other ranks. Defaults to False. """ def __init__(self, num_samples=1, seed=None, num_par_doe=1, load_balance=False): super(UniformDriver, self).__init__(num_par_doe=num_par_doe, load_balance=load_balance) self.num_samples = num_samples self.seed = seed def _build_runlist(self): """Build a runlist based on a uniform distribution.""" if self.seed is not None: np.random.seed(self.seed) for i in moves.range(self.num_samples): sample = [] for key, meta in iteritems(self.get_desvar_metadata()): nval = meta['size'] values = [] for k in range(nval): low = meta['lower'] high = meta['upper'] if isinstance(low, np.ndarray): low = low[k] if isinstance(high, np.ndarray): high = high[k] values.append(np.random.uniform(low, high)) sample.append([key, np.array(values)]) yield sample