/* @author John Gansallo */ public void ExportCSV() { // get all the data needed for the filename GeneticManager chrom1Manager = GetComponent <GeneticManager>(); int numGens = chrom1Manager.numGens; int numAgents = chrom1Manager.numAgents; GolferSettings.Fitness fitnessFunc = chrom1Manager.fitnessFunc; GolferSettings.MoveableJointsExtent moveableJoints = chrom1Manager.moveableJoints; GolferSettings.ClubGrip clubGrip = chrom1Manager.clubGrip; float holeDist = chrom1Manager.holeDist; float holeDistRand = chrom1Manager.holeDistRand; float timePerGen = chrom1Manager.timePerGen; float crossoverProb = chrom1Manager.crossoverProb; float mutationProb = chrom1Manager.mutationProb; int numElites = chrom1Manager.numElites; // get the actual data for the csv float[,] results1 = chrom1Manager.GetResults(); float[,] results2 = GetComponent <GeneticManager2>().GetResults(); float[,] results3 = GetComponent <GeneticManager3>().GetResults(); string filename = "numGens-" + numGens; filename += "_fitness-" + (fitnessFunc == GolferSettings.Fitness.accuracy ? "accuracy" : "distance"); filename += "_jointsExtent-" + (moveableJoints == GolferSettings.MoveableJointsExtent.armsTorso ? "upperBody" : "fullBody"); filename += "_grip-" + (clubGrip == GolferSettings.ClubGrip.oneHand ? "1hand" : "2hand"); filename += "_numAgents-" + numAgents; if (fitnessFunc == GolferSettings.Fitness.accuracy) { filename += "_holeDist-" + holeDist; filename += "_holeRandOffset-" + holeDistRand; } filename += "_genTime-" + timePerGen; filename += "_pc-" + crossoverProb; filename += "_mc-" + mutationProb; filename += "_elitism-" + numElites; string path = Application.dataPath + @"/" + filename + ".csv"; if (!File.Exists(path)) { // Create a file to write to. using (StreamWriter gen = File.CreateText(path)) { gen.WriteLine("Generation #,Chrom1 Best Fitness,Chrom1 Average Fitness,Chrom2 Best Fitness,Chrom2 Average Fitness,Chrom3 Best Fitness,Chrom3 Average Fitness"); for (int i = 0; i < results1.GetLength(0); i++) { float avgFit1 = 0; float avgFit2 = 0; float avgFit3 = 0; float bestFit1 = Single.MinValue; float bestFit2 = Single.MinValue; float bestFit3 = Single.MinValue; for (int j = 0; j < numAgents; j++) { avgFit1 += results1[i, j]; avgFit2 += results2[i, j]; avgFit3 += results3[i, j]; if (results1[i, j] > bestFit1) { bestFit1 = results1[i, j]; } if (results2[i, j] > bestFit2) { bestFit2 = results2[i, j]; } if (results3[i, j] > bestFit3) { bestFit3 = results3[i, j]; } } avgFit1 = avgFit1 / numAgents; avgFit2 = avgFit2 / numAgents; avgFit3 = avgFit3 / numAgents; gen.WriteLine((i + 1).ToString() + "," + bestFit1 + "," + avgFit1 + "," + bestFit2 + "," + avgFit2 + "," + bestFit3 + "," + avgFit3); } } } }