def test_opt1_a(self):

        self.top.driver.add_objective('comp.result')
        self.top.driver.add_parameter('comp.x', -10.0, 99.0)
        self.top.driver.add_constraint('comp.g <= 0.')
        self.top.driver.recorders = [ListCaseRecorder()]
        self.top.driver.printvars = ['comp.opt_objective']
        self.top.run()

        self.assertAlmostEqual(self.top.comp.opt_objective,
                               self.top.driver.eval_objective(), places=2)
        self.assertAlmostEqual(self.top.comp.opt_design_vars[0],
                               self.top.comp.x[0], places=1)
        self.assertAlmostEqual(self.top.comp.opt_design_vars[1],
                               self.top.comp.x[1], places=2)
        self.assertAlmostEqual(self.top.comp.opt_design_vars[2],
                               self.top.comp.x[2], places=2)
        self.assertAlmostEqual(self.top.comp.opt_design_vars[3],
                               self.top.comp.x[3], places=1)

        cases = self.top.driver.recorders[0].get_iterator()
        end_case = cases[-1]

        self.assertEqual(self.top.comp.x[1],
                         end_case.get_input('comp.x')[1])
        self.assertEqual(self.top.comp.opt_objective,
                         end_case.get_output('comp.opt_objective'))
 def test_CSVCaseIterator_read_external_file_with_header(self):
     
     # Without a label column
     
     csv_data = ['"comp1.x", "comp1.y", "comp2.b_string"\n',
                 '33.5, 76.2, "Hello There"\n'
                 '3.14159, 0, "Goodbye z"\n'
                 ]
     
     outfile = open(self.filename, 'w')
     outfile.writelines(csv_data)
     outfile.close()
     
     self.top.comp2.add('b_string', Str("Hello',;','", iotype='in'))
     
     
     sout = StringIO.StringIO()
     self.top.driver.iterator = CSVCaseIterator(filename=self.filename)
     self.top.driver.recorders = [DumpCaseRecorder(sout)]
     self.top.run()
     
     self.assertEqual(self.top.comp1.x, 3.14159)
     self.assertEqual(self.top.comp1.y, 0.0)
     self.assertEqual(self.top.comp2.b_string, "Goodbye z")
     
     # Gui pane stuff
     
     attrs = self.top.driver.iterator.get_attributes()
     self.assertTrue("Inputs" in attrs.keys())
     self.assertTrue({'name': 'filename',
                      'type': 'str',
                      'connected': '',
                      'value': 'openmdao_test_csv_case_iterator.csv',
                      'desc': 'Name of the CSV file to be iterated.'} in attrs['Inputs'])
     self.assertTrue({'name': 'headers',
                      'type': 'NoneType',
                      'connected': '',
                      'value': 'None',
                      'desc': 'Optional dictionary of header labels, where the key is the column number.'} in attrs['Inputs'])
     
     # With a label column
     
     csv_data = ['"label", "comp1.x", "comp1.y", "comp2.b_string"\n',
                 '"case1", 33.5, 76.2, "Hello There"\n'
                 ]
     
     outfile = open(self.filename, 'w')
     outfile.writelines(csv_data)
     outfile.close()
     
     self.top.driver.iterator = CSVCaseIterator(filename=self.filename)
     self.top.driver.recorders = [ListCaseRecorder()]
     self.top.run()
     
     it = self.top.driver.recorders[0].get_iterator()
     case1 = it.pop()
     self.assertEqual(case1.label, 'case1')
Exemple #3
0
    def run(self, input_dict, output_dict):
        """ Performs finite difference of our submodel with respect to wrt.
        Variables are intialized with init_vals. 
        
        input_dict: dict( string : value )
            Dictionary of baseline values for input paramters
            
        input_dict: dict( string : value )
            Dictionary of baseline values for desired outputs
        """

        # Set all initial values
        for varname, value in input_dict.iteritems():
            self.model.set(varname, value)

        self.model.driver.recorders = [ListCaseRecorder()]

        if self.model.driver.distribution_generator.form != 'CENTRAL':
            self.model.driver.distribution_generator.skip_baseline = True

        # Calculate finite differences.
        # FFAD mode is supported.
        self.model.driver.calc_derivatives(first=True)
        self.model.run()

        # Return all needed derivatives
        cases = self.model.driver.recorders[0].cases

        icase = 0
        derivs = {}
        for wrt, val in self.model.driver.get_parameters().iteritems():

            derivs[wrt] = {}
            if self.model.driver.distribution_generator.form == 'CENTRAL':

                delx = cases[icase][wrt] - cases[icase + 1][wrt]
                for out in self.model.driver.case_outputs:

                    derivs[wrt][out] = \
                        (cases[icase][out] - cases[icase+1][out])/delx

                icase += 2

            else:

                delx = cases[icase][wrt] - input_dict[wrt]
                for out in self.model.driver.case_outputs:

                    derivs[wrt][out] = \
                        (cases[icase][out] - output_dict[out])/delx

                icase += 1

        return derivs
