>>>>> "R" == Robo <robo / mars.com> writes: R> Unfortunately my lack of knowledge in genetic and Perl means I couldn't R> quite get the code working. When it runs, each generation doesn't seem R> to improve. It would be great if someone could take a look, compare it R> to the original Perl version and see where I've gone wrong, and the fix R> require to get it working. The code's attached to this post. First the P version seems wrong. Perhaps best if you find a better algorithm. At least there are some basic errors R> my @sorted_population = sort { $a->{fitness} $b->{fitness} } @$pop_ref; <=> missing R> my $pop_size = scalar @$population; # population size R> R> # create the weights array: select only survivors from the population, R> # then use map to have only the fitness come through R> my @weights = map { $_->{fitness} } grep { $_->{survived} } @$population; R> R> # if we have less than 2 survivors, we're in trouble R> die "Population size $pop_size is too small" if $pop_size < 2; this algorithm seems wrong : be carefull with it R> $count += $weights->[$i]; R> $sample = $i if rand $count [$i]; rand($count) < $weights->[$i]; R> } unless (defined $sample) { $sample = $weights->[0]; } R> return $sample; R> } For the ruby version : you have at least a problem with fitness R> def fitness(dna) R> dna / 256 dna / 256.0 # otherwise ruby can use integer / R> end R> #sample an array of weighted elements R> def sample(weights) R> count = sample = 0 R> weights.each_index do |i| R> count += weights[i] R> sample = i if rand(count[i]) != 0 rand(count) < weights[i] R> end Guy Decoux