Пример #1
0
        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];
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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];
            }
        }
Пример #4
0
        // 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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
 //  кроссенговер
 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];
         }
     }
 }
Пример #8
0
        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;
        }