# clojush.pushgp.selection.preselection

### age-mediate

`(age-mediate pop {:keys [age-mediated-parent-selection]})`

If age-mediated-parent-selection is falsy, returns pop. Otherwise, age-mediated-parent-selection should be a vector of [pmin pmax] with pmin and pmax both being between 0 and 1 (inclusive) with pmin + pmax <= 1.0. Then, with probability pmin, returns individuals in pop with age @min-age; with probability pmax, returns all of pop; with probability (- 1.0 pmin pmax), selects an age cutoff uniformly from those present in the population and returns individuals with the cutoff age or lower.

### nonempties-for-autoconstruction

`(nonempties-for-autoconstruction pop {:keys [autoconstructive]})`

When :autoconstuctive is truthy, and at least one individual in pop has a non-empty genome, returns only those empty genomes.

### one-individual-per-error-vector-for-lexicase

`(one-individual-per-error-vector-for-lexicase pop {:keys [parent-selection]})`

When :parent-selection is a lexicase method, returns onl one random individual to represent each error vector.

### preselect

`(preselect pop argmap)`

Returns the population pop reduced as appropriate considering the settings for age-mediation, screening, selection method, and autoconstruction.

### screen

`(screen pop {:keys [random-screen]})`

If random-screen is falsy, returns pop. Otherwise, random-screen should be a map with values for :criterion and :probability. Then, with probability (- 1 :probability), again returns pop. Otherwise, a value is chosen randomly from the :grain-size values of the individuals in pop, and returns the individuals with that :grain-size or smaller.