Exemple #4
0
    def configure(self):
        self.add('paraboloid', Paraboloid())

        self.add('driver', COBYLAdriver())

        self.driver.add_parameter('paraboloid.x', low=-50, high=50)
        self.driver.add_parameter('paraboloid.y', low=-50, high=50)

        self.driver.add_objective('paraboloid.f_xy')

        self.recorders = [ListCaseRecorder()]
 def test_output_errors(self):
     inputs = [('driven.x', numpy_random.normal(size=4)),
               ('driven.y', numpy_random.normal(size=10)),
               ('driven.raise_error', False), ('driven.stop_exec', False)]
     outputs = ['driven.rosen_suzuki', 'driven.foobar']
     self.cases = [Case(inputs, outputs, label='1')]
     self.model.driver.sequential = True
     self.model.driver.iterator = ListCaseIterator(self.cases)
     self.model.driver.recorders = [ListCaseRecorder()]
     self.model.driver.printvars = ['driven.extra']
     self.model.driver.error_policy = 'RETRY'
     self.model.run()
Exemple #6
0
    def configure(self):
        self.add('paraboloid', Paraboloid())

        self.add('driver', DOEdriver())
        self.driver.DOEgenerator = Uniform(1000)

        self.driver.add_parameter('paraboloid.x', low=-50, high=50)
        self.driver.add_parameter('paraboloid.y', low=-50, high=50)

        self.driver.add_response('paraboloid.f_xy')

        self.recorders = [ListCaseRecorder()]
 def test_CSVCaseIterator_read_external_file_without_header(self):
     
     # Without a label column
     
     csv_data = ['33.5, 76.2, "Hello There"\n'
                 '3.14159, 0, "Goodbye z"\n'
                 ]
     
     outfile = open(self.filename, 'w')
     outfile.writelines(csv_data)
     outfile.close()
     
     header_dict = { 0 : "comp1.x",
                     1 : "comp1.y",
                     2 : "comp2.b_string",
                     }
     
     self.top.comp2.add('b_string', Str("Hello',;','", iotype='in'))
     
     
     sout = StringIO.StringIO()
     self.top.driver.iterator = CSVCaseIterator(filename=self.filename, \
                                                headers=header_dict)
     self.top.driver.recorders = [DumpCaseRecorder(sout)]
     self.top.run()
     
     self.assertEqual(self.top.comp1.x, 3.14159)
     self.assertEqual(self.top.comp1.y, 0.0)
     self.assertEqual(self.top.comp2.b_string, "Goodbye z")
     
     # With a label column
     
     csv_data = ['"case1", 33.5, 76.2, "Hello There"\n'
                 ]
     
     header_dict = { 0 : "label",
                     1 : "comp1.x",
                     2 : "comp1.y",
                     3 : "comp2.b_string",
                     }
     
     outfile = open(self.filename, 'w')
     outfile.writelines(csv_data)
     outfile.close()
     
     self.top.driver.iterator = CSVCaseIterator(filename=self.filename, \
                                                headers=header_dict)
     self.top.driver.recorders = [ListCaseRecorder()]
     self.top.run()
     
     it = self.top.driver.recorders[0].get_iterator()
     case1 = it.pop()
     self.assertEqual(case1.label, 'case1')
Exemple #8
0
    def configure(self):
        self.recorders = [ListCaseRecorder()]

        self.add('driver2', CIDriver(3, 'comp2'))
        self.add('comp2', CaseComponent())
        self.driver2.workflow.add('comp2')

        self.add('driver1', CIDriver(2, 'comp1'))
        self.add('comp1', CaseComponent())
        self.driver1.workflow.add(['comp1', 'driver2'])

        self.driver.workflow.add('driver1')
    def test_sequential(self):
        logging.debug('')
        logging.debug('test_sequential')

        results = ListCaseRecorder()
        self.model.driver.recorders = [results]
        self.model.run()

        for case in results.cases:
            self.assertEqual(case.msg, None)
            assert_rel_error(
                self, case['driven.rosen_suzuki'],
                rosen_suzuki(*[case['driven.x'][i] for i in range(4)]), 0.0001)
