using System; using L=Science.Biology.PopulationGenetics; namespace ScienceTest.BiologyTest.PopulationGeneticsTest { /// /// Caste System is considered. /// public class HierarchicalMatingWithBioGene { private string result; public string Result { get{return result;} } public HierarchicalMatingWithBioGene() { } public void Compute() { L.Chromosome[] Ac = new L.Chromosome[22]; Ac[0] = new L.Chromosome(); Ac[1] = new L.Chromosome(); Ac[2] = new L.Chromosome(); Ac[3] = new L.Chromosome(); Ac[4] = new L.Chromosome(); // give one gene L.Gene g0 = new L.Gene(); g0.NumberOfAllele = 3; g0.ChromosomeNumber = 6; g0.StartBase = 1000; g0.EndBase = 1000; g0.FindMutation(); Ac[5] = new L.Chromosome(g0); Ac[6] = new L.Chromosome(); Ac[7] = new L.Chromosome(); Ac[8] = new L.Chromosome(); Ac[9] = new L.Chromosome(); Ac[10] = new L.Chromosome(); Ac[11] = new L.Chromosome(); Ac[12] = new L.Chromosome(); Ac[13] = new L.Chromosome(); Ac[14] = new L.Chromosome(); Ac[15] = new L.Chromosome(); Ac[16] = new L.Chromosome(); Ac[17] = new L.Chromosome(); Ac[18] = new L.Chromosome(); Ac[19] = new L.Chromosome(); Ac[20] = new L.Chromosome(); Ac[21] = new L.Chromosome(); L.Chromosome X = new L.Chromosome(); L.Chromosome Y = new L.Chromosome(); L.Mitochondria mito = new L.Mitochondria(); L.SocialGene[] sg = new L.SocialGene[1]; sg[0] = new L.SocialGene(); sg[0].NumberOfAllele = 5; double epsilon = 0.01; // input double delta = epsilon; // input int times = 50; // input sg[0].From = 0; sg[0].To = 1; sg[0].ModifiedValue = epsilon/4.0; sg[0].SetMutation(); sg[0].From = 1; sg[0].To = 2; sg[0].ModifiedValue = epsilon/3.0; sg[0].SetMutation(); sg[0].From = 2; sg[0].To = 3; sg[0].ModifiedValue = epsilon/2.0; sg[0].SetMutation(); sg[0].From = 3; sg[0].To = 4; sg[0].ModifiedValue = epsilon; sg[0].SetMutation(); for(int f = 0; f < 5; f++) for(int m = 0; m < 5; m++) for(int b = 0; b < 5; b++) { sg[0].WhichFemale = f; sg[0].WhichMale = m; sg[0].WhichFemaleBaby = b; sg[0].WhichMaleBaby = b; if(m==b) sg[0].ModifiedValue = 1.0; else sg[0].ModifiedValue = 0.0; sg[0].SetReproductionXX(); sg[0].SetReproductionXY(); } L.ChromosomePair[] Cp = new L.ChromosomePair[22]; for(int i = 0; i < 22; i++) Cp[i] = new L.ChromosomePair(Ac[i]); L.ChromosomePair XX = new L.ChromosomePair(X); L.GenotypeFemale fg = new L.GenotypeFemale(Cp,XX,mito,sg); L.GenotypeMale mg = new L.GenotypeMale(Cp,X,Y,mito,sg); L.PhenotypeFemale fph = new L.PhenotypeFemale(fg); L.PhenotypeMale mph = new L.PhenotypeMale(mg); for(int ph = 0; ph < fg.NumberOfAllele ; ph++) { fph.MapFrom = ph; fph.MapTo = ph % 5; fph.SetMap(); } for(int ph = 0; ph < mg.NumberOfAllele ; ph++) { mph.MapFrom = ph; mph.MapTo = ph % 5; mph.SetMap(); } L.Mating mating = new L.Mating(); mating.HierarchicalMating(fph,mph); L.Mutation mut = new L.Mutation(fg,mg); L.Reproduction reprod = new L.Reproduction(fg,mg); L.Selection select = new L.Selection(fg,mg); select.WhichMale = 4; select.ModifiedValue = delta; select.SetDisadvantageXY(); select.WhichMale = 9; select.ModifiedValue = delta; select.SetDisadvantageXY(); select.WhichMale = 14; select.ModifiedValue = delta; select.SetDisadvantageXY(); select.WhichMale = 19; select.ModifiedValue = delta; select.SetDisadvantageXY(); select.WhichMale = 24; select.ModifiedValue = delta; select.SetDisadvantageXY(); select.WhichMale = 29; select.ModifiedValue = delta; select.SetDisadvantageXY(); L.PopulationEquation eq = new L.PopulationEquation(mating,mut,reprod,select); double[] initialPopulationXX = new double[30]; double[] initialPopulationXY = new double[30]; /* * AA, AB, AC, BB, BC, CC : 0, 1, 2, 3, 4 */ initialPopulationXX[0] = 1.0; // AA : 0 initialPopulationXY[0] = 1.0; initialPopulationXX[1] = 2.0; // 1.0; // AA : 1 initialPopulationXY[1] = 2.0; // 1.0; initialPopulationXX[17] = 3.0; // 1.0; // BB : 2 initialPopulationXY[17] = 3.0; // 1.0; initialPopulationXX[18] = 4.0; // 1.0; // BB : 3 initialPopulationXY[18] = 4.0; // 1.0; initialPopulationXX[29] = 5.0; // 1.0; // CC : 4 initialPopulationXY[29] = 5.0; // 1.0; eq.InitialAdultFemalePopulation = initialPopulationXX; eq.InitialAdultMalePopulation = initialPopulationXY; eq.SetInitialPopulation(); for(int kt = 1; kt < 200; kt++) { eq.HowManyTimes = times; eq.Compute(); /* foreach(double k in eq.BirthFemalePopulation) result += Convert.ToString(k)+"\r\n"; result += "------\r\n"; foreach(double k in eq.BirthMalePopulation) result += Convert.ToString(k)+"\r\n"; result += "------\r\n"; foreach(double k in eq.AdultFemalePopulation) result += Convert.ToString(k)+"\t"; foreach(double k in eq.AdultMalePopulation) result += Convert.ToString(k)+"\t"; result += "\r\n"; foreach(double k in eq.ParentPopulation) result += Convert.ToString(k)+"\r\n"; result += eq.InfantMortality(); */ } foreach (double k in eq.AdultFemalePopulation) result += Convert.ToString(k) + "\t"; foreach (double k in eq.AdultMalePopulation) result += Convert.ToString(k) + "\t"; result += "\r\n"; } } }