- Timestamp:
- 01/11/12 13:05:52 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/FitnessLandscapeAnalysis/VRPProblemAnalyzer/Program.cs
r7232 r7315 1 1 using System; 2 2 using System.Collections.Generic; 3 using System.Diagnostics; 3 4 using System.Linq; 4 5 using System.Text; … … 6 7 7 8 namespace VRPProblemAnalyzer { 8 public static class Maths {9 public static double StandardDeviation(this IEnumerable<double> data) {10 double average = data.Average();11 var individualDeviations = data.Select(num => Math.Pow(num - average, 2.0));12 return Math.Sqrt(individualDeviations.Average());13 }14 }15 9 16 class Program {10 public class Program { 17 11 18 12 private static double GetDistance(double[,] vertices, int source, int target) { … … 187 181 } 188 182 183 189 184 private static void Normalize(TSPLIBParser instance) { 190 185 //normalize demands … … 195 190 //normalize coordinates 196 191 //-find bounds 197 double maxX = double.MinValue; 198 double maxY = double.MinValue; 199 200 int cities = instance.Vertices.Length / 2; 201 for (int i = 0; i < cities; i++) { 202 if (instance.Vertices[i, 0] > maxX) 203 maxX = instance.Vertices[i, 0]; 204 205 if (instance.Vertices[i, 1] > maxY) 206 maxY = instance.Vertices[i, 1]; 207 } 208 209 //-normalize 210 double factorX = 1; 211 double factorY = 1; 212 if (maxX > maxY) { 213 factorX = 1 / maxX; 214 factorY = (maxY / maxX) / maxY; 215 } else { 216 factorX = (maxX / maxY) / maxX; 217 factorY = 1 / maxY; 218 } 219 220 for (int i = 0; i < cities; i++) { 221 instance.Vertices[i, 0] *= factorX; 222 instance.Vertices[i, 1] *= factorY; 192 var cities = Utils.MatrixToPointList(instance.Vertices); 193 var minX = cities.Min(c => c.X); 194 var minY = cities.Min(c => c.Y); 195 var maxX = cities.Max(c => c.X); 196 var maxY = cities.Max(c => c.Y); 197 var rangeX = maxX - minX; 198 var rangeY = maxY - minY; 199 var factor = Math.Sqrt(0.5)/Math.Max(rangeX, rangeY); 200 201 202 for (int i = 0; i < instance.Vertices.GetLength(0); i++) { 203 instance.Vertices[i, 0] = (cities[i].X-minX)*factor; 204 instance.Vertices[i, 1] = (cities[i].Y-minY)*factor; 223 205 } 224 206 } … … 231 213 var path = args[0]; 232 214 using (StreamWriter sw = new StreamWriter(Path.Combine(path, "analysis.csv"))) { 233 sw.WriteLine("Instance;Customers;Clustering;DistanceAvg;DistanceStdev;DemandAvg;DemandStdev ");215 sw.WriteLine("Instance;Customers;Clustering;DistanceAvg;DistanceStdev;DemandAvg;DemandStdev;GeographicExcentricity;DistanceExcentricity;DistanceDemandExcenetricity"); 234 216 235 217 string[] instances = Directory.GetFiles(path, "*.vrp", SearchOption.AllDirectories); … … 253 235 sw.Write(GetDemandHeterogenity(parser)); 254 236 sw.Write(';'); 237 sw.Write(DepotExcentricityCalculator.Geographic(parser.Vertices)); 238 sw.Write(';'); 239 sw.Write(DepotExcentricityCalculator.DistanceCentroid(parser.Vertices)); 240 sw.Write(';'); 241 sw.Write(DepotExcentricityCalculator.DemandDistanceCentroid(parser.Vertices, parser.Demands)); 242 sw.Write(';'); 255 243 sw.WriteLine(); 256 244 } 257 245 } 246 Console.WriteLine("Done. Press Enter..."); 247 Console.ReadLine(); 258 248 } 259 249 }
Note: See TracChangeset
for help on using the changeset viewer.