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); }
public FrmPlay(NNFeedForwardNetwork network) { InitializeComponent(); initWindow(); this.network = network; gameloopThread = new System.Threading.Thread(gameloop); gameloopThread.Start(); }
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 }); }
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); }
public void setNetowrk(NNFeedForwardNetwork network) { this.network = network; }
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++; } }