Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/11/12 13:05:52 (12 years ago)
Author:
epitzer
Message:

#1696: Add VRP depot excentricity metrics

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/FitnessLandscapeAnalysis/VRPProblemAnalyzer/Program.cs

    r7232 r7315  
    11using System;
    22using System.Collections.Generic;
     3using System.Diagnostics;
    34using System.Linq;
    45using System.Text;
     
    67
    78namespace 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   }
    159 
    16   class Program {
     10  public class Program {
    1711
    1812    private static double GetDistance(double[,] vertices, int source, int target) {
     
    187181    }
    188182
     183
    189184    private static void Normalize(TSPLIBParser instance) {
    190185      //normalize demands
     
    195190      //normalize coordinates
    196191      //-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;
    223205      }
    224206    }
     
    231213      var path = args[0];
    232214      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");
    234216       
    235217        string[] instances = Directory.GetFiles(path, "*.vrp", SearchOption.AllDirectories);
     
    253235          sw.Write(GetDemandHeterogenity(parser));
    254236          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(';');
    255243          sw.WriteLine();
    256244        }
    257245      }
     246      Console.WriteLine("Done. Press Enter...");
     247      Console.ReadLine();
    258248    }
    259249  }
Note: See TracChangeset for help on using the changeset viewer.