genetic_algorithm_driver.py¶
Driver for a simple genetic algorithm.
This is the Simple Genetic Algorithm implementation based on 2009 AAE550: MDO Lecture notes of Prof. William A. Crossley.
This basic GA algorithm is compartmentalized into the GeneticAlgorithm class so that it can be used in more complicated driver.
The following reference is only for the automatic population sizing: Williams E.A., Crossley W.A. (1998) EmpiricallyDerived Population Size and Mutation Rate Guidelines for a Genetic Algorithm with Uniform Crossover. In: Chawdhry P.K., Roy R., Pant R.K. (eds) Soft Computing in Engineering Design and Manufacturing. Springer, London.
The following reference is only for the penalty function: Smith, A. E., Coit, D. W. (1995) Penalty functions. In: Handbook of Evolutionary Computation, 97(1).
The following reference is only for weighted sum multiobjective optimization: SobieszczanskiSobieski, J., Morris, A. J., van Tooren, M. J. L. (2015) Multidisciplinary Design Optimization Supported by Knowledge Based Engineering. John Wiley & Sons, Ltd.

class
openmdao.drivers.genetic_algorithm_driver.
GeneticAlgorithm
(objfun, comm=None, model_mpi=None)[source]¶ Bases:
object
Simple Genetic Algorithm.
This is the Simple Genetic Algorithm implementation based on 2009 AAE550: MDO Lecture notes of Prof. William A. Crossley. It can be used standalone or as part of the OpenMDAO Driver.
Attributes
comm
(MPI communicator or None) The MPI communicator that will be used objective evaluation for each generation.
elite
(bool) Elitism flag.
lchrom
(int) Chromosome length.
model_mpi
(None or tuple) If the model in objfun is also parallel, then this will contain a tuple with the the total number of population points to evaluate concurrently, and the color of the point to evaluate on this rank.
npop
(int) Population size.
objfun
(function) Objective function callback.

__init__
(self, objfun, comm=None, model_mpi=None)[source]¶ Initialize genetic algorithm object.
 Parameters
 objfunfunction
Objective callback function.
 commMPI communicator or None
The MPI communicator that will be used objective evaluation for each generation.
 model_mpiNone or tuple
If the model in objfun is also parallel, then this will contain a tuple with the the total number of population points to evaluate concurrently, and the color of the point to evaluate on this rank.

crossover
(self, old_gen, Pc)[source]¶ Apply crossover to the current generation.
Crossover flips two adjacent genes.
 Parameters
 old_genndarray
Points in current generation
 Pcfloat
Probability of crossover.
 Returns
 ndarray
Current generation with crossovers applied.

decode
(self, gen, vlb, vub, bits)[source]¶ Decode from binary array to real value array.
 Parameters
 genndarray
Population of points, encoded.
 vlbndarray
Lower bound array.
 vubndarray
Upper bound array.
 bitsndarray
Number of bits for decoding.
 Returns
 ndarray
Decoded design variable values.

encode
(self, x, vlb, vub, bits)[source]¶ Encode array of real values to array of binary arrays.
 Parameters
 xndarray
Design variable values.
 vlbndarray
Lower bound array.
 vubndarray
Upper bound array.
 bitsint
Number of bits for decoding.
 Returns
 ndarray
Population of points, encoded.

execute_ga
(self, x0, vlb, vub, vob, bits, pop_size, max_gen, random_state, Pm=None, Pc=0.5)[source]¶ Perform the genetic algorithm.
 Parameters
 x0ndarray
Initial design values
 vlbndarray
Lower bounds array.
 vubndarray
Upper bounds array. This includes overallocation so that every point falls on an integer value.
 vobndarray
Outer bounds array. This is purely for bounds check.
 bitsndarray
Number of bits to encode the design space for each element of the design vector.
 pop_sizeint
Number of points in the population.
 max_genint
Number of generations to run the GA.
 random_statenp.random.RandomState, int
Random state (or seednumber) which controls the seed and random draws.
 Pmfloat or None
Mutation rate
 Pcfloat
Crossover rate
 Returns
 ndarray
Best design point
 float
Objective value at best design point.
 int
Number of successful function evaluations.

mutate
(self, current_gen, Pm)[source]¶ Apply mutations to the current generation.
A mutation flips the state of the gene from 0 to 1 or 1 to 0.
 Parameters
 current_genndarray
Points in current generation
 Pmfloat
Probability of mutation.
 Returns
 ndarray
Current generation with mutations applied.


class
openmdao.drivers.genetic_algorithm_driver.
SimpleGADriver
(**kwargs)[source]¶ Bases:
openmdao.core.driver.Driver
Driver for a simple genetic algorithm.

__init__
(self, **kwargs)[source]¶ Initialize the SimpleGADriver driver.
 Parameters
 **kwargsdict of keyword arguments
Keyword arguments that will be mapped into the Driver options.

add_recorder
(self, recorder)¶ Add a recorder to the driver.
 Parameters
 recorderCaseRecorder
A recorder instance.

cleanup
(self)¶ Clean up resources prior to exit.

declare_coloring
(self, num_full_jacs=3, tol=1e25, orders=None, perturb_size=1e09, show_summary=True, show_sparsity=False)¶ Set options for total deriv coloring.
 Parameters
 num_full_jacsint
Number of times to repeat partial jacobian computation when computing sparsity.
 tolfloat
Tolerance used to determine if an array entry is nonzero during sparsity determination.
 ordersint
Number of orders above and below the tolerance to check during the tolerance sweep.
 perturb_sizefloat
Size of input/output perturbation during generation of sparsity.
 show_summarybool
If True, display summary information after generating coloring.
 show_sparsitybool
