class_path_and_name

Specify the module and class name of the external python method

Specification

  • Alias: None

  • Arguments: STRING

Description

Specify the module and class name of the external python method. The python method will be treated by Dakota as a top-level Iterator and must supply a core_run method. Optionally, initialize_run pre_run post_run and finalize_run methods may be supplied.

Examples

Use of external python methods in Dakota is enabled within the method block via:

method,
    external_python
      class_path_and_name = "ext_py_methods.RandomSample"
      options_file = 'ext_py_options.json'

An example python class that implements simple random sampling in the core_run method could consist of the following:

import ext_method

class RandomSample:

    def __init__(self, executor, params_file=None):
        self.executor = executor
        if params_file is not None:
            with open(params_file) as F:
                all_methods_params = json.load(F)
            self.params = all_methods_params['RandomSample']

    def core_run(self):
        n_vars = self.executor.tv()
        init_pts = self.executor.initial_values()
        l_bounds = self.executor.continuous_lower_bounds()
        u_bounds = self.executor.continuous_upper_bounds()

        # Method specs
        max_evals = self.params['max_evals']
        rnd_seed  = self.params['rnd_seed']
        rnd.seed(rnd_seed)

        retval = {}

        i = 1
        x = init_pts
        xvals = []
        self.fns = []
        while  i<=max_evals:
            xvals.append(x)
            self.fns.append(self.executor.function_value(x))
            x = []
            for j in range(n_vars):
                x.append(rnd.uniform(l_bounds[j], u_bounds[j]))
            i=i+1

        retval['x']   = x
        retval['fns'] = self.fns

        return retval


    def post_run(self):
        # Output using Dakota formatting
        self.executor.output_central_moments(self.fns)

A companion options file, ext_py_options.json which satisfies the method specifications above might contain the following:

{
  "RandomSample" :
  {
    "max_evals" : 25,
    "rnd_seed"  : 231
  }
}