Пример #1
0
    def crossover(self, organism1: Organism, organism2: Organism):

        if organism1.genome_size != organism1.genome_size:
            raise ValueError('Genome of organisms should be same size')

        genome_size = organism1.genome_size

        one_third_point = int(genome_size / 3)

        two_third_point = int(genome_size / 3) * 2

        crossover_point1 = random.randint(0, one_third_point)

        crossover_point2 = random.randint(one_third_point, two_third_point)

        crossover_point3 = random.randint(two_third_point, genome_size)

        new_genome = []
        for i in range(genome_size):
            if i < crossover_point1:
                new_genome.append(organism1.genome[i])
            elif crossover_point1 <= i < crossover_point2:
                new_genome.append(organism2.genome[i])
            elif crossover_point2 <= i < crossover_point3:
                new_genome.append(organism1.genome[i])
            else:
                new_genome.append(organism2.genome[i])

        return Organism(new_genome)
Пример #2
0
    def introduce(self, organism: Organism):
        new_genome = []

        for i, g in enumerate(organism.genome):
            r = random.uniform(0, 1)
            if r < self.frequency_of_mutations:
                initial_gene = self.initial_organism.genome[i]
                rand = random.uniform(0, int(initial_gene / self.divider))
                new_genome.append(initial_gene - rand)
            else:
                new_genome.append(g)

        return Organism(new_genome)
Пример #3
0
    def __init__(self, path: str):
        initial_organism_path = os.path.join(path, 'initial_organism.npy')
        if os.path.isfile(initial_organism_path):
            self.initial_organism = Organism.from_file(initial_organism_path)
        else:
            self.initial_organism = None

        initial_population_path = os.path.join(path, 'initial_population.npy')
        if os.path.isfile(initial_population_path):
            self.initial_population = Population.from_file(
                initial_population_path)
        else:
            self.initial_population = None

        self.hic_data = HiCData.from_files(path)
Пример #4
0
    def crossover(self, organism1: Organism, organism2: Organism):

        if organism1.genome_size != organism1.genome_size:
            raise ValueError('Genome of organisms should be same size')

        genome_size = organism1.genome_size

        new_genome = []
        for i in range(genome_size):
            first = random.randint(0, 1)
            if first:
                new_genome.append(organism1.genome[i])
            else:
                new_genome.append(organism2.genome[i])

        return Organism(new_genome)
    def crossover(self, organism1: Organism, organism2: Organism):

        if organism1.genome_size != organism1.genome_size:
            raise ValueError('Genome of organisms should be same size')

        genome_size = organism1.genome_size

        crossover_point = int(genome_size / 2)

        new_genome = []
        for i in range(genome_size):
            if i < crossover_point:
                new_genome.append(organism1.genome[i])
            else:
                new_genome.append(organism2.genome[i])

        return Organism(new_genome)
    def crossover(self, organism1: Organism, organism2: Organism):

        if organism1.genome_size != organism1.genome_size:
            raise ValueError('Genome of organisms should be same size')

        genome_size = organism1.genome_size

        #TODO: maybe should use Gaussian? Or cut in half?
        crossover_point = random.randint(0, genome_size)

        new_genome = []
        for i in range(genome_size):
            if i < crossover_point:
                new_genome.append(organism1.genome[i])
            else:
                new_genome.append(organism2.genome[i])

        return Organism(new_genome)
 def generate_organism(self, original_organism: Organism):
     new_genome = []
     for gene in original_organism.genome:
         rand = random.uniform(0, gene / 3)
         new_genome.append(gene - rand)
     return Organism(new_genome)
Пример #8
0
dm_path = os.path.join(directory, 'dm.npy')
np.save(dm_path, chromosome.distance_matrix.distance_matrix_nparray)

not_gaps_path = os.path.join(directory, 'not_gaps.npy')
np.save(not_gaps_path, hic_data.not_gaps)

curve_path = os.path.join(directory, 'curve.pdf')
files_helper.save_3d_plot(sample_name, curve_path, chromosome.points)

adj_path = os.path.join(directory, 'adj.png')
files_helper.save_adjastency_matrix(
    sample_name, adj_path, chromosome.distance_matrix.distance_matrix_nparray)

if not params.save_initial_population:
    print('Saved!')
    sys.exit()

initial_organism_genome = distance_matrix_sd.get_futm_except_ordered_coordinates(
    hic_data.not_gaps)
initial_organism = Organism(initial_organism_genome)
initial_population_generator = InitialPopulationGenerator()
initial_population = initial_population_generator.generate(
    initial_organism, params.population_size)

initial_organism_path = os.path.join(directory, 'initial_organism.npy')
initial_organism.save(initial_organism_path)

initial_population_path = os.path.join(directory, 'initial_population.npy')
initial_population.save(initial_population_path)
print('Saved!')
Пример #9
0
    initial_organism = sample.initial_organism
    initial_population = sample.initial_population
else:
    print('Running shortest distances algorithm... ', end='')
    start = time.time()
    distance_matrix_sd = shortest_distances_filler.fill(
        distance_matrix_with_gaps)
    end = time.time()
    elapsed = end - start
    print('Finished in {0} sec.'.format(timedelta(seconds=elapsed)))

    print('Generating initial organism (ADAM)... ', end='')
    start = time.time()
    initial_organism_genome = distance_matrix_sd.get_futm_except_ordered_coordinates(
        hic_data.not_gaps)
    initial_organism = Organism(initial_organism_genome)
    end = time.time()
    elapsed = end - start
    print('Finished in {0} sec.'.format(timedelta(seconds=elapsed)))

    print('Generating initial population... ', end='')
    start = time.time()
    initial_population = initial_population_generator.generate(
        initial_organism, params.population_size)
    end = time.time()
    elapsed = end - start
    print('Finished in {0} sec.'.format(timedelta(seconds=elapsed)))

print('Calculating ADAM\'s error... ', end='')
start = time.time()
adam_score = fitness_calculator.calculate(initial_organism.genome)
Пример #10
0
 def from_file(cls, path: str):
     list_of_genomes = np.load(path)
     organisms = []
     for genome in list_of_genomes:
         organisms.append(Organism(genome.tolist()))
     return cls(organisms)
 def test_10(self):
     organism1 = Organism([1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
     organism2 = Organism([2, 2, 2, 2, 2, 2, 2, 2, 2, 2])
     crossoverer = MiddlePointCrossoverer()
     result = crossoverer.crossover(organism1, organism2)
     self.assertEqual(result.genome, [1, 1, 1, 1, 1, 2, 2, 2, 2, 2])