예제 #1
0
        public FrmNetworkVisualizer(NNFeedForwardNetwork network)
        {
            InitializeComponent();

            System.Drawing.Bitmap img = new System.Drawing.Bitmap(100, 100);
            g = System.Drawing.Graphics.FromImage(img);
            picNetwork.Image = img;

            setNetwork(network);
        }
예제 #2
0
파일: FrmPlay.cs 프로젝트: credl/SnakeAI
        public FrmPlay(NNFeedForwardNetwork network)
        {
            InitializeComponent();

            initWindow();
            this.network = network;

            gameloopThread = new System.Threading.Thread(gameloop);
            gameloopThread.Start();
        }
예제 #3
0
        private void initialize()
        {
            generation = 1;
            stop       = false;

            for (int i = 0; i < snakes.Length; i++)
            {
                networks[i] = new NNFeedForwardNetwork(NETWORKTOPOLOGY);
                networks[i].randomizeWeights();
            }

            //float[] f = networks[i].propagate(new float[] { 2.3f, 4.2f, 4.5f, 6.6f });
        }
예제 #4
0
        public void setNetwork(NNFeedForwardNetwork network)
        {
            if (network != null)
            {
                network.removeUpdateCallback(updateCallback);
            }
            this.network = network;

            const int xMinSizePerUnit = 300;
            const int yMinSizePerUnit = 50;

            img = new System.Drawing.Bitmap(xMinSizePerUnit * network.getWeights().Length, yMinSizePerUnit * getMaxUnitsPerLayer());
            picNetwork.Image  = img;
            picNetwork.Width  = img.Width;
            picNetwork.Height = img.Height;
            g = System.Drawing.Graphics.FromImage(img);

            redraw();
            updateCallback = new NNFeedForwardNetwork.NNUpdateCallback(redraw);
            network.addUpdateCallback(updateCallback);
        }
예제 #5
0
파일: SnakeGame.cs 프로젝트: credl/SnakeAI
 public void setNetowrk(NNFeedForwardNetwork network)
 {
     this.network = network;
 }
예제 #6
0
        private void simulateStep()
        {
            System.Threading.Thread[] threads = new System.Threading.Thread[networks.Length];
            for (int n = 0; n < networks.Length; n++)
            {
                snakes[n].setNetowrk(networks[n]);
                threads[n] = new System.Threading.Thread(new System.Threading.ThreadStart(snakes[n].simulateToGameOver));
                threads[n].Start();

                /*
                 * if (snakes[n].isGameOver()) continue;
                 * allGameOver = false;
                 *
                 * float[] res = networks[n].propagate(snakes[n].getGameCharacteristics());
                 * //                float m = max(res);
                 * if (res[0] >= res[1] && res[0] >= res[2] && res[0] >= res[3])
                 * {
                 *  threads[n] = new System.Threading.Thread(new System.Threading.ThreadStart(snakes[n].moveUp));
                 *  threads[n].Start();
                 *  //                    snakes[n].moveUp();
                 * }
                 * else if (res[1] >= res[0] && res[1] >= res[2] && res[1] >= res[3])
                 * {
                 *  threads[n] = new System.Threading.Thread(new System.Threading.ThreadStart(snakes[n].moveLeft));
                 *  threads[n].Start();
                 *  //                    snakes[n].moveLeft();
                 * }
                 * else if (res[2] >= res[0] && res[2] >= res[1] && res[2] >= res[3])
                 * {
                 *  threads[n] = new System.Threading.Thread(new System.Threading.ThreadStart(snakes[n].moveDown));
                 *  threads[n].Start();
                 *  //                    snakes[n].moveDown();
                 * }
                 * else if (res[3] >= res[0] && res[3] >= res[1] && res[3] >= res[2])
                 * {
                 *  threads[n] = new System.Threading.Thread(new System.Threading.ThreadStart(snakes[n].moveRight));
                 *  threads[n].Start();
                 *  //                    snakes[n].moveRight();
                 * }
                 */
            }
            for (int n = 0; n < networks.Length; n++)
            {
                if (threads[n] != null)
                {
                    threads[n].Join();
                }
            }

            Refresh();

            if (true)
            {
                GameScorePair[] gsp = new GameScorePair[networks.Length];
                for (int n = 0; n < networks.Length; n++)
                {
                    gsp[n] = new GameScorePair(n, snakes[n].getScrore());
                }
                Array.Sort(gsp);
                NNFeedForwardNetwork[] networkscopy = new NNFeedForwardNetwork[networks.Length];
                for (int i = 0; i < networks.Length; i++)
                {
                    networkscopy[i] = new NNFeedForwardNetwork(NETWORKTOPOLOGY, networks[i].getWeights());
                }
                for (int i = 0; i < networks.Length; i++)
                {
                    if (i < FITTESTN)
                    {
                        if (i == 0)
                        {
                            lblHighscore.Text = "Generation: " + generation + ", Best Score: " + gsp[i].score;
                        }
                        networks[i].setWeights(networkscopy[gsp[i].gameid].getWeights());
                    }
                    else if (i < MODNETWORKCNT)
                    {
                        networks[i].setWeights(networks[i % FITTESTN].getWeights());
                        networks[i].randomizeWeightsInc(MUTATIONMARG, MUTATIONPROP);
                    }
                    else
                    {
                        networks[i].randomizeWeights();
                    }
                    snakes[i].restart();
                }
                generation++;
            }
        }