1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
public Class Individual{
public Individual() {
this.genome = new Genome();
}
Genome genome; // génome = tableau d'objets de classe Gene
double W; // probabilité de survie de l'individu: affectée
// différemment suivant la classe du gène (G1, G2 etc)
double trait;
}
public class Genome {
/** Creates a new instance of Genome */
public Genome() {
// Genome.nb_chrom: nombre de chromosomes; Genome.nb_loci[i]: nombre de locus pour le chromosome i
// ces locus peuvent être de différentes classes, avec des effets différents sur la survie de l'individu
this.loci = new Locus[Genome.nb_chrom][];
for (int which_pair = 0; which_pair < Genome.nb_chrom; which_pair ++) {
this.loci[which_pair] = new Locus[ Genome.nb_loci[which_pair] ];
for (int which_locus = 0; which_locus < Genome.nb_loci[which_pair]; which_locus ++){
switch (Genome.genetic_map[which_pair][which_locus]){
case 0: this.loci[which_pair][which_locus] = new Locus_type_0();
break;
case 1: this.loci[which_pair][which_locus] = new Locus_type_1();
}
}
}
public Locus[][] loci;
}
public abstract class Locus {
public Locus() {
}
Allele[] alleles;
public abstract void calculSurvie(Individual ind);
}
public class Locus_type_0 extends Locus {
public Locus_type_0() {
this.alleles = new Allele_type_0[2];
}
Allele_type_0[] alleles;
public void calculSurvie(Individual ind){
if (this.alleles[0] == this.alleles[1]) {
ind.type_0_W *= this.alleles[0].s;
// "s" est un champ spécifique de la classe Allele_type_0
}
else {
// faire autre chose;
}
}
}
public class Locus_type_1 extends Locus {
public Locus_type_1() {
this.alleles = new Allele_type_1[2];
}
Allele_type_1[] alleles;
public void calculSurvie(Individual ind){
ind.trait = (this.alleles[0].effect_on_trait + this.alleles[1].effect_on_trait);
// "effect_on_trait" est un champ spécifique de la classe Allele_type_1
}
} |
Partager