Exemple #10
0
    def test_recording_with_exception(self):
        logging.debug('')
        logging.debug('test_recording')

        results = ListCaseRecorder()
        self.model.driver.recorders = [
            results,
        ]
        self.model.run()
        self.assertEqual(results.cases[0].msg,
                         "Cannot take square root of negative number")
        self.assertEqual(type(results.cases[0].get_outputs()[0][1]),
                         MissingValue)
    def test_noiterator(self):
        logging.debug('')
        logging.debug('test_noiterator')

        # Check resoponse to no iterator set.
        self.model.driver.recorders = [ListCaseRecorder()]
        self.model.driver.printvars = ['driven.extra']
        try:
            self.model.run()
        except ValueError as exc:
            msg = "driver: iterator has not been set"
            self.assertEqual(str(exc), msg)
        else:
            self.fail('ValueError expected')
    def test_noiterator(self):
        logging.debug('')
        logging.debug('test_noiterator')

        # Check resoponse to no iterator set.
        self.model.driver.recorders = [ListCaseRecorder()]
        self.model.driver.DOEgenerator = None
        try:
            self.model.run()
        except Exception as exc:
            msg = "driver: required plugin 'DOEgenerator' is not present"
            self.assertEqual(str(exc), msg)
        else:
            self.fail('Exception expected')
    def test_save_load(self):
        logging.debug('')
        logging.debug('test_save_load')

        self.model.driver.iterator = ListCaseIterator(self.cases)
        results = ListCaseRecorder()
        self.model.driver.printvars = ['driven.extra']
        self.model.driver.recorders = [results]

        # Set local dir in case we're running in a different directory.
        py_dir = self.directory

        # Exercise check_save_load().
        retcode = check_save_load(self.model, py_dir=py_dir)
        self.assertEqual(retcode, 0)
    def configure(self):
        self.add('c0', C0_vt())
        self.add('c1', C1_vt())

        self.add('parallel_driver', CaseIteratorDriver())
        self.driver.workflow.add(['c0', 'parallel_driver'])

        N = 10
        self.c0.N = N

        self.parallel_driver.iterator = \
            ListCaseIterator([Case(inputs=[('c1.i', l)]) for l in range(N)])
        self.parallel_driver.workflow.add(['c1'])
        self.parallel_driver.recorders.append(ListCaseRecorder())
        self.parallel_driver.printvars = ['c1.val']

        self.connect('c0.vt', 'c1.vt')
    def test_nooutput(self):
        logging.debug('')
        logging.debug('test_nooutput')

        results = ListCaseRecorder()
        self.model.driver.recorders = [results]
        self.model.driver.error_policy = 'RETRY'
        self.model.driver.case_outputs.append('driven.sum_z')

        self.model.run()

        self.assertEqual(len(results),
                         self.model.driver.DOEgenerator.num_sample_points)
        msg = "driver: Exception getting case outputs: " \
            "driven: 'DrivenComponent' object has no attribute 'sum_z'"
        for case in results.cases:
            self.assertEqual(case.msg, msg)
