Source code for openmdao.lib.drivers.doedriver

"""
    doedriver.py -- Driver that executes a Design of Experiments.
    
    See the Standard Library Reference for additional information on the :ref:`DOEdriver`.
"""

# pylint: disable-msg=E0611,F0401
from openmdao.lib.datatypes.api import ListStr, Instance

from openmdao.main.case import Case
from openmdao.main.interfaces import IDOEgenerator
from openmdao.lib.drivers.caseiterdriver import CaseIterDriverBase
from openmdao.util.decorators import add_delegate
from openmdao.main.hasparameters import HasParameters


@add_delegate(HasParameters)
[docs]class DOEdriver(CaseIterDriverBase): """ Driver for Design of Experiments """ def __init__(self, *args, **kwargs): super(DOEdriver, self).__init__(*args, **kwargs) # pylint: disable-msg=E1101 DOEgenerator = Instance(IDOEgenerator, iotype='in', required=True, desc='Iterator supplying normalized DOE values.') case_outputs = ListStr([], iotype='in', desc='A list of outputs to be saved with each case.')
[docs] def get_case_iterator(self): """Returns a new iterator over the Case set.""" return self._get_cases()
def _get_cases(self): params = self.get_parameters().values() self.DOEgenerator.num_parameters = len(params) for row in self.DOEgenerator: inputs = [] for val, parameter in zip(row, params): #convert DOE values to variable values value = parameter.low+(parameter.high-parameter.low)*val if '[' in parameter.expreval.text: raise ValueError('Array entry design vars ' 'not supported yet.') else: inputs.append((parameter.expreval.text, value)) # now add any event variables for varname in self.get_events(): inputs.append((varname, True)) yield Case(inputs=inputs, outputs=self.case_outputs)
OpenMDAO Home