#######################################################################
# This software has been created by Genome Research Limited (GRL).    # 
# GRL hereby grants permission to use, copy, modify and distribute    # 
# this software and its documentation for non-commercial purposes     # 
# without fee at the user's own risk on the basis set out below.      #
# GRL neither undertakes nor accepts any duty whether contractual or  # 
# otherwise in connection with the software, its use or the use of    # 
# any derivative, and makes no representations or warranties, express #
# or implied, concerning the software, its suitability, fitness for   #
# a particular purpose or non-infringement.                           #
# In no event shall the authors of the software or GRL be responsible # 
# or liable for any loss or damage whatsoever arising in any way      # 
# directly or indirectly out of the use of this software or its       # 
# derivatives, even if advised of the possibility of such damage.     #
# Our software can be freely distributed under the conditions set out # 
# above, and must contain this copyright notice.                      #
#######################################################################

package AutoOrder;

#####################################################################################################################
#
# Genetic heuristic : Calculates the best contig order .... using fwd and rev read information
# 
#
#
#
#
#####################################################################################################################

#####################################################################################################################
# Globals ....

# Fuck  em !!!!!!


my %Population;			# array of Randomised assemblys..... n contigs long..


####################################################################################################################
# Decs
#

sub Populate;   # Generate a population of size = n ... random arrangement
sub Select;     # Select best individuals ... meeting given criteria
sub Recombine;  # Recombine individuals.... random cross over... freq = f

#####################################################################################################################
sub Populate{
    my ($num,@Assem) = @_;

    my $count =0;
    my @ NAssem;

    for($i=0; $i < num; $i++)
    {
	@NAssem = @Assem;
	push(@{$Population{$i}},splice(@NAssem,rand(@NAssem),1)
	     while (@NAssem);

    }

}
#####################################################################################################################
sub Select{

}
#####################################################################################################################
sub GetVictims{

  

}
#####################################################################################################################
sub Recombine{
    my ($freq) = @_;

    my $num = $#(keys(%Population));   # number to mutate
    my $count = $num;
    my $genome_size = $#($Population{0});
    my $crossover;
    my @p1;
    my @p2;

    for($i=0;$i < num; $i++)
    {
        # crossover point
	$crossover = rand($genome_size) while(($crossover == 0) && ($crossover == $genome_size));
        @p1 = $Population{rand($num)};
        @p2 = $Population{rand($num)};
        push(@{Population{$count++}}, splice(@p1,0,$crossover),splice(@p2,$crossover+1,$#p2)); 
        
    }

}
#####################################################################################################################

1;