If True, display sparsity with coloring info after generating coloring.

get_constraint_values
(self, ctype='all', lintype='all', driver_scaling=True, filter=None, ignore_indices=False)¶ Return constraint values.
 Parameters
 ctypestring
Default is ‘all’. Optionally return just the inequality constraints with ‘ineq’ or the equality constraints with ‘eq’.
 lintypestring
Default is ‘all’. Optionally return just the linear constraints with ‘linear’ or the nonlinear constraints with ‘nonlinear’.
 driver_scalingbool
When True, return values that are scaled according to either the adder and scaler or the ref and ref0 values that were specified when add_design_var, add_objective, and add_constraint were called on the model. Default is True.
 filterlist
List of constraint names used by recorders.
 ignore_indicesbool
Set to True if the full array is desired, not just those indicated by indices.
 Returns
 dict
Dictionary containing values of each constraint.

get_design_var_values
(self, filter=None, driver_scaling=True, ignore_indices=False)¶ Return the design variable values.
This is called to gather the initial design variable state.
 Parameters
 filterlist
List of desvar names used by recorders.
 driver_scalingbool
When True, return values that are scaled according to either the adder and scaler or the ref and ref0 values that were specified when add_design_var, add_objective, and add_constraint were called on the model. Default is True.
 ignore_indicesbool
Set to True if the full array is desired, not just those indicated by indices.
 Returns
 dict
Dictionary containing values of each design variable.

get_objective_values
(self, driver_scaling=True, filter=None, ignore_indices=False)¶ Return objective values.
 Parameters
 driver_scalingbool
When True, return values that are scaled according to either the adder and scaler or the ref and ref0 values that were specified when add_design_var, add_objective, and add_constraint were called on the model. Default is True.
 filterlist
List of objective names used by recorders.
 ignore_indicesbool
Set to True if the full array is desired, not just those indicated by indices.
 Returns
 dict
Dictionary containing values of each objective.

get_response_values
(self, filter=None)¶ Return response values.
 Parameters
 filterlist
List of response names used by recorders.
 Returns
 dict
Dictionary containing values of each response.

property
msginfo
¶ Return info to prepend to messages.
 Returns
 str
Info to prepend to messages.

objective_callback
(self, x, icase)[source]¶ Evaluate problem objective at the requested point.
In case of multiobjective optimization, a simple weighted sum method is used:
\[f = (\sum_{k=1}^{N_f} w_k \cdot f_k)^a\]where \(N_f\) is the number of objectives and \(a>0\) is an exponential weight. Choosing \(a=1\) is equivalent to the conventional weighted sum method.
The weights given in the options are normalized, so:
\[\sum_{k=1}^{N_f} w_k = 1\]If one of the objectives \(f_k\) is not a scalar, its elements will have the same weights, and it will be normed with length of the vector.
Takes into account constraints with a penalty function.
All constraints are converted to the form of \(g_i(x) \leq 0\) for inequality constraints and \(h_i(x) = 0\) for equality constraints. The constraint vector for inequality constraints is the following:
\[ \begin{align}\begin{aligned}g = [g_1, g_2 \dots g_N], g_i \in R^{N_{g_i}}\\h = [h_1, h_2 \dots h_N], h_i \in R^{N_{h_i}}\end{aligned}\end{align} \]The number of all constraints:
\[N_g = \sum_{i=1}^N N_{g_i}, N_h = \sum_{i=1}^N N_{h_i}\]The fitness function is constructed with the penalty parameter \(p\) and the exponent \(\kappa\):
\[\Phi(x) = f(x) + p \cdot \sum_{k=1}^{N^g}(\delta_k \cdot g_k)^{\kappa} + p \cdot \sum_{k=1}^{N^h}h_k^{\kappa}\]where \(\delta_k = 0\) if \(g_k\) is satisfied, 1 otherwise
Note
The values of \(\kappa\) and \(p\) can be defined as driver options.
 Parameters
 xndarray
Value of design variables.
 icaseint
Case number, used for identification when run in parallel.
 Returns
 float
Objective value
 bool
Success flag, True if successful
 int
Case number, used for identification when run in parallel.

record_iteration
(self)¶ Record an iteration of the current Driver.

run
(self)[source]¶ Execute the genetic algorithm.
 Returns
 boolean
Failure flag; True if failed to converge, False is successful.

set_design_var
(self, name, value)¶ Set the value of a design variable.
 Parameters
 namestr
Global pathname of the design variable.
 valuefloat or ndarray
Value for the design variable.

set_simul_deriv_color
(self, coloring)¶ See use_fixed_coloring. This method is deprecated.
 Parameters
 coloringstr or Coloring
Information about simultaneous coloring for design vars and responses. If a string, then coloring is assumed to be the name of a file that contains the coloring information in pickle format. Otherwise it must be a Coloring object. See the docstring for Coloring for details.

set_total_jac_sparsity
(self, sparsity)¶ Set the sparsity of subjacobians of the total jacobian.
Note: This currently will have no effect if you are not using the pyOptSparseDriver.
 Parameters
 sparsitystr or dict
# Sparsity is a nested dictionary where the outer keys are response # names, the inner keys are design variable names, and the value is a tuple of # the form (row_list, col_list, shape). { resp1: { dv1: (rows, cols, shape), # for subjac d_resp1/d_dv1 dv2: (rows, cols, shape), ... }, resp2: { ... } ... }

use_fixed_coloring
(self, coloring=<object object at 0x7f338004ca50>)¶ Tell the driver to use a precomputed coloring.
 Parameters
 coloringstr
A coloring filename. If no arg is passed, filename will be determined automatically.