Exemple #16
0
    def configure(self):
        self.add("driver", DOEdriver())
        self.recorders = [ListCaseRecorder()]
        self.driver.DOEgenerator = FullFactorial()
        # configure the specific DOE options
        self.driver.DOEgenerator.num_levels = 3

        self.add("dis1", sellar.Discipline1())
        self.add("dis2", sellar.Discipline2())

        # setting some variables to fixed values
        self.dis1.y2 = 3.15
        self.dis2.y1 = 3.78

        # adding three parameters to the DOEDriver
        self.driver.add_parameter(("dis1.z1", "dis2.z1"), low=-10.0, high=10.0)
        self.driver.add_parameter(("dis1.z2", "dis2.z2"), low=0.0, high=10.0)
        self.driver.add_parameter("dis1.x1", low=0.0, high=10.0)
    def run_cases(self, sequential, forced_errors=False, retry=True):
        # Evaluate cases, either sequentially or across  multiple servers.

        self.model.driver.sequential = sequential
        results = ListCaseRecorder()
        self.model.driver.recorders = [results]
        self.model.driver.error_policy = 'RETRY' if retry else 'ABORT'
        if forced_errors:
            self.model.driver.add_event('driven.err_event')

        if retry:
            self.model.run()
            self.assertEqual(len(results), 11)
            self.verify_results(forced_errors)
        else:
            assert_raises(self, 'self.model.run()', globals(), locals(),
                          RuntimeError, "driver: Run aborted:"
                          " RuntimeError('driven: Forced error',)")
    def test_nooutput(self):
        logging.debug('')
        logging.debug('test_nooutput')

        results = ListCaseRecorder()
        self.model.driver.recorders = [results]
        self.model.driver.error_policy = 'RETRY'
        self.model.driver.case_outputs.append('driven.sum_z')

        self.model.run()

        self.assertEqual(len(results), 1 + self.model.driver.DOEgenerator.num_samples)
        for case in results.cases:
            expected = "driver: Exception getting case outputs: " \
                       "driven \(UUID.[0-9]+-1\): " \
                       "'DrivenComponent' object has no attribute 'sum_z'"
            msg = replace_uuid(case.msg)
            self.assertTrue(re.match(expected, msg))
    def test_forward(self):
        model = set_as_top(ArrayModel())
        driver = model.driver
        results = ListCaseRecorder()
        driver.recorders = [results]
        driver.distribution_generator.form = "FORWARD"
        driver.distribution_generator.order = 1

        model.run()

        # Verify recorded results match expectations.
        num_params = driver.total_parameters()
        self.assertEqual(len(results), 1 + num_params)

        for case in results.cases:
            self.assertEqual(case.msg, None)
            self.assertEqual(case['driven.rosen_suzuki'],
                             rosen_suzuki(*[case['driven.x'][i] for i in range(4)]))
Exemple #20
0
 def configure(self):
     
     self.add('paraboloid',Paraboloid())
     
     self.add('driver',DOEdriver())
     #There are a number of different kinds of DOE available in openmdao.lib.doegenerators
     self.driver.DOEgenerator = FullFactorial(10) #Full Factorial DOE with 10 levels for each variable
     
     #DOEdriver will automatically record the values of any parameters for each case
     self.driver.add_parameter('paraboloid.x',low=-50,high=50)
     self.driver.add_parameter('paraboloid.y',low=-50,high=50)
     #tell the DOEdriver to also record any other variables you want to know for each case
     self.driver.case_outputs = ['paraboloid.f_xy',]
     
     #Simple recorder which stores the cases in memory. 
     self.driver.recorders = [ListCaseRecorder(),]
     
     self.driver.workflow.add('paraboloid')
Exemple #21
0
    def test_AutoBEM_DOE(self):
        # perform a DOE
        self.top.replace('driver', DOEdriver())
        self.top.driver.DOEgenerator = FullFactorial(3)
        self.top.driver.recorders = [ListCaseRecorder()]
        self.top.driver.case_outputs = [
            'b.perf.data.tip_speed_ratio', 'b.perf.data.Cp', 'b.perf.data.Ct'
        ]

        self.top.driver.add_parameter('b.chord_hub', low=.1, high=2)
        self.top.driver.add_parameter('b.chord_tip', low=.1, high=2)
        self.top.driver.add_parameter('b.rpm', low=20, high=300)
        self.top.driver.add_parameter('b.twist_hub', low=-5, high=50)
        self.top.driver.add_parameter('b.twist_tip', low=-5, high=50)

        self.top.run()

        self.assertEqual(len(self.top.driver.recorders[0]), 243)
    def test_rerun(self):
        logging.debug('')
        logging.debug('test_rerun')

        self.run_cases(sequential=True)
        orig_cases = self.model.driver.recorders[0].cases
        self.model.driver.iterator = ListCaseIterator(orig_cases)
        rerun_seq = (1, 3, 5, 7, 9)
        self.model.driver.filter = SequenceCaseFilter(rerun_seq)
        rerun = ListCaseRecorder()
        self.model.driver.printvars = ['driven.extra']
        self.model.driver.recorders[0] = rerun
        self.model.run()

        self.assertEqual(len(orig_cases), 10)
        self.assertEqual(len(rerun.cases), len(rerun_seq))
        for i, case in enumerate(rerun.cases):
            self.assertEqual(case, orig_cases[rerun_seq[i]])
