Help language development. Donate to The Perl Foundation
Algorithm::Evolutionary::Simple - A simple evolutionary algorithm
Algorithm::Evolutionary::Simple is a module for writing simple and quasi-canonical evolutionary algorithms in Perl 6. It uses binary representation, integer fitness (which is needed for the kind of data structure we are using) and a single fitness function.
It is intended mainly for demo purposes. In the future, more versions will be available.
It uses a fitness cache for storing and not reevaluating, so take care of memory bloat.
Creates the initial population of binary chromosomes with the indicated length; returns an array.
Generates a random chromosome of indicated length. Returns a
Returns the number of trues (or ones) in the chromosome.
That's a bumpy road, returns 1 for each block of 4 which has the same true or false value.
Evaluates the chromosomes, storing values in the fitness cache. If
auto-t is set to 'True', uses autothreading for faster operation (if needed). In absence of that parameter, defaults to sequential.
Evaluates the population, returning a Mix, but does not use a cache. Intended mainly for concurrent operation.
$need elements with probability proportional to its weight, which is fitness in this case.
Returns the chromosome with a random bit flipped.
Returns two chromosomes, with parts of it crossed over. Generally you will want to do crossover first, then mutation.
Produces offspring from an array that contains the reproductive pool; it returns a
Returns the fitness of the first element. Mainly useful to check if the algorithm is finished.
Single generation of an evolutionary algorithm. The initial
Mix has to be evaluated before entering here using the
evaluate function. Will use auto-threading if
Mixes the two populations, returning a single one of the indicated size and with type Mix.
Packs the individual in a single
Int. The invidual must be binary, and the maximum length is 64.
Unpacks the individual that has been packed previously using
Packs a population, producing a buffer which can be sent to a channel or stored in a compact form.
Unpacks the population that has been packed using
$population can be an array or a Mix, in which case the keys are extracted. This returns the per-bit (or gene) frequency of one (or True) for the population.
$population is a Mix, in which case the keys are extracted. This returns the per-bit (or gene) frequency of one (or True) for the population of the best part of the population; the size of the population will be divided by the $proportion variable.
Generates a population of that size with every gene according to the indicated frequency.
Generates a new array with random elements of the two arrays that are used as arguments.
There is a very interesting implementation of an evolutionary algorithm in Algorithm::Genetic. Check it out.
This is also a port of Algorithm::Evolutionary::Simple to Perl6, which has a few more goodies, but it's not simply a port, since most of the code is completely different.
JJ Merelo email@example.com
Copyright 2018, 2019 JJ Merelo
This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.