Ejemplo n.º 1
0
        public double fit(Explorer ex)
        {
            //zakladni fitness funkce
            int[,] tmap = new int[33, 34];
            Array.Copy(map, tmap, 33 * 34);

            int    nkr = kroku;//citac poctu kroku
            double i   = 0;

            fitc(ex, 0);//orez hlubokyc vetvi
            ex      = ex.ToRoot();
            lastnam = 0;

            Mravenec mr = new Mravenec(2, 2, 1);

            //smicka behu programu
            while (true)
            {
                if (nkr <= 0)
                {
                    break;
                }
                i += fitt(ex, mr, tmap, ref nkr); //pripocti fitness
                ex = ex.ToRoot();                 //ziskej koren stromu
            }
            return(90 - i - (lastnam + 5) / 8000f /*- ex.Chro.WebLen(0)/1250*/);
        }
Ejemplo n.º 2
0
        public double fitt(Explorer ex, Mravenec mr, int[,] tmap, ref int nkr)
        {
            //uzceni fitness
            if (nkr == 0)//kontrola ujdetych kroku
            {
                return(0);
            }
            int c = ex.GetNFunc(); //zjisteny arity
            int f = ex.GetFunc();  //funkce

            if (c <= 1)            //arita mensi jak 2
            {
                nkr--;             //odecteni poctu kroku
                f = f % 3;
                if (0 == f)        //go
                {
                    mr.Go();
                    if (!mr.InMap())
                    {
                        return(0);
                    }
                    mapp[mr.X, mr.Y] = 1;

                    if (tmap[mr.X, mr.Y] == 1)
                    {
                        tmap[mr.X, mr.Y] = 0;
                        lastnam          = nkr;
                        return(1);
                    }
                }
                if (f == 1)//right
                {
                    mr.GoRight();
                }
                if (f == 2)//left
                {
                    mr.GoLeft();
                }
            }

            if (c == 2)
            {
                f = f % 2;
                if (f == 0)
                {
                    double bf = fitt(ex.GetNextChildren(), mr, tmap, ref nkr) + fitt(ex.GetNextChildren(), mr, tmap, ref nkr);
                    return(bf);
                }
                if (f == 1)
                {
                    mr.GoB();

                    if (mr.InMap() && tmap[mr.XB, mr.YB] == 1)
                    {
                        return(fitt(ex.GetNextChildren(), mr, tmap, ref nkr) + 0.00000000000000000000000001);
                    }
                    else
                    {
                        ex.GetNextChildren();
                        return(fitt(ex.GetNextChildren(), mr, tmap, ref nkr) + 0.00000000000000000000000001);
                    }
                }
            }
            if (c == 3)
            {
                return(fitt(ex.GetNextChildren(), mr, tmap, ref nkr) + fitt(ex.GetNextChildren(), mr, tmap, ref nkr) + fitt(ex.GetNextChildren(), mr, tmap, ref nkr));
            }
            return(0);
        }