Exemple #23
0
    def configure(self):
        self.add('driver', CaseIteratorDriver())
        self.add('runner', PGrafSubComponent())
        self.driver.workflow.add('runner')
        self.driver.sequential = False
        # uncomment to keep simulation directories for debugging purposes
        #import os
        #os.environ['OPENMDAO_KEEPDIRS'] = '1'

        cases = []
        for num in range(4):
            cases.append(
                Case(inputs=[('runner.obj', PGrafObject(num)),
                             ('runner.num', num)],
                     outputs=['runner.result']))

        self.driver.iterator = ListCaseIterator(cases)
        self.driver.recorders = [ListCaseRecorder()]
    def test_rerun(self):
        logging.debug('')
        logging.debug('test_rerun')

        self.run_cases(sequential=True)
        orig_cases = self.model.driver.recorders[0].cases

        self.model.driver.DOEgenerator = CSVFile(self.model.driver.doe_filename)
        self.model.driver.record_doe = False
        rerun_seq = (1, 3, 5, 7, 9)
        self.model.driver.case_filter = SequenceCaseFilter(rerun_seq)
        rerun = ListCaseRecorder()
        self.model.driver.recorders[0] = rerun
        self.model.run()

        self.assertEqual(len(orig_cases), 10)
        self.assertEqual(len(rerun.cases), len(rerun_seq))
        for i, case in enumerate(rerun.cases):
            self.assertEqual(case, orig_cases[rerun_seq[i]])
    def test_invalid_form(self):

        model = Assembly()

        model.add('driver', DistributionCaseDriver())
        model.add('driven', SimpleComponent())
        model.driver.workflow.add('driven')
        model.driver.distribution_generator = FiniteDifferenceGenerator(model.driver)
        model.driver.case_outputs = ['driven.y']
        model.driver.add_parameter("driven.x", low=-10., high=10., fd_step = 0.1 )

        results = ListCaseRecorder()
        model.driver.recorders = [results]

        try:
            model.driver.distribution_generator.form = "INVALID_FORM"
        except ValueError, err:
            msg = "Variable 'form' must be in ['CENTRAL', 'FORWARD', 'BACKWARD'], " \
                  "but a value of INVALID_FORM <type 'str'> was specified."
            self.assertEqual(str(err), msg)
    def test_invalid_case_outputs(self):

        model = Assembly()

        model.add('driver', DistributionCaseDriver())
        model.add('driven', SimpleComponent())
        model.driver.workflow.add('driven')
        model.driver.distribution_generator = FiniteDifferenceGenerator(model.driver)
        model.driver.case_outputs = ['driven.invalid']
        model.driver.add_parameter("driven.x", low=-10., high=10., fd_step = 0.1 )
        model.driver.error_policy = 'RETRY'

        results = ListCaseRecorder()
        model.driver.recorders = [results]

        model.driver.distribution_generator.form = "FORWARD"
        model.driver.distribution_generator.order = 2
        model.run()

        self.assertEqual(results.cases[0].items()[1][1], _Missing )
Exemple #27
0
    def configure(self):
        """Configures an assembly for running with the CaseIteratorDriver"""

        self._logger.info("configuring dispatcher")

        self.add('case_driver', ConnectableCaseIteratorDriver())
        self.driver.workflow.add(['case_driver'])

        self.add('runner', FUSEDAssembly())
        self.case_driver.workflow.add('runner')

        # Boolean for running sequentially or in parallel
        self.create_passthrough('case_driver.sequential')
        self.case_driver.recorders.append(ListCaseRecorder())

        # component for postprocessing results
        self.add('post', PostprocessCasesBase())
        self.driver.workflow.add('post')
        self.connect('case_driver.evaluated', 'post.cases')

        self._logger.info("dispatcher configured")
    def configure(self):
        self.add('driver', CONMINdriver())
        self.add('preproc', PreProc())
        self.add('comp', OptRosenSuzukiComponent())
        self.add('postproc', PostProc())
        self.driver.workflow.add(('preproc', 'comp', 'postproc'))
        self.driver.iprint = 0
        self.driver.itmax = 30

        self.connect('preproc.x_out', 'comp.x')
        self.connect('comp.result', 'postproc.result_in')
        self.driver.add_objective('postproc.result_out')
        self.driver.add_parameter(('preproc.x_in[0]', 'preproc.x_in[1]',
                                   'preproc.x_in[2]', 'preproc.x_in[3]'))

        # pylint: disable=C0301
        map(self.driver.add_constraint, [
            'comp.x[0]**2+comp.x[0]+comp.x[1]**2-comp.x[1]+comp.x[2]**2+comp.x[2]+comp.x[3]**2-comp.x[3] < 8',
            'comp.x[0]**2-comp.x[0]+2*comp.x[1]**2+comp.x[2]**2+2*comp.x[3]**2-comp.x[3] < 10',
            '2*comp.x[0]**2+2*comp.x[0]+comp.x[1]**2-comp.x[1]+comp.x[2]**2-comp.x[3] < 5'])
        self.recorders = [ListCaseRecorder()]
