static void Main(string[] args) { Console.WriteLine("Press Enter to Start Client"); Console.ReadLine(); var watch = Stopwatch.StartNew(); PigData pigData = new PigData(); pigData.distanceToPig = 100; pigData.generations = 10; pigData.maximumforce = 1000; pigData.wallheight = 30; //DistributedProcess distributedProcess = new DistributedProcess("localhost", 56000, 55559); //distributedProcess.AddFunctionFile(@"..\..\..\WorkPigShot\bin\Release\WorkPigShot.dll") // .addWork((object)pigData); DistributedProcess distributedProcess = new DistributedProcess("localhost", 56000, 55559); distributedProcess.AddFunctionFile(@"..\..\..\WorkPigShot\bin\Debug\WorkPigShot.dll") .addWork((object)new double[] { 100, 10, 1000, 30 }); //DistributedProcess distributedProcess = new DistributedProcess("localhost", 56000, 55559); //distributedProcess.AddFunctionFile(@"..\..\..\WorkFile\bin\Release\WorkFile.dll") // .addWork((string)@".\TestText.txt"); long IDNumber = distributedProcess.Start(); Console.WriteLine("Task ID number = " + IDNumber); var answer = distributedProcess.GetFinishedWork(IDNumber); List<double[]> answerValue = (List<double[]>)answer.values; List<Cannon> cannons = new List<Cannon>(); foreach (var item in answerValue) { cannons.Add(new Cannon() { Angle = item[0], Force = item[1], minimumForce = item[2], maximumForce = item[3], minimumAngle = item[4], maximumAngle = item[5], legthToPig = item[6], distanceFired = item[7], fitness = item[8], wallHeight = item[9] }); } Cannon bestCannon = cannons.OrderBy(x => x.fitness).FirstOrDefault(); double angle = bestCannon.Angle; double force = bestCannon.Force; //double totalHits = double.Parse(answer.Key.ToString()); //double totalThrows = (double)answer.values; //double result = (double)((totalHits / totalThrows) * 4d); watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; Console.WriteLine("The force for the shot is " + force); Console.WriteLine("The angle for the shot is " + angle * 180 / Math.PI); Console.WriteLine("The distance travelled is " + bestCannon.distanceFired); //Console.WriteLine("The answer to the mapReduce is for pi is : " + result); //Console.WriteLine("Total time elapsed = " + elapsedMs + "ms"); Console.ReadLine(); }
public ReduceResult[] Distribute(object obj) { Console.WriteLine("distributing data................"); double[] pigDataArray = (double[])obj; PigData pigData = new PigData() { distanceToPig = pigDataArray[0], generations = (int)pigDataArray[1], maximumforce = pigDataArray[2], wallheight = pigDataArray[3] }; ReduceResult[] results = new ReduceResult[pigData.generations]; for (int i = 0; i < results.Length; i++) { results[i] = new ReduceResult("", obj); } Console.WriteLine("Broke apart the data."); return results; }
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; }