public static void CopiCh(Parametrs A, Chromosom chromA, out Chromosom chromB) { chromB = new Chromosom(A); for (int i = 0; i < A.Length / A.Setka; i++) { chromB[i] = false; } for (int i = A.Length / A.Setka; i < Chromosom.Length; i++) { chromB[i] = chromA[i - 12]; } }
double TestGenot_in_Fenotip(Chromosom ch) { Int32 gen = 0; for (int i = 0; i < Chromosom.Length; i++) { if (ch[i]) { gen += 1 << i; } } return(Aa.interM[0, 0] + gen * (Aa.interM[0, 1] - Aa.interM[0, 0]) / (Math.Pow(2.0, Chromosom.Length) - 1)); //Min + gen * (Max - Min) / (Math.Pow(2.0, Chromosom.Length) - 1); }
public static void CopiCh(Parametrs A, Chromosom chromA, out Chromosom chromB) { chromB = new Chromosom(A); int t0 = A.Length - A.Length / A.Setka; // 24/2=12 а надо 24-12 // 36/3=12 а надо 36-36/3= 24 for (int i = 0; i < t0; i++) { chromB[i] = false; } for (int i = t0; i < Chromosom.Length; i++) { chromB[i] = chromA[i - t0]; } }
// Parametrs A public Individ(Parametrs A) //double min, double max, { if (A.Chom == 2) { xrom[0] = new Chromosom(A); xrom[1] = new Chromosom(A); } if (A.Chom == 4) { xrom[0] = new Chromosom(A); xrom[1] = new Chromosom(A); xrom[2] = new Chromosom(A); xrom[3] = new Chromosom(A); } // xrom_1 = new Chromosom(A); // xrom_2 = new Chromosom(A); // Min = inter0[0,0]; //new float[,] { { inter0[0, 0], inter0[0, 1] } }; // Max = inter0[0,1]; // Set_chrom(L, Mut, Inv, point, point2); }
public static Individ CopiInd(Parametrs a, Individ A, Individ B) { B = new Individ(a); if (a.Chom == 2) {//CopiCh(Parametrs A, Chromosom chromA, out Chromosom chromB) Chromosom.CopiCh(a, A.xrom[0], out B.xrom[0]); Chromosom.CopiCh(a, A.xrom[1], out B.xrom[1]); } if (a.Chom == 4) { Chromosom.CopiCh(a, A.xrom[0], out B.xrom[0]); Chromosom.CopiCh(a, A.xrom[1], out B.xrom[1]); Chromosom.CopiCh(a, A.xrom[2], out B.xrom[2]); Chromosom.CopiCh(a, A.xrom[3], out B.xrom[3]); } //Chromosom.PointCrossOver(a, A.xrom_1, B.xrom_1, out C[0].xrom_1, out C[1].xrom_1); //Chromosom.PointCrossOver(a, A.xrom_2, B.xrom_2, out C[0].xrom_2, out C[1].xrom_2); return(B); }
public static Individ[] PointCrossOver(Parametrs a, Individ A, Individ B) { Individ[] C = new Individ[] { new Individ(a), new Individ(a) }; if (a.Chom == 2) { Chromosom.PointCrossOver(a, A.xrom[0], B.xrom[0], out C[0].xrom[0], out C[1].xrom[0]); Chromosom.PointCrossOver(a, A.xrom[1], B.xrom[1], out C[0].xrom[1], out C[1].xrom[1]); } if (a.Chom == 4) { Chromosom.PointCrossOver(a, A.xrom[0], B.xrom[0], out C[0].xrom[0], out C[1].xrom[0]); Chromosom.PointCrossOver(a, A.xrom[1], B.xrom[1], out C[0].xrom[1], out C[1].xrom[1]); Chromosom.PointCrossOver(a, A.xrom[2], B.xrom[2], out C[0].xrom[2], out C[1].xrom[2]); Chromosom.PointCrossOver(a, A.xrom[3], B.xrom[3], out C[0].xrom[3], out C[1].xrom[3]); } //Chromosom.PointCrossOver(a, A.xrom_1, B.xrom_1, out C[0].xrom_1, out C[1].xrom_1); //Chromosom.PointCrossOver(a, A.xrom_2, B.xrom_2, out C[0].xrom_2, out C[1].xrom_2); return(C); }
// кроссенговер public static void PointCrossOver(Parametrs A, Chromosom chromA, Chromosom chromB, out Chromosom chromC, out Chromosom chromD) { if (!A.Ipoint) {// однототечный кроссенговер chromC = new Chromosom(A); chromD = new Chromosom(A); for (int i = 0; i < A.point1; i++) { chromC[i] = chromA[i]; chromD[i] = chromB[i]; } for (int i = A.point1; i < Chromosom.Length; i++) { chromC[i] = chromB[i]; chromD[i] = chromA[i]; } } else {// двухточеный кроссенговер chromC = new Chromosom(A); chromD = new Chromosom(A); int i = 0; for (i = 0; i < A.point1; i++) { chromC[i] = chromA[i]; chromD[i] = chromB[i]; } for (i = A.point1; i < A.point2; i++) { chromC[i] = chromB[i]; chromD[i] = chromA[i]; } for (i = A.point2; i < Chromosom.Length; i++) { chromC[i] = chromA[i]; chromD[i] = chromB[i]; } } }
private void Test_Chrom() { Chromosom test1 = new Chromosom(Aa); Chromosom test2 = new Chromosom(Aa); Chromosom test3 = new Chromosom(Aa); Chromosom test4 = new Chromosom(Aa); MtextBox.Text = MtextBox.Text + Environment.NewLine + "1)" + test1.Prin(Aa) + " 2)" + test2.Prin(Aa) + Environment.NewLine; MtextBox.Text = MtextBox.Text + "3)" + test3.Prin(Aa); MtextBox.Text = MtextBox.Text + " 4)" + test4.Prin(Aa) + Environment.NewLine; MtextBox.Text = MtextBox.Text + TestGenot_in_Fenotip(test1) + " " + TestGenot_in_Fenotip(test2) + Environment.NewLine; MtextBox.Text = MtextBox.Text + TestGenot_in_Fenotip(test3) + " " + TestGenot_in_Fenotip(test4) + Environment.NewLine; Chromosom.PointCrossOver(Aa, test1, test2, out test3, out test4); MtextBox.Text = MtextBox.Text + "3)" + test3.Prin(Aa); MtextBox.Text = MtextBox.Text + " 4)" + test4.Prin(Aa) + Environment.NewLine; MtextBox.Text = MtextBox.Text + TestGenot_in_Fenotip(test1) + " " + TestGenot_in_Fenotip(test2) + Environment.NewLine; MtextBox.Text = MtextBox.Text + TestGenot_in_Fenotip(test3) + " " + TestGenot_in_Fenotip(test4) + Environment.NewLine; }