use strict; #-*-cperl-*-
use warnings;

use lib qw( ../../.. );

=head1 NAME

Algorithm::Evolutionary::Op::Replace_Worst - Incorporate individuals into the population replacing the worst ones


  my $op = new Algorithm::Evolutionary::Op::Replace_Worst; 
  $op->apply( $old_population_hashref, $new_population_hashref );

=head1 Base Class



Attempts all possible mutations in order, until a "novelty" individual
is found. Generated individuals are checked against the population
hash, and discarded if they are already in the population.

=head1 METHODS 


package Algorithm::Evolutionary::Op::Replace_Worst;

our ($VERSION) = ( '$Revision: 3.2 $ ' =~ /(\d+\.\d+)/ );

use Carp;

use base 'Algorithm::Evolutionary::Op::Base';

#Class-wide constants
our $ARITY = 1;

=head2 new()

Does nothing, really


sub new {
  my $class = shift;
  my $self = {}; # Create a reference
  bless $self, $class; # And bless it
  return $self;

=head2 apply( $population, $chromosome_list )

    Eliminates the worst individuals in the population, replacing them by the list of new chromosomes. The population must be evaluated, but there's no need to have it sorted in advance. 


sub apply ($;$){
  my $self = shift;
  my $population = shift || croak "No population here!";
  my $chromosome_list = shift || croak "No new population here!";
  my @sorted_population = sort { $b->Fitness() <=> $a->Fitness(); }
    @$population ;
  my $to_eliminate = scalar @$chromosome_list;
  splice ( @sorted_population, -$to_eliminate );
  push @sorted_population, @$chromosome_list;

  return \@sorted_population;


=head1 SEE ALSO

L<Algorithm::Evolutionary::Op::Generation_Skeleton>, where the
replacement policy is one of the parameters 

It can also be used in L<POE::Component::Algorithm::Evolutionary> for
insertion of new individuals asynchronously.

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

  CVS Info: $Date: 2010/12/20 16:56:46 $ 
  $Header: /media/Backup/Repos/opeal/opeal/Algorithm-Evolutionary/lib/Algorithm/Evolutionary/Op/,v 3.2 2010/12/20 16:56:46 jmerelo Exp $ 
  $Author: jmerelo $ 
  $Revision: 3.2 $
  $Name $