# Genetic Optimization with Mixed-Type Variables

### Description

General-purpose genetic optimization environment for mixed-type (real and integer) and binary variables.

### Usage

1 |

### Arguments

`evalFun` |
objective (fitness) function |

`evalArgs` |
a list of named parameters to the objective function |

`evalVector` |
logical indicating if a member should be supplied as a vector to the objective function |

`bounds` |
a two-column matrix or data frame of the lower and upper bounds of the variables |

`numVar` |
a vector naming or indexing the numeric (real and integer) variables |

`intVar` |
a vector naming or indexing the integer (ordinal and nominal) variables |

`popSize` |
the population size |

`maxGen` |
the number of generations (epochs) |

`xoverOps` |
a list of crossover operator specifications |

`mutationOps` |
a list of mutation operator specifications |

`selectionOp` |
a selection operator specification |

`verbose` |
option to show progress information |

`trace` |
option to collect population statistics |

### Details

This function maximizes a supplied evaluation function using a population of solutions which are transformed by genetic operators and are sampled by their fitness values.

The following crossover operators are available:

`simpleXover`

Selects a cut point with uniform probability and exchanges the values of the following parent variables.

`nomXover`

The values of the nominal parent variables are exchanged.

`arithXover`

Computes a random linear interpolation of the (numeric) parent variables.

`heuristicXover`

Computes a random linear extrapolation of the (numeric) parent variables in the direction of the better parent.

`retry=3`

specifies the number of trials.

The following mutation operators are available:

`uniformMutation`

Selects a variable with equal probability and sets it to a random linear interpolation of its bounds.

`nonUniformMutation`

Selects a (numeric) variable with equal probability and sets it to a random linear interpolation of that variable and one of its bounds. the latter are chosen with equal probability.

`multiNonUniformMutation`

Similar as above except that all (numeric) variables are selected.

`boundaryMutation`

Selects a (numeric) variable with equal probability and set it to one of its bounds.

`binaryMutation`

Flips the value of a binary variable with probability

`p=0.005`

.

The following select operators are available:

`normGeomSelect`

Maps the order of the fitness values to a geometrically declining selection density function with parameter

`p=0.08`

.`rouletteSelect`

Uses the relative fitness values as selection density function.

`tournSelect`

Selects the best among

`n=2`

members drawn with replacement from the population.

An element of the list specifying the crossover or mutation operators is a list with an identifier string, the number of times the operator is to be applied or a probability, and further operator-specific parameters (see above). The number of times a probabilistic operator is applied is drawn from the binomial distribution. The specification of selection operators is similar: identifier plus operator-specific parameters. (see above).

Note that functions that are passed in for operators have their environment set to the environment of the optimizer, so that they can use its internal variables. Use with caution!

The arguments specifying the type of variables can be either a vectors
of identifier strings, or positional indexes. In the first case the
row names must be set on `bounds`

for referencing. By default all
variables are numeric.

The operators enforce the integer constraint by rounding. A variable that
is referenced by `intVar`

but not by `numVar`

is treated as
nominal, i.e. as integer but excluded from the application of operators
that assume a variable is ordered. In the case nominal variables are used
inclusion of the `nomXover`

operator may be considered for balancing
the operator mix.

The evaluation function is protected from the optimization environment,
i.e. it is evaluated in the environment where it was defined. Parameters of
this function can be passed in via `evalArgs`

. This may be useful in
(heuristic) approaches that try to decompose a problem.

By default a population member is passed into the evaluation function
by separate arguments, i.e.~one for each chromosome (see the example).
With the `evalVector`

option this behavior can be altered such
that the member is passed in as a vector in the first position.

### Value

A list with the following elements:

`bestFit` |
the fitness value of the best solution. |

`bestVar` |
the variable values of the best solution. |

`bestPop` |
a data.frame containing the best solutions found so far. |

`fitTrace` |
a data.frame containing fitness statistics for each generation (maximum, average, and standard deviation of the fitness). |

### Author(s)

Christian Buchta

### References

C.R. Houck, J.A. Joines, and M.G. Kay. (1995) A Genetic Algorithm for Function Optimization: A Matlab Implementation.

### See Also

package `genalg`

for genetic optimization with float chromosomes.

### Examples

1 2 3 4 5 6 7 |