Exemplo n.º 1
0
        public NeuralNet Clone()
        {
            NeuralNet result = new NeuralNet();

            result.layers = new List <List <NNConnection> >();
            foreach (List <NNConnection> layer in layers)
            {
                List <NNConnection> copy = new List <NNConnection>();
                foreach (NNConnection con in layer)
                {
                    copy.Add(new NNConnection(con.n1, con.n2, con.w));
                }
                result.layers.Add(copy);
            }
            return(result);
        }
Exemplo n.º 2
0
 public Player()
 {
     baseCar = new List <LineSegment>();
     baseCar.Add(new LineSegment(new Point(-10, 5), new Point(10, 5)));
     baseCar.Add(new LineSegment(new Point(10, 5), new Point(10, -5)));
     baseCar.Add(new LineSegment(new Point(10, -5), new Point(-10, -5)));
     baseCar.Add(new LineSegment(new Point(-10, -5), new Point(-10, 5)));
     baseRays = new List <LineSegment>();
     baseRays.Add(new LineSegment(new Point(4, 3), new Point(20, 23)));
     baseRays.Add(new LineSegment(new Point(4, 3), new Point(20, 13)));
     baseRays.Add(new LineSegment(new Point(4, 3), new Point(20, 8)));
     baseRays.Add(new LineSegment(new Point(4, 3), new Point(20, 3)));
     baseRays.Add(new LineSegment(new Point(4, 3), new Point(20, -2)));
     baseRays.Add(new LineSegment(new Point(4, 3), new Point(20, -7)));
     baseRays.Add(new LineSegment(new Point(4, 3), new Point(20, -17)));
     baseRayDis = new List <float>();
     baseRayDis.AddRange(new float[7]);
     net     = new NeuralNet();
     running = new Stopwatch();
 }
Exemplo n.º 3
0
        public void Load(string filename)
        {
            borders = new List <LineSegment>();
            string[] lines = File.ReadAllLines(filename);
            start = new Point();
            foreach (string line in lines)
            {
                string[] parts = line.Split(';');
                switch (parts[0])
                {
                case "bbminx": BBoxMin.X = Convert.ToInt32(parts[1]); break;

                case "bbminy": BBoxMin.Y = Convert.ToInt32(parts[1]); break;

                case "bbmaxx": BBoxMax.X = Convert.ToInt32(parts[1]); break;

                case "bbmaxy": BBoxMax.Y = Convert.ToInt32(parts[1]); break;

                case "bbsize": BBoxSize = Convert.ToInt32(parts[1]); break;

                case "posx": start.X = Convert.ToInt32(parts[1]); break;

                case "posy": start.Y = Convert.ToInt32(parts[1]); break;

                case "seg_b":
                    LineSegment seg = new LineSegment();
                    seg.start = new Point(Convert.ToInt32(parts[1]), Convert.ToInt32(parts[2]));
                    seg.end   = new Point(Convert.ToInt32(parts[3]), Convert.ToInt32(parts[4]));
                    borders.Add(seg);
                    break;
                }
            }
            bestNet = players[0].net.Clone();
            foreach (Player p in players)
            {
                p.pos = start;
            }
        }
Exemplo n.º 4
0
 public void Update()
 {
     foreach (Player p in players)
     {
         if (!p.running.IsRunning)
         {
             p.running.Start();
         }
         p.rot += p.steer * 20f;
         if (!p.crashed)
         {
             p.pos.X += Helper.Cos(p.rot) * p.speed;
             p.pos.Y -= Helper.Sin(p.rot) * p.speed;
             long time = p.running.ElapsedMilliseconds;
             if (time > bestTime + 10000)// 10 sec better?
             {
                 test++;
                 generation++;
                 bestTime = time;
                 if (!dontEvolve)
                 {
                     bestNet = p.net.Clone();
                 }
                 p.pos = start;
                 p.rot = 0;
                 p.running.Restart();
                 p.baseRayDis = new List <float>(new float[7]);
             }
         }
         else
         {
             test++;
             p.running.Stop();
             long time = p.running.ElapsedMilliseconds;
             if (time > bestTime)//better?
             {
                 generation++;
                 bestTime = time;
                 if (!dontEvolve)
                 {
                     bestNet = p.net.Clone();
                 }
                 else
                 {
                     p.net = bestNet;
                 }
             }
             else
             {
                 p.net = bestNet.Clone();
                 if (!dontEvolve)
                 {
                     p.net.Randomize();
                 }
             }
             p.pos = start;
             p.rot = 0;
             p.running.Restart();
             p.baseRayDis = new List <float>(new float[7]);
         }
     }
 }