Генетическое программирование - PullRequest
1 голос
/ 05 марта 2011

Мне нужно руководство по проекту Java.Я должен разработать генетическое (семейное) древо человека.

Это тема:

Каждая клетка человека содержит 23 пары хромосом, пронумерованных от 1 до 22, и пару половых хромосом.: XX у женщин и XY у мужчин.Во время оплодотворения 22 хромосомы (X или Y) мужчины сливаются с 22 + Х хромосомой женщины.Это приводит к 22 парам хромосом + (X или Y) в клетке, которые сформируют будущего ребенка.23-я хромосома, переданная отцом (X или Y), определит пол ребенка (XX для девочки, XY для мальчика).

Каждая хромосома несет много генов (кодирующих практически все, что является характеристикойморфологический, физиологический, поведенческий).Из-за пар хромосом генетическая информация дублируется (за исключением частей половых хромосом).Каждая копия гена называется аллелем. Таким образом, это означает, например, что если ген отвечает за цвет глаза, то аллель синий .

Генетическая информация, выраженная как следствие комбинированной экспрессии аллелейприсутствоватьДоминантный аллель всегда экспрессируется в геноме его носителя.Однако, если информация от одного аллеля не выражена, когда присутствует доминантный аллель того же гена, это рецессивный аллель.Особенность рецессивного аллеля гена состоит в том, что он может присутствовать в геноме и передаваться в течение нескольких поколений без его экспрессии в фенотипе его носителей.Если доминантного аллеля нет, две копии гена имеют один и тот же рецессивный аллель (гомозиготный рецессивный), тогда рецессивный характер выражен.Используя семейное древо, можно определить экспрессию гена в семье.

Программа должна быть в состоянии сделать следующее:

- создать упрощенную версию, на которую опирается23 хромосомы и позволяют пользователю размещать гены в хромосомах, а затем моделировать репликацию, митоз, мейоз и слияние хромосом и отображать расположение генов на полученных клетках.

- позволяет рисовать генеалогические деревья и выводить вероятности (или определенность) в отношении экспрессии генов в генеалогическом древе человека.

Пока все хорошо, я создал класс Gene и класс Chromosome.Затем я подумал о создании класса «Родитель», например, и создании в нем 23 хромосом.Но прежде чем сделать это, я хочу сделать 23-ю хромосому другой для мужчины / женщины.Затем имитирует репликацию, кроссоверы, митоз и т.д. Я не знаю, нахожусь ли я на правильном пути.Я также не знаю, как указать, что определенный аллель / ген является рецессивным или доминантным.На данный момент мои занятия действуют только случайным образом.Я документирую

Gene.java

import java.util.Random;

/**
 * @author mkab
 *
 */
public class Gene implements Cloneable {

    private Object allele;

    public Gene(){
        super();
    }
    public Gene(Object allele){
        super();
        this.allele = allele;
    }

    /**
     * Randomly selects a trait from trait1 or trait2 and returns a new Gene with that trait
     * @param trait1
     * @param trait2
     * 
     * @return a new Gene
     */
    public Gene randomAllele(Object trait1, Object trait2){
        Object allele = null;
        Random rand = new Random();
        int i = rand.nextInt(2);// generate between 0 and 2: only 2 possibilities: 0 or 1
        switch(i){
        case 0:
            allele = trait1;
            break;
        case 1:
            allele = trait2;
            break;
        }
        return new Gene(allele);
    }


    public Gene clone() throws CloneNotSupportedException{
        Gene g;
        g = (Gene) super.clone();
        return g;
    }
    /**
     * @param allele the allele to set
     */
    public void setAllele(Object allele) {
        this.allele = allele;
    }

    /**
     * @return the allele
     */
    public Object getAllele() {
        return allele;
    }

    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "Gene [allele=" + allele +"]";
    }
}

Chromosome.java

/**
 * 
 */
package project_try;

import java.util.ArrayList;
import java.util.Iterator;

/**
 * Class that creates a pair of chromosome by adding random genes
 * @author mkab
 *
 */
public class Chromosome implements Cloneable {

    /**
     * the user can put as many genes as possible on the chromosome
     */
    private ArrayList<Gene> genes = new ArrayList<Gene>();

    public Chromosome(){
        super();
    }

    public Chromosome(ArrayList<Gene> genes){
        this.genes = genes;
    }

    /**
     * Add a gene object to this chromosomes list.
     */
    public void addGene(Gene gene) {
        genes.add(gene);
    }


    /**
     *creates a copy of a chromosome
     */
    @SuppressWarnings("unchecked")
    @Override
    public Chromosome clone()throws CloneNotSupportedException{
        Chromosome c;
        c = (Chromosome) super.clone();
        c.genes = (ArrayList<Gene>)this.genes.clone();
        //Iterator<Gene> it = c.genes.iterator();
        /*Gene tmp;
        while(it.hasNext()){

        }*/
        return c;
    }

    /**
     * @return the genes
     */
    public ArrayList<Gene> getGenes() {
        return genes;
    }

    /**
     * @param genes the genes to set
     */
    public void setGenes(ArrayList<Gene> genes) {
        this.genes = genes;
    }

    /**
     * 
     * @return
     */
    public int getSize(){
        return genes.size();
    }

    /**
     * @return a gene at an index i of the ArrayList
     * @param index - the index at which to return a gene
     */
    public Gene getGenes(int index) {
        return genes.get(index);
    }


    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "Chromosome [genes=" + genes + "]";
    }

}

Моя проблема в том, чтобы сделать ген рецессивным или доминантным.Например, когда хромосомы мужского пола с генами голубых глаз совпадают с хромосомами женского пола с коричневыми, если мужские гены доминируют, у ребенка будут голубые глаза вместо коричневых, но у этого ребенка все еще будет рецессивный ген «карие глаза»где-то внутри него.

Я также хочу знать, правильно ли решаются мои классы.Я также думаю о создании класса "Pair_of_chromosome", например, содержащего две переменные хромосомы, и создании класса "Parent", содержащего таблицу из 23 "Pair_of_chromosome".Я не знаю, правильный ли это путь.

Ответы [ 2 ]

0 голосов
/ 05 марта 2011

Вот некоторый Октавный код для проведения подобных исследований генетического моделирования. YMMV.

0 голосов
/ 05 марта 2011

Я не очень разбираюсь в генетике, однако правильный способ смоделировать это состоит в том, чтобы иметь класс Person, реализовать конструктор, который принимает 2 человека (родителей), бросить исключение, если они одного пола, создать хромосомы(и отдельные гены) для нового Человека внутри этого конструктора на основе случайной комбинации родителей (с учетом рецессивных генов и т. д.).

...