AI-Gene-Sequence
view release on metacpan or search on metacpan
AI/Gene/Simple.pm view on Meta::CPAN
sub render_gene {
my $self = shift;
my $return = "$self\n";
$return .= (join ',', @{$self->[0]}). "\n";
return $return;
}
# used for testing
sub _test_dump {
my $self = shift;
my $rt = (join('',@{$self->[0]}));
return $rt;
}
1;
__END__;
=pod
=head1 NAME
AI::Gene::Simple
=head1 SYNOPSIS
A base class for storing and mutating genetic sequences.
package Somegene;
use AI::Gene::Simple;
our @ISA = qw (AI::Gene::Simple);
sub generate_token {
my $self = shift;
my $prev = $_[0] ? $_[0] + (1-rand(1)) : rand(1)*10;
return $prev;
}
sub calculate {
my $self = shift;
my $x = $_[0];
my $rt=0;
for (0..(scalar(@{$self->[0]}) -1)) {
$rt += $self->[0][$_] * ($x ** $_);
}
return $rt;
}
sub seed {
my $self = shift;
$self->[0][$_] = rand(1) * 10 for (0..$_[0]);
return $self;
}
# ... then elsewhere
package main;
my $gene = Somegene->new;
$gene->seed(5);
print $gene->calculate(2), "\n";
$gene->mutate_minor;
print $gene->calculate(2), "\n";
$gene->mutate_major;
print $gene->calculate(2), "\n";
=head1 DESCRIPTION
This is a class which provides generic methods for the
creation and mutation of genetic sequences. Various mutations
are provided but the resulting mutations are not checked
for a correct syntax. These classes are suitable for genes
where it is only necessary to know what lies at a given
position in a gene. If you need to ensure a gene maintains
a sensible grammar, then you should use the AI::Gene::Sequence
class instead, the interfaces are the same though so you
will only need to modify your overiding classes if you need to
switch from one to the other.
A suitable use for this module might be a series of coefficients
in a polynomial expansion or notes to be played in a musical
score.
This module should not be confused with the I<bioperl> modules
which are used to analyse DNA sequences.
It is intended that the methods in this code are inherited
by other modules.
=head2 Anatomy of a gene
A gene is a linear sequence of tokens which tell some unknown
system how to behave. These methods all expect that a gene
is of the form:
[ [ 'token0', 'token1', ... ], .. other elements ignored ]
=head2 Using the module
To use the genetic sequences, you must write your own
implementations of the following methods along with some
way of turning your encoded sequence into something useful.
=over 4
=item generate_token
=back
You may also want to override the following methods:
=over 4
=item new
=item clone
=item render_gene
=back
The calling conventions for these methods are outlined below.
=head2 Mutation methods
( run in 0.706 second using v1.01-cache-2.11-cpan-d8267643d1d )