コード例 #1
0
 public MappedAnswer[] Map(object data)
 {
     ReduceResult SomeData = (ReduceResult)data;
     double[] pigDataArray = (double[])SomeData.values;
     PigData pigData = new PigData() { distanceToPig = pigDataArray[0], generations = (int)pigDataArray[1], maximumforce = pigDataArray[2], wallheight = pigDataArray[2] };
     Family generation = new Family(pigData.wallheight);
     generation.AddRandomCannons(500, pigData.maximumforce);
     generation.fireAllCannons();
     Cannon[] answer = generation.getFittest(100).ToArray();
     List<double[]> cannonConversion = new List<double[]>();
     Console.WriteLine("Best is " + answer[0].distanceFired + " for " + pigData.distanceToPig);
     for (int i = 0; i < 100; i++)
     {
         cannonConversion.Add(new double[] { answer[i].Angle, answer[i].Force, answer[i].minimumForce, answer[i].maximumForce, answer[i].minimumAngle, answer[i].maximumAngle, answer[i].legthToPig, answer[i].distanceFired, answer[i].fitness, answer[i].wallHeight});
     }
     MappedAnswer[] ma = new MappedAnswer[1];
     ma[0] = new MappedAnswer("", cannonConversion);
     return ma;
 }
コード例 #2
0
        public MappedAnswer[] Reduce(MappedAnswer[] mappedData)
        {
            Console.WriteLine("In the reduce");
            MappedAnswer[] ma = null;
            if(null != mappedData[0] && null != mappedData[1])
            {
                List<double[]> data1 = (List<double[]>)mappedData[0].Value;
                List<Cannon> family1 = new List<Cannon>();
                foreach (var item in data1)
                {
                    family1.Add(new Cannon() { Angle = item[0], Force = item[1], minimumForce = item[2], maximumForce = item[3], minimumAngle = item[4], maximumAngle = item[5], legthToPig = item[6], wallHeight = item[9]});
                }
                List<double[]> data2 = (List<double[]>)mappedData[1].Value;
                List<Cannon> family2 = new List<Cannon>();
                foreach (var item in data2)
                {
                    family2.Add(new Cannon() { Angle = item[0], Force = item[1], minimumForce = item[2], maximumForce = item[3], minimumAngle = item[4], maximumAngle = item[5], legthToPig = item[6], wallHeight = item[9] });
                }

                List<Cannon> combinedFamily = new List<Cannon>();

                for (int i = 0; i < family1.Count(); i++)
                {
                    combinedFamily.Add(family1[i]);
                    combinedFamily.Add(family2[i]);
                }

                Family newGeneration = new Family(combinedFamily, family1[0].wallHeight);
                newGeneration.AddRandomCannons(10, 2000);
                newGeneration.fireAllCannons();
                Cannon[] answer = newGeneration.getFittest(100).ToArray();
                List<double[]> cannonConversion = new List<double[]>();

                for (int i = 0; i < answer.Length; i++)
                {
                    cannonConversion.Add(new double[] { answer[i].Angle, answer[i].Force, answer[i].minimumForce, answer[i].maximumForce, answer[i].minimumAngle, answer[i].maximumAngle, answer[i].legthToPig, answer[i].distanceFired, answer[i].fitness, answer[i].wallHeight });
                }
                Console.WriteLine("Best is " + answer[0].distanceFired + " for " + answer[0].legthToPig);
                ma = new MappedAnswer[1];
                ma[0] = new MappedAnswer("", cannonConversion);
            }
            return ma;
        }
コード例 #3
0
        static List<Cannon> runGenerations(int generationCount)
        {
            int fittestCount = 100;
            List<Cannon> fittestParents = new List<Cannon>();

            Family firstGen = new Family();
            firstGen.AddRandomCannons(1000, 1000);
            firstGen.fireAllCannons();
            fittestParents = firstGen.getFittest(fittestCount);

            for (int i = 0; i < generationCount - 1; i++)
            {
                Family Gen = new Family(fittestParents);
                Gen.AddRandomCannons(10, 1000);
                Gen.fireAllCannons();
                fittestParents = Gen.getFittest(fittestCount);
            }
            return fittestParents;
        }