예제 #1
0
        static void _2048(Random r)
        {
            for (int i = 0; i < 50; ++i)
            {
                Pool p = new Pool(16, 4, r);
                p.Population = 500;
                Agent2048 a2 = new Agent2048(r);
                a2.Execute   = 5;
                a2.FailLimit = 1;
                a2.InputMode = 3;

                a2.Fit = (int score, int logScore, int bitScore) =>
                {
                    double fit;
                    fit = (long)score * score * score;
                    return((long)fit);
                };

                Writer             w   = new Writer(new FileInfo(string.Format("D://NEAT/2048/CubeScoreInput3/Data{0}.txt", i)));
                Data2048Dictionary d2d = new Data2048Dictionary();
                p.Agent          = a2;
                p.DeltaThreshold = 10;
                p.DeltaDisjoint  = 10;
                p.DeltaWeight    = 4;

                p.LinkMutationChance       = 0.75;
                p.ConnectionMutationChance = 0.5;
                p.NodeMutationChance       = 0.2;

                p.WritePlayData  = true;
                p.WriteSpecies   = true;
                p.Writer         = w;
                p.DataDictionary = d2d;
                w.Start(p, a2.Execute);
                p.Initialize();
                p.DisplayTop = int.MaxValue;
                for (int k = 0; k < 300; ++k)
                {
                    p.Evaluate();
                }
            }
        }
예제 #2
0
파일: GameForm.cs 프로젝트: sbkim28/Neat_AI
        private void UpdateGraphics(object sender, PaintEventArgs e)
        {
            Graphics canvas = e.Graphics;

            if (!isPlaying)
            {
                return;
            }

            LblScoreValue.Text = "" + agent.Score;

            if (agent is SnakeAgent)
            {
                SnakeAgent sa    = agent as SnakeAgent;
                Brush      color = Brushes.White;

                LblHungerValue.Text = "" + sa.Hunger;

                int x = sa.X;
                int y = sa.Y;
                int[,] cells = new int[y, x];
                cells[sa.Food.Y, sa.Food.X] = 1;
                foreach (Square s in sa.Snake)
                {
                    cells[s.Y, s.X] = -1;
                }
                for (int i = 0; i < y; ++i)
                {
                    for (int j = 0; j < x; ++j)
                    {
                        if (cells[i, j] == 0)
                        {
                            color = Brushes.White;
                        }
                        else if (cells[i, j] == -1)
                        {
                            color = Brushes.Black;
                        }
                        else if (cells[i, j] == 1)
                        {
                            color = Brushes.Red;
                        }
                        canvas.FillRectangle(color, new Rectangle(
                                                 j * GameBox.Width / x + 1, i * GameBox.Height / y + 1, GameBox.Width / x - 1, GameBox.Height / y - 1
                                                 ));
                    }
                }
            }
            else if (agent is Agent2048)
            {
                Agent2048 a2    = agent as Agent2048;
                Brush     color = Brushes.White;
                for (int i = 0; i < 16; ++i)
                {
                    if (a2.Cells[i] == 0)
                    {
                        color = Brushes.White;
                    }
                    else
                    {
                        color = new SolidBrush(Color.FromArgb(255, 255, 255 - (a2.Cells[i] * 16)));
                    }
                    canvas.FillRectangle(color, new Rectangle(
                                             (i % 4) * GameBox.Width / 4 + 1, (i / 4) * GameBox.Height / 4 + 1, GameBox.Width / 4 - 1, GameBox.Height / 4 - 1
                                             ));
                }
            }

            if (agent.Gameover)
            {
                isPlaying = false;
            }
        }