Source code for openmdao.drivers.fullfactorial_driver
"""
OpenMDAO design-of-experiments driver implementing the Full Factorial method.
"""
from openmdao.drivers.predeterminedruns_driver import PredeterminedRunsDriver
from six import moves, iteritems
import numpy as np
import itertools
[docs]class FullFactorialDriver(PredeterminedRunsDriver):
"""Design-of-experiments Driver implementing the Full Factorial method.
Args
----
num_levels : int, optional
The number of evenly spaced levels between each design variable
lower and upper bound. Defaults to 1.
num_par_doe : int, optional
The number of DOE cases to run concurrently. Defaults to 1.
"""
def __init__(self, num_levels=1, num_par_doe=1):
super(FullFactorialDriver, self).__init__(num_par_doe=num_par_doe)
self.num_levels = num_levels
def _build_runlist(self):
value_arrays = dict()
for name, value in iteritems(self.get_desvar_metadata()):
low = value['lower']
high = value['upper']
value_arrays[name] = np.linspace(low, high,
num=self.num_levels).tolist()
keys = list(value_arrays.keys())
for combination in itertools.product(*value_arrays.values()):
yield moves.zip(keys, combination)