Hide Comments
Hide Comments

Comments (0)

Defines the strategies for combatting bloat (program growth without (significant) return in terms of fitness.) in genetic programming

Namespace: RSGAConsts

expandingSyntax

Delphi

type 
  TGPBloatStrategy = ( 
  bsNone, 
  bsSizeLimit, 
  bsDepthLimit, 
  bsTarpeianSize, 
  bsTarpeianDepth, 
  bsUnfitSize, 
  bsUnfitDepth, 
  bsShrinkDepth, 
  bsShrinkSize, 
  bsHoistDepth, 
  bsHoistSize, 
  bsSizeFairCrossover, 
  bsDepthFairCrossover, 
  bsSizeParsimonyPressure, 
  bsDepthParsimonyPressure, 
  bsCovariantSizeParsimonyPressure, 
  bsCovariantDepthParsimonyPressure, 
  bsLexicographicParsimonyPressure 
  ); 
 

expandingMembers

 

Name

Description

public enummember

bsCovariantDepthParsimonyPressure

On selection of a parent, use the weighted fitness for depth of trees to select smaller programs (also requires FitnessMethod to be fmWeightedMinimize or fmWeightedMaximize). Note that the ParsimonyPressure is calculated each generation using Cov(d, f)/Var(d), where
Cov(d, f) is the covariance between program depth d and program fitness f
in the population, and Var(d) is the variance of program depths.
 

public enummember

bsCovariantSizeParsimonyPressure

On selection of a parent, use the weighted fitness for size of trees to select smaller programs (also requires FitnessMethod to be fmWeightedMinimize or fmWeightedMaximize) . Note that the ParsimonyPressure is calculated each generation using Cov(s, f)/Var(s), where
Cov(s, f) is the covariance between program size s and program fitness f
in the population, and Var(s) is the variance of program sizes.
 

public enummember

bsDepthFairCrossover

On crossover, the depth of a subtree to be removed is calculated and used to constrain the depth of the new subtree from the other parent

public enummember

bsDepthLimit

If child tree depth exceeds BloatLimit, then parent is added in its stead (Kosa method)
 

public enummember

bsDepthParsimonyPressure

On selection of a parent, use the weighted fitness for depth of trees to select smaller programs (also requires FitnessMethod to be fmWeightedMinimize or fmWeightedMaximize)
 

public enummember

bsHoistDepth

If child tree depth exceeds BloatLimit, then hoist mutation is performed on the child
 

public enummember

bsHoistSize

If child tree size exceeds BloatLimit, then hoist mutation is performed on the child

public enummember

bsLexicographicParsimonyPressure

Controls bloat by optimizing both fitness and tree size, by treating fitness as the primary objective and tree size as a secondary objective in a lexicographic ordering. During tournament selection, if fitness is equal, then the smaller program is fitter. If SelectionMethod is not tournament selection, this method is ignored

public enummember

bsNone

Do no anti-bloat control

public enummember

bsShrinkDepth

If child tree depth exceeds BloatLimit, then shrink mutation is performed on the child

public enummember

bsShrinkSize

If child tree size exceeds BloatLimit, then shrink mutation is performed on the child
 

public enummember

bsSizeFairCrossover

On crossover, the size of a subtree to be removed is calculated and used to constrain the size of the new subtree from the other parent

public enummember

bsSizeLimit

If child tree size (number of nodes in tree) exceeds BloatLimit, then parent is added in its stead
 

public enummember

bsSizeParsimonyPressure

On selection of a parent, use the weighted fitness for size of trees to select smaller programs (also requires FitnessMethod to be fmWeightedMinimize or fmWeightedMaximize)
 

public enummember

bsTarpeianDepth

Controls bloat by possibly reducing the fitness of trees that exceed the average tree depth, e.g., if Node Depth is greater than the Average Program Depth and Random value is less than TarpeianProbability then Fitness is Unfit else Calculate Fitness.
Note that Tarpeian method discards children before evaluating fitness, possibly significantly reducing computational time

public enummember

bsTarpeianSize

Controls bloat by possibly reducing the fitness of trees that exceed the average tree size, e.g., if Node Size is greater than Average Program Size and Random value is less than TarpeianProbability then Fitness is Unfit else Calculate Fitness.
Note that Tarpeian method discards children before evaluating fitness, possibly significantly reducing computational time

public enummember

bsUnfitDepth

If child tree depth exceeds BloatLimit, then child is added to next generation but fitness is 0

public enummember

bsUnfitSize

If child tree size (number of nodes in tree) exceeds BloatLimit, then child is added to next generation but fitness is 0
 

Top

expandingRemarks

For bsSizeParsimonyPressure and bsDepthParsimony methods, the value of the ParsimonyCoefficient property is very important. As stated in A Field Guide to Genetic Programming, "the parsimony pressure method effectively treats the minimisation of size as a soft constraint and attempts to enforce this constraint using the penalty method, i.e., by decreasing the fitness of programs by an amount that depends on their size. The penalty is typically simply proportional to program size. The intensity with
which bloat is controlled is, therefore, determined by the parsimony coefficient. The value of this coefficient is very important: too small a value and runs will still bloat wildly; too large a value and GP will take the minimisation of size as its main target and will almost ignore fitness, thus converging towards extremely small but useless programs"

expandingSee Also

Reference

TRSCustomGeneticProgramming<T>.BloatStrategy
TRSCustomGeneticProgramming<T>.BloatLimit

Comments (0)