Exemple #29
0
    def test_opt1(self):

        self.top.driver.add_objective('comp.result')

        self.top.driver.add_parameter('comp.x[0]', -10.0, 99.0)
        self.top.driver.add_parameter('comp.x[1]', -10.0, 99.0)
        self.top.driver.add_parameter('comp.x[2]', -10.0, 99.0)
        self.top.driver.add_parameter('comp.x[3]', -10.0, 99.0)

        map(self.top.driver.add_constraint, [
            'comp.x[0]**2+comp.x[0]+comp.x[1]**2-comp.x[1]+comp.x[2]**2+comp.x[2]+comp.x[3]**2-comp.x[3] < 8',
            'comp.x[0]**2-comp.x[0]+2*comp.x[1]**2+comp.x[2]**2+2*comp.x[3]**2-comp.x[3] < 10',
            '2*comp.x[0]**2+2*comp.x[0]+comp.x[1]**2-comp.x[1]+comp.x[2]**2-comp.x[3] < 5'
        ])
        self.top.driver.recorders = [ListCaseRecorder()]
        self.top.driver.printvars = ['comp.opt_objective']
        self.top.run()

        self.assertAlmostEqual(self.top.comp.opt_objective,
                               self.top.driver.eval_objective(),
                               places=2)
        self.assertAlmostEqual(self.top.comp.opt_design_vars[0],
                               self.top.comp.x[0],
                               places=1)
        self.assertAlmostEqual(self.top.comp.opt_design_vars[1],
                               self.top.comp.x[1],
                               places=2)
        self.assertAlmostEqual(self.top.comp.opt_design_vars[2],
                               self.top.comp.x[2],
                               places=2)
        self.assertAlmostEqual(self.top.comp.opt_design_vars[3],
                               self.top.comp.x[3],
                               places=1)

        cases = self.top.driver.recorders[0].get_iterator()
        end_case = cases[-1]

        self.assertEqual(self.top.comp.x[1], end_case.get_input('comp.x[1]'))
        self.assertEqual(self.top.comp.opt_objective,
                         end_case.get_output('comp.opt_objective'))
    def test_run_stop_step_resume(self):
        logging.debug('')
        logging.debug('test_run_stop_step_resume')

        self.generate_cases()
        stop_case = self.cases[1]  # Stop after 2 cases run.
        stop_case['driven.stop_exec'] = True
        self.model.driver.iterator = ListCaseIterator(self.cases)
        results = ListCaseRecorder()
        self.model.driver.recorders = [results]
        self.model.driver.printvars = ['driven.extra']
        self.model.driver.sequential = True

        try:
            self.model.run()
        except RunStopped:
            self.assertEqual(len(results), 2)
            self.verify_results()
        else:
            self.fail('Expected RunStopped')

        self.model.driver.step()
        self.assertEqual(len(results), 3)
        self.verify_results()

        self.model.driver.step()
        self.assertEqual(len(results), 4)
        self.verify_results()

        self.model.driver.resume()
        self.assertEqual(len(results), len(self.cases))
        self.verify_results()

        try:
            self.model.driver.resume()
        except RuntimeError as exc:
            self.assertEqual(str(exc), 'driver: Run already complete')
        else:
            self.fail('Expected RuntimeError')
Exemple #31
0
    def configure(self):
        self.add('paraboloid', Paraboloid())
        doe = self.add('driver', DOEdriver())
        doe.DOEgenerator = Uniform(num_samples=1000)
        doe.add_parameter('paraboloid.x', low=-50, high=50)
        doe.add_parameter('paraboloid.y', low=-50, high=50)
        doe.case_outputs = ['paraboloid.f_xy']
        doe.workflow.add('paraboloid')


if __name__ == '__main__':

    analysis = Analysis()

    # Run full experiment and record results.
    recorder = ListCaseRecorder()
    analysis.driver.recorders = [recorder]
    analysis.run()

    # Reconfigure driver.
    workflow = analysis.driver.workflow
    analysis.add('driver', CaseIteratorDriver())
    analysis.driver.workflow = workflow

    # Rerun cases where paraboloid.f_xy <= 0.
    analysis.driver.iterator = recorder.get_iterator()
    analysis.driver.filter = ExprCaseFilter("case['paraboloid.f_xy'] <= 0")
    analysis.run()

    # Rerun cases which failed.
    analysis.driver.iterator = recorder.get_iterator()