View on
J. J. Merelo-Guervós > Algorithm-Evolutionary-0.78_2 > Algorithm::Evolutionary::Op::Permutation



Annotate this POD


Open  0
View/Report Bugs
Module Version: 3.5   Source   Latest Release: Algorithm-Evolutionary-0.80


Algorithm::Evolutionary::Op::Permutation - Per-mutation. Got it?


  use Algorithm::Evolutionary::Op::Permutation;

  my $op = new Algorithm::Evolutionary::Op::Permutation ; #Create from scratch
  my $bit_chromosome =  new Algorithm::Evolutionary::Individual::BitString 10;
  $op->apply( $bit_chromosome );

  my $priority = 2;
  my $max_iterations = 100; # Less than 10!, absolute maximum number
                            # of permutations
  $op = new Algorithm::Evolutionary::Op::Permutation $priority, $max_iterations;

  my $xmlStr=<<EOC;
  <op name='Permutation' type='unary' rate='2' />
  my $ref = XMLin($xmlStr);

  my $op = Algorithm::Evolutionary::Op::->fromXML( $ref );
  print $op->asXML(), "\n*Arity ->", $op->arity(), "\n";

Base Class ^



Class independent permutation operator; any individual that has the _str instance variable (like Algorithm::Evolutionary::Individual::String and Algorithm::Evolutionary::Individual::BitString) will have some of its elements swapped. Each string of length l has l! permutations; the max_iterations parameter should not be higher than that.

This kind of operator is used extensively in combinatorial optimization problems. See, for instance, @article{prins2004simple, title={{A simple and effective evolutionary algorithm for the vehicle routing problem}}, author={Prins, C.}, journal={Computers \& Operations Research}, volume={31}, number={12}, pages={1985--2002}, issn={0305-0548}, year={2004}, publisher={Elsevier} }

And, of course, Algorithm::MasterMind, where it is used in the evolutionary algorithms solutions.


new( [$rate = 1][, $max_iterations = 10] )

Creates a new permutation operator; see Algorithm::Evolutionary::Op::Base for details common to all operators. The chromosome will undergo a random number of at most $max_iterations. By default, it equals 10.


Creates a new mutation operator with an application priority, which defaults to 1.

Called create to distinguish from the classwide ctor, new. It just makes simpler to create an Operator

apply( $chromosome )

Applies at most max_iterations permutations to a "Chromosome" that includes the _str instance variable. The number of iterations will be random, so that applications of the operator on the same individual will create diverse offspring.


Uses Algorithm::Permute, which is purported to be the fastest permutation library around. Might change it in the future to Algorithm::Combinatorics, which is much more comprehensive.

Copyright ^

  This file is released under the GPL. See the LICENSE file included in this distribution,
  or go to

  CVS Info: $Date: 2011/02/19 17:59:32 $ 
  $Header: /cvsroot/opeal/Algorithm-Evolutionary/lib/Algorithm/Evolutionary/Op/,v 3.5 2011/02/19 17:59:32 jmerelo Exp $ 
  $Author: jmerelo $ 
  $Revision: 3.5 $
syntax highlighting: