def self.reproduce(a, b)
data_size = @@costs[0].length
available = []
0.upto(data_size-1) { |n| available << n }
token = a.data[0]
spawn = [token]
available.delete(token)
while available.length > 0 do
if token != b.data.last && available.include?(b.data[b.data.index(token)+1])
next_token = b.data[b.data.index(token)+1]
elsif token != a.data.last && available.include?(a.data[a.data.index(token)+1])
next_token = a.data[a.data.index(token)+1]
else
next_token = available[rand(available.length)]
end
token = next_token
available.delete(token)
spawn << next_token
a, b = b, a if rand < 0.4
end
return Chromosome.new(spawn)
end