module CrossoverMethods

Public Instance Methods

order_crossover(chs1, chs2) click to toggle source
# File lib/crossover_methods.rb, line 2
def order_crossover(chs1, chs2)
    idx = rand(chs1.size/2)
    new_chs1 = Chromosome.new(@chromosome_type, chs1.size, @mutation_method, @mutation_probability)
    new_chs1.clear
    new_chs1 << chs1[idx..(idx+chs1.size/2)]
    new_chs1.flatten!
    new_chs2 = Chromosome.new(@chromosome_type, chs1.size, @mutation_method, @mutation_probability)
    new_chs2.clear
    new_chs2 << chs2[idx..(idx+chs2.size/2)]
    new_chs2.flatten!

    chs1.size.times do |i|
        unless new_chs1.include? chs2[i]
            if new_chs1.size<=(chs1.size*3/4)
                new_chs1.insert(0,chs2[i])
            else
                new_chs1.push(chs2[i])
            end
        end
    end

    chs2.size.times do |i|
        unless new_chs2.include? chs1[i]
            if new_chs2.size<=(chs2.size*3/4)
                new_chs2.insert(0,chs1[i])
            else
                new_chs2.push(chs1[i])
            end
        end
    end

    return [new_chs1, new_chs2]
end