Index: /branches/FitnessLandscapeAnalysis/VRPProblemAnalyzer/DepotExcentricityCalculator.cs
===================================================================
--- /branches/FitnessLandscapeAnalysis/VRPProblemAnalyzer/DepotExcentricityCalculator.cs	(revision 7315)
+++ /branches/FitnessLandscapeAnalysis/VRPProblemAnalyzer/DepotExcentricityCalculator.cs	(revision 7315)
@@ -0,0 +1,48 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace VRPProblemAnalyzer {
+
+  public class DepotExcentricityCalculator {
+
+    public static double Geographic(double[,] vertices) {
+      var customers = Utils.MatrixToPointList(vertices);
+      var depot = customers[0];
+      customers.RemoveAt(0);
+      var minX = customers.Min(c => c.X);
+      var minY = customers.Min(c => c.Y);
+      var maxX = customers.Max(c => c.X);
+      var maxY = customers.Max(c => c.Y);
+      var rangeX = maxX - minX;
+      var rangeY = maxY - minY;
+      var center = new PointD(minX + rangeX/2, minY + rangeY/2);
+      Console.WriteLine("Geographic {0} -> {1} = {2}", depot, center, depot.DistanceTo(center));
+      return depot.DistanceTo(center);
+    }
+
+    public static double DistanceCentroid(double[,] vertices) {
+      var customers = Utils.MatrixToPointList(vertices);
+      var depot = customers[0];
+      customers.RemoveAt(0);
+      var center = new PointD(
+        customers.Select(c => c.X).Average(),
+        customers.Select(c => c.Y).Average());
+      Console.WriteLine("Distance {0} -> {1} = {2}", depot, center, depot.DistanceTo(center));
+      return depot.DistanceTo(center);
+    }
+
+    public static double DemandDistanceCentroid(double[,] vertices, double[] demands) {
+      var factor = demands.Sum()/demands.Length;
+      var customers = Utils.MatrixToPointList(vertices).Zip(demands, (c, d) => new {c.X, c.Y, D = d/factor}).ToList();
+      var depot = customers[0];
+      customers.RemoveAt(0);
+      var center = new PointD(
+        customers.Select(c => c.X*c.D).Average(),
+        customers.Select(c => c.Y*c.D).Average());
+      Console.WriteLine("Demand {0} -> {1} = {2}", depot, center, new PointD(depot.X, depot.Y).DistanceTo(center));
+      return new PointD(depot.X, depot.Y).DistanceTo(center);
+    }
+  }
+}
Index: /branches/FitnessLandscapeAnalysis/VRPProblemAnalyzer/EnumerableExtensions.cs
===================================================================
--- /branches/FitnessLandscapeAnalysis/VRPProblemAnalyzer/EnumerableExtensions.cs	(revision 7315)
+++ /branches/FitnessLandscapeAnalysis/VRPProblemAnalyzer/EnumerableExtensions.cs	(revision 7315)
@@ -0,0 +1,15 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace VRPProblemAnalyzer {
+  public static class EnumerableExtensions {
+    public static double StandardDeviation(this IEnumerable<double> data) {
+      var dataList = data.ToList();
+      double average = dataList.Average();
+      var individualDeviations = dataList.Select(num => Math.Pow(num - average, 2.0));
+      return Math.Sqrt(individualDeviations.Average());
+    }
+  }
+}
Index: /branches/FitnessLandscapeAnalysis/VRPProblemAnalyzer/PointD.cs
===================================================================
--- /branches/FitnessLandscapeAnalysis/VRPProblemAnalyzer/PointD.cs	(revision 7315)
+++ /branches/FitnessLandscapeAnalysis/VRPProblemAnalyzer/PointD.cs	(revision 7315)
@@ -0,0 +1,17 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace VRPProblemAnalyzer {
+
+  public class PointD : Tuple<double, double> {
+    public double X { get { return Item1; } }
+    public double Y { get { return Item2; }}
+    public PointD(double x, double y) : base(x, y) {}
+    public double DistanceTo(PointD other) {
+      return Math.Sqrt(Square(X - other.X) + Square(Y - other.Y));
+    }
+    private static double Square(double x) { return x*x; }
+  }
+}
Index: /branches/FitnessLandscapeAnalysis/VRPProblemAnalyzer/Problems/analysis.csv
===================================================================
--- /branches/FitnessLandscapeAnalysis/VRPProblemAnalyzer/Problems/analysis.csv	(revision 7314)
+++ /branches/FitnessLandscapeAnalysis/VRPProblemAnalyzer/Problems/analysis.csv	(revision 7315)
@@ -1,75 +1,75 @@
-Instance;Customers;Clustering;DistanceAvg;DistanceStdev;DemandAvg;DemandStdev
-A-n32-k5;31;0,05;0,599350480185808;0,0809347480919622;0,128125;0,0739272235039299;
-A-n33-k5;32;0,0384615384615385;0,521478706887915;0,076475039126814;0,135151515151515;0,0660175005319968;
-A-n33-k6;32;0,0476190476190476;0,510336845633077;0,103588425097063;0,163939393939394;0,114201825436225;
-A-n34-k5;33;0,0416666666666667;0,52428874792884;0,0921966581063749;0,135294117647059;0,0740919656721471;
-A-n36-k5;35;0,0476190476190476;0,545092711041649;0,0949610185623992;0,122777777777778;0,0673139869529816;
-A-n37-k5;36;0,0384615384615385;0,508002007622718;0,0844594213287874;0,11;0,0811738208364568;
-A-n37-k6;36;0,04;0,514424005224592;0,0889408533515107;0,154054054054054;0,111317890538021;
-A-n38-k5;37;0,0344827586206897;0,520449401480875;0,0913184245861189;0,126578947368421;0,0706465001103334;
-A-n39-k5;38;0,0434782608695652;0,518561562411768;0,0995909867344089;0,121794871794872;0,0810783664867704;
-A-n39-k6;38;0,0285714285714286;0,563735357507669;0,0859892792236473;0,134871794871795;0,117448773227633;
-A-n44-k6;43;0,0277777777777778;0,509632438101355;0,104672574470562;0,129545454545455;0,0671143713594578;
-A-n45-k6;44;0,0333333333333333;0,573871000024542;0,0944539022245261;0,131777777777778;0,0697388426405221;
-A-n45-k7;44;0,0294117647058824;0,498541713574786;0,0702938413063176;0,140888888888889;0,071081243727699;
-A-n46-k7;45;0,0344827586206897;0,529753312238666;0,087074450383146;0,131086956521739;0,0733730272935191;
-A-n48-k7;47;0,0263157894736842;0,542949933008481;0,0740567487187761;0,130416666666667;0,0691905079392317;
-A-n53-k7;52;0,0217391304347826;0,535169968171689;0,0859947144145705;0,125283018867925;0,0868658426385281;
-A-n54-k7;53;0,0217391304347826;0,561529337729543;0,0767684856457732;0,123888888888889;0,0779937477709465;
-A-n55-k9;54;0,0232558139534884;0,525352987521764;0,0859203973811276;0,152545454545455;0,0985756411330578;
-A-n60-k9;59;0,0238095238095238;0,55017977621306;0,0793105892689902;0,138166666666667;0,0939413232939701;
-A-n61-k9;60;0,0208333333333333;0,472196011672381;0,0699500665212212;0,145081967213115;0,0979732809146415;
-A-n62-k8;61;0,0212765957446809;0,551048570594322;0,0954845472978844;0,118225806451613;0,0797480749802734;
-A-n63-k10;62;0,0208333333333333;0,50723649037087;0,0885912397934259;0,147936507936508;0,0984830777528734;
-A-n63-k9;62;0,0238095238095238;0,550483778822353;0,0796956684945588;0,138571428571429;0,0750630876009068;
-A-n64-k9;63;0,0212765957446809;0,493282195490743;0,0931299677840453;0,1325;0,0920937022819693;
-A-n65-k9;64;0,02;0,56533485341292;0,0640906315103851;0,134923076923077;0,0741749092332664;
-A-n69-k9;68;0,0232558139534884;0,532279500136771;0,0857574654660292;0,122463768115942;0,0811405257509134;
-A-n80-k10;79;0,0166666666666667;0,517563509151717;0,0969787821015987;0,11775;0,0757623752267575;
-B-n31-k5;30;0,5;0,34097498525293;0,169223618286694;0,132903225806452;0,0636620892093356;
-B-n34-k5;33;0,2;0,466596486099603;0,13317749869596;0,134411764705882;0,153089577323608;
-B-n35-k5;34;0,333333333333333;0,609204497848156;0,0578724533637176;0,124857142857143;0,0799060673030323;
-B-n38-k6;37;0,5;0,462612021364462;0,0664840742509293;0,134736842105263;0,0746125727413305;
-B-n39-k5;38;0,2;0,516794968544786;0,0805812241817071;0,112820512820513;0,06605936405404;
-B-n41-k6;40;0,25;0,494097005485151;0,0905908390905462;0,138292682926829;0,059424165201331;
-B-n43-k6;42;0,125;0,497707846811247;0,090354497873639;0,121162790697674;0,0699903416036342;
-B-n44-k7;43;0,2;0,457269335795868;0,0491876272270567;0,145681818181818;0,109677165255637;
-B-n45-k5;44;0,2;0,550967524882831;0,0924740574130919;0,108;0,0734725950421123;
-B-n45-k6;44;0,2;0,332368769126564;0,108327995784342;0,131555555555556;0,0666318427565665;
-B-n50-k7;49;0,25;0,54046783230147;0,0837106021009494;0,1218;0,101935077377711;
-B-n50-k8;49;0,142857142857143;0,416908549412513;0,118888915578616;0,147;0,108041658632215;
-B-n51-k7;50;0,5;0,628161920729164;0,0771635350438565;0,134117647058823;0,0758009899720193;
-B-n52-k7;51;0,333333333333333;0,538685404748768;0,0569253967382308;0,116538461538462;0,0689449227054749;
-B-n56-k7;55;0,333333333333333;0,490949169692583;0,104087282098285;0,11;0,069462219947249;
-B-n57-k7;56;0,2;0,564700731814086;0,120756937231143;0,122280701754386;0,0951825124705652;
-B-n57-k9;56;0,142857142857143;0,431365095587345;0,0877082646558274;0,140877192982456;0,0738486052500913;
-B-n63-k10;62;0,25;0,544961026137016;0,107291608184146;0,146349206349206;0,0836527514002405;
-B-n64-k9;63;0,2;0,430562293462881;0,105524098105194;0,1371875;0,0912323399006624;
-B-n66-k9;65;0,125;0,50541088801141;0,110487272166032;0,130454545454545;0,0664336492454397;
-B-n67-k10;66;0,166666666666667;0,441507344936519;0,118942645582023;0,135373134328358;0,0743595211302043;
-B-n68-k9;67;0,111111111111111;0,497547849350892;0,0707860079184622;0,123088235294118;0,0798022805390846;
-B-n78-k10;77;0,125;0,509055194527115;0,0744711838037978;0,120128205128205;0,0754217813493333;
-P-n101-k4;100;0,010989010989011;0,440930613153867;0,0813919664548955;0,0360891089108911;0,0222508644886685;
-P-n16-k8;15;0,0666666666666667;0,319074335048018;0,0545463460534562;0,439285714285714;0,25210845576733;
-P-n19-k2;18;0,0588235294117647;0,343352060002631;0,0521548801901616;0,101973684210526;0,0515409197894487;
-P-n20-k2;19;0,0526315789473684;0,33597961979172;0,0542301744540341;0,096875;0,0531984785966666;
-P-n21-k2;20;0,05;0,330645842162139;0,0547835689164983;0,0886904761904762;0,0483592031400919;
-P-n22-k2;21;0,0476190476190476;0,327999832904871;0,0546599248814156;0,0875;0,0475612643191533;
-P-n22-k8;21;0,0625;0,137946463179721;0,0237559311902214;0,340909090909091;0,213657854066318;
-P-n23-k8;22;0,0454545454545455;0,329746507500949;0,0540804755766232;0,340217391304348;0,191637555664386;
-P-n40-k5;39;0,0256410256410256;0,454078045739884;0,077636151678248;0,110357142857143;0,0610693399809944;
-P-n45-k5;44;0,0232558139534884;0,484711630122813;0,0834900980159218;0,102518518518519;0,0558178499506552;
-P-n50-k10;49;0,0217391304347826;0,407702278465007;0,0697421549914813;0,1902;0,0766417640715557;
-P-n50-k7;49;0,0217391304347826;0,407702278465007;0,0697421549914813;0,1268;0,0510945093810371;
-P-n50-k8;49;0,0217391304347826;0,407702278465007;0,0697421549914813;0,1585;0,0638681367262964;
-P-n51-k10;50;0,0204081632653061;0,469945782928346;0,0853137018629859;0,190441176470588;0,102379419608631;
-P-n55-k10;54;0,0196078431372549;0,406057522469346;0,0695043591730005;0,164743083003953;0,0643588962129926;
-P-n55-k15;54;0,0192307692307692;0,406057522469346;0,0695043591730005;0,270649350649351;0,105732472349916;
-P-n55-k7;54;0,0192307692307692;0,406057522469346;0,0695043591730005;0,11144385026738;0,0435369003793774;
-P-n55-k8;54;0,0196078431372549;0,406057522469346;0,0695043591730005;0,118409090909091;0,0462579566530884;
-P-n60-k10;59;0,0181818181818182;0,421736909439941;0,0724881515700115;0,1575;0,0614203036764204;
-P-n60-k15;59;0,0175438596491228;0,423407167699516;0,0743219571059317;0,23625;0,0921304555146306;
-P-n65-k10;64;0,0161290322580645;0,434503245558824;0,0773940490756397;0,144260355029586;0,0560744477052176;
-P-n70-k10;69;0,0149253731343284;0,437501141692672;0,0805024721274586;0,138941798941799;0,0573834831771424;
-P-n76-k4;75;0,0136986301369863;0,437232184407435;0,0822742522303845;0,0512781954887218;0,0232110511886212;
-P-n76-k5;75;0,0136986301369863;0,437232184407435;0,0822742522303845;0,0640977443609023;0,0290138139857766;
+Instance;Customers;Clustering;DistanceAvg;DistanceStdev;DemandAvg;DemandStdev;GeographicExcentricity;DistanceExcentricity;DistanceDemandExcenetricity
+A-n32-k5;31;0,0588235294117647;0,428173910381301;0,0578195041497551;0,128125;0,0739272235039299;0,305692268106861;0,345633911768931;0,31840419574972;
+A-n33-k5;32;0,037037037037037;0,380385586618042;0,0557836825083318;0,135151515151515;0,0660175005319968;0,131578947368421;0,150317790096151;0,16710706254297;
+A-n33-k6;32;0,0625;0,360862644236501;0,0732480778385679;0,163939393939394;0,114201825436225;0,149699606877136;0,156636468039234;0,159250579400224;
+A-n34-k5;33;0,0416666666666667;0,382313382990295;0,0672301597169352;0,135294117647059;0,0740919656721471;0,204655028170714;0,223026498106771;0,228183002070817;
+A-n36-k5;35;0,04;0,389539164611983;0,0678619161331505;0,122777777777778;0,0673139869529816;0,324860244353244;0,340562553839752;0,333569234084721;
+A-n37-k5;36;0,0344827586206897;0,374497267188804;0,0622631840058976;0,11;0,0811738208364568;0,115070785387149;0,120647382831678;0,134214061824765;
+A-n37-k6;36;0,0454545454545455;0,36742697222167;0,0635259399286581;0,154054054054054;0,111317890538021;0,31428997104489;0,312398323071495;0,294268532254346;
+A-n38-k5;37;0,0357142857142857;0,371846772937562;0,0652445009937016;0,126578947368421;0,0706465001103334;0,168125129078844;0,161412120694719;0,143173687543491;
+A-n39-k5;38;0,037037037037037;0,370497963882012;0,0711550189614701;0,121794871794872;0,0810783664867704;0,31215258466191;0,271891411495271;0,306768633965218;
+A-n39-k6;38;0,0277777777777778;0,402773397151716;0,0614369733072219;0,134871794871795;0,117448773227633;0,22869269166771;0,208859633580354;0,21744945791244;
+A-n44-k6;43;0,0263157894736842;0,364079651377545;0,0747777252248873;0,129545454545455;0,0671143713594578;0,291818141334395;0,267186647645877;0,273813730372928;
+A-n45-k6;44;0,0303030303030303;0,418338222313051;0,0688546337860758;0,131777777777778;0,0697388426405221;0,201295094739862;0,20969276348102;0,196015009325877;
+A-n45-k7;44;0,027027027027027;0,371273408626982;0,0523491482390582;0,140888888888889;0,071081243727699;0,361467383149617;0,387419336335602;0,41782399369629;
+A-n46-k7;45;0,0294117647058824;0,37849416110083;0,0622122982333267;0,131086956521739;0,0733730272935191;0,189371447528103;0,214628401316269;0,220306416243464;
+A-n48-k7;47;0,0285714285714286;0,387841167020744;0,0529003764485286;0,130416666666667;0,0691905079392317;0,325012414461898;0,338516746060436;0,325731091993903;
+A-n53-k7;52;0,0212765957446809;0,382323574546349;0,0614343265923386;0,125283018867925;0,0868658426385281;0,21383988157414;0,23973101706549;0,21134809249547;
+A-n54-k7;53;0,0222222222222222;0,401285257889962;0,0548610010026286;0,123888888888889;0,0779937477709465;0,345130387181028;0,330399523183666;0,382213041783764;
+A-n55-k9;54;0,025;0,379140055044658;0,0620075738908596;0,152545454545455;0,0985756411330578;0,13662225031648;0,129958950205833;0,14647202338624;
+A-n60-k9;59;0,0232558139534884;0,401451888418079;0,0578708764119616;0,138166666666667;0,0939413232939701;0,353233142891149;0,32325548937004;0,359163321397479;
+A-n61-k9;60;0,0192307692307692;0,344327158212244;0,0510078590810308;0,145081967213115;0,0979732809146415;0,135816716775055;0,129183466649396;0,139541683727624;
+A-n62-k8;61;0,0212765957446809;0,393626203285813;0,0682067277387073;0,118225806451613;0,0797480749802734;0,332220828491831;0,349697705664986;0,356182602958437;
+A-n63-k10;62;0,0227272727272727;0,358670362006507;0,062643466411655;0,147936507936508;0,0984830777528734;0,252512375934329;0,231550726221568;0,244528100814904;
+A-n63-k9;62;0,024390243902439;0,393222760009284;0,0569283817831231;0,138571428571429;0,0750630876009068;0,428692888522449;0,449844443099279;0,430231950770356;
+A-n64-k9;63;0,0222222222222222;0,352436551985404;0,0665387987491975;0,1325;0,0920937022819693;0,384500600526911;0,394274345285414;0,36569124311714;
+A-n65-k9;64;0,0217391304347826;0,403916192952806;0,0457909922364332;0,134923076923077;0,0741749092332664;0,177389441311733;0,158963025425047;0,167488507216751;
+A-n69-k9;68;0,02;0,376378444033295;0,0606396853684004;0,122463768115942;0,0811405257509134;0,0871837116869136;0,11070850526265;0,117896058655409;
+A-n80-k10;79;0,0151515151515152;0,365972667015885;0,068574354455253;0,11775;0,0757623752267575;0,425029410747068;0,448471348284742;0,415328484862908;
+B-n31-k5;30;0,5;0,24110572428733;0,119659168027445;0,132903225806452;0,0636620892093356;0,444056878767181;0,377960787999406;0,3747140165763;
+B-n34-k5;33;0,2;0,329933539398844;0,0941707124293761;0,134411764705882;0,153089577323608;0,187677137498174;0,393676917263678;0,441263922672459;
+B-n35-k5;34;0,333333333333333;0,430772631557775;0,0409220042173869;0,124857142857143;0,0799060673030323;0,355563884994757;0,415324892082623;0,412669106249901;
+B-n38-k6;37;0,5;0,327116097365227;0,047011339743742;0,134736842105263;0,0746125727413305;0,300302190960525;0,281382692776191;0,264920078283435;
+B-n39-k5;38;0,2;0,391267656914721;0,0610083857156671;0,112820512820513;0,06605936405404;0,212661649206336;0,204414102002462;0,166896173762151;
+B-n41-k6;40;0,25;0,384317277456768;0,0704631362977351;0,138292682926829;0,059424165201331;0,225055548698538;0,248792333081227;0,282015750241072;
+B-n43-k6;42;0,125;0,351932593529989;0,0638902781571556;0,121162790697674;0,0699903416036342;0,269505510063614;0,29980516620699;0,332119004758312;
+B-n44-k7;43;0,2;0,369027348454808;0,0396955978270264;0,145681818181818;0,109677165255637;0,35357427569183;0,32423709704331;0,365184536965768;
+B-n45-k5;44;0,2;0,389592873058217;0,0653890330806314;0,108;0,0734725950421123;0,185172834501918;0,120705673851753;0,122879006370084;
+B-n45-k6;44;0,2;0,235020210504019;0,076599460411456;0,131555555555556;0,0666318427565665;0,11302230488269;0,199596703976906;0,220141715749763;
+B-n50-k7;49;0,25;0,38627780761242;0,0598288111167987;0,1218;0,101935077377711;0,050720328666971;0,0623996952848919;0,0652498888917503;
+B-n50-k8;49;0,142857142857143;0,294798862424236;0,0840671584135541;0,147;0,108041658632215;0,389735069035725;0,365835842872821;0,436525304101055;
+B-n51-k7;50;0,5;0,444177553830758;0,0545628588898368;0,134117647058823;0,0758009899720193;0,0200124560713174;0,0528210908608431;0,0778850038057542;
+B-n52-k7;51;0,333333333333333;0,396615653247748;0,0419122241194752;0,116538461538462;0,0689449227054749;0,224596803392107;0,176068971723191;0,147651518448263;
+B-n56-k7;55;0,333333333333333;0,364686491506898;0,077318036290155;0,11;0,069462219947249;0,255587493512727;0,167388767780965;0,158822261537284;
+B-n57-k7;56;0,2;0,403180451921377;0,0862170593777846;0,122280701754386;0,0951825124705652;0,349548272376596;0,31651006037393;0,33741686735724;
+B-n57-k9;56;0,142857142857143;0,307926147916583;0,0626097668823756;0,140877192982456;0,0738486052500913;0,463179390077204;0,49253277425244;0,517087790312764;
+B-n63-k10;62;0,25;0,385345637063865;0,0758666237114195;0,146349206349206;0,0836527514002405;0,285563177929042;0,389489703517493;0,351607226386633;
+B-n64-k9;63;0,2;0,353558923468069;0,0866517739534191;0,1371875;0,0912323399006624;0,113414102740478;0,0664646236148433;0,048085505752401;
+B-n66-k9;65;0,0909090909090909;0,357379466198381;0,0781262993834046;0,130454545454545;0,0664336492454397;0,312659931374298;0,355822236766361;0,354936625116717;
+B-n67-k10;66;0,166666666666667;0,312192837548281;0,0841051512633166;0,135373134328358;0,0743595211302043;0,233043776071203;0,129298307909419;0,126992011540037;
+B-n68-k9;67;0,111111111111111;0,377742997269066;0,0537414016173838;0,123088235294118;0,0798022805390846;0,368364657337839;0,366072506139314;0,378966639455306;
+B-n78-k10;77;0,111111111111111;0,374954562550375;0,0548532073652659;0,120128205128205;0,0754217813493333;0,294995880385548;0,243516601822421;0,258466438637626;
+P-n101-k4;100;0,0120481927710843;0,324424960104407;0,0598860334987308;0,0360891089108911;0,0222508644886685;0,048015778390378;0,0152181603097755;0,0152196317597153;
+P-n16-k8;15;0,0666666666666667;0,370660814167569;0,0633651498012128;0,439285714285714;0,25210845576733;0,278810438776914;0,34354171809044;0,367739647705826;
+P-n19-k2;18;0,0588235294117647;0,398863650652237;0,0605870426751435;0,101973684210526;0,0515409197894487;0,286209887623126;0,364465398926868;0,380440115429168;
+P-n20-k2;19;0,0526315789473684;0,390299268027833;0,0629978610236907;0,096875;0,0531984785966666;0,286209887623126;0,372924414446929;0,383528657156966;
+P-n21-k2;20;0,05;0,384103149626547;0,06364072577175;0,0886904761904762;0,0483592031400919;0,286209887623126;0,362655862183996;0,388028367556715;
+P-n22-k2;21;0,0476190476190476;0,381029345694788;0,0634970915345939;0,0875;0,0475612643191533;0,286209887623126;0,362170812760644;0,386853894104552;
+P-n22-k8;21;0,0666666666666667;0,314040490274895;0,0540813015857772;0,340909090909091;0,213657854066318;0,0695228917743377;0,0776863716989113;0,0565081857756056;
+P-n23-k8;22;0,0454545454545455;0,383058414650681;0,0628239595164676;0,340217391304348;0,191637555664386;0,286209887623126;0,346671899489548;0,380071066291991;
+P-n40-k5;39;0,0256410256410256;0,375502286573084;0,0642016339469024;0,110357142857143;0,0610693399809944;0,0483125180126753;0,0910185834034147;0,0858805473843325;
+P-n45-k5;44;0,0232558139534884;0,375385059682668;0,0646589301327009;0,102518518518519;0,0558178499506552;0,0529431113655807;0,0528779309113061;0,0493574524874079;
+P-n50-k10;49;0,0217391304347826;0,331969204263542;0,0567871432637426;0,1902;0,0766417640715557;0,049387897009111;0,0350362105158094;0,00718927483766801;
+P-n50-k7;49;0,0238095238095238;0,331969204263542;0,0567871432637426;0,1268;0,0510945093810371;0,049387897009111;0,0350362105158094;0,00718927483766796;
+P-n50-k8;49;0,0217391304347826;0,331969204263542;0,0567871432637426;0,1585;0,0638681367262964;0,049387897009111;0,0350362105158094;0,00718927483766801;
+P-n51-k10;50;0,0204081632653061;0,363949645127098;0,066071220650249;0,190441176470588;0,102379419608631;0,0529431113655807;0,0576712780892924;0,0511384570721842;
+P-n55-k10;54;0,02;0,33062997127926;0,0565935194043531;0,164743083003953;0,0643588962129926;0,0454545454545455;0,0245137603369054;0,00499591818009634;
+P-n55-k15;54;0,0192307692307692;0,33062997127926;0,0565935194043531;0,270649350649351;0,105732472349916;0,0454545454545455;0,0245137603369054;0,00499591818009637;
+P-n55-k7;54;0,0192307692307692;0,33062997127926;0,0565935194043531;0,11144385026738;0,0435369003793774;0,0454545454545455;0,0245137603369054;0,00499591818009651;
+P-n55-k8;54;0,0196078431372549;0,33062997127926;0,0565935194043531;0,118409090909091;0,0462579566530884;0,0454545454545455;0,0245137603369054;0,00499591818009639;
+P-n60-k10;59;0,0175438596491228;0,314780419016174;0,0541044670603242;0,1575;0,0614203036764204;0,0343732463076794;0,0255417024641281;0,00668186960227169;
+P-n60-k15;59;0,0181818181818182;0,344756818798973;0,0605162204456085;0,23625;0,0921304555146306;0,0386289357090363;0,0182900579153255;0,01037112612687;
+P-n65-k10;64;0,0172413793103448;0,324309090903442;0,0577661823095842;0,144260355029586;0,0560744477052176;0,0196418550329597;0,0339628469444459;0,0136163911966154;
+P-n70-k10;69;0,0149253731343284;0,326546692071507;0,0600862797182518;0,138941798941799;0,0573834831771424;0,0196418550329597;0,0260347495033594;0,00141976251436537;
+P-n76-k4;75;0,0136986301369863;0,326345944911253;0,061408719539666;0,0512781954887218;0,0232110511886212;0,0196418550329597;0,0334198978867373;0,00681706245212397;
+P-n76-k5;75;0,0136986301369863;0,326345944911253;0,061408719539666;0,0640977443609023;0,0290138139857766;0,0196418550329597;0,0334198978867373;0,00681706245212406;
Index: /branches/FitnessLandscapeAnalysis/VRPProblemAnalyzer/Program.cs
===================================================================
--- /branches/FitnessLandscapeAnalysis/VRPProblemAnalyzer/Program.cs	(revision 7314)
+++ /branches/FitnessLandscapeAnalysis/VRPProblemAnalyzer/Program.cs	(revision 7315)
@@ -1,4 +1,5 @@
 ﻿using System;
 using System.Collections.Generic;
+using System.Diagnostics;
 using System.Linq;
 using System.Text;
@@ -6,13 +7,6 @@
 
 namespace VRPProblemAnalyzer {
-  public static class Maths {
-    public static double StandardDeviation(this IEnumerable<double> data) {
-      double average = data.Average();
-      var individualDeviations = data.Select(num => Math.Pow(num - average, 2.0));
-      return Math.Sqrt(individualDeviations.Average());
-    }
-  }
   
-  class Program {
+  public class Program {
 
     private static double GetDistance(double[,] vertices, int source, int target) {
@@ -187,4 +181,5 @@
     }
 
+
     private static void Normalize(TSPLIBParser instance) {
       //normalize demands
@@ -195,30 +190,17 @@
       //normalize coordinates
       //-find bounds
-      double maxX = double.MinValue;
-      double maxY = double.MinValue;
-
-      int cities = instance.Vertices.Length / 2;
-      for (int i = 0; i < cities; i++) {
-        if (instance.Vertices[i, 0] > maxX)
-          maxX = instance.Vertices[i, 0];
-
-        if (instance.Vertices[i, 1] > maxY)
-          maxY = instance.Vertices[i, 1];
-      }
-
-      //-normalize
-      double factorX = 1;
-      double factorY = 1;
-      if (maxX > maxY) {
-        factorX = 1 / maxX;
-        factorY = (maxY / maxX) / maxY;
-      } else {
-        factorX = (maxX / maxY) / maxX;
-        factorY = 1 / maxY;
-      }
-
-      for (int i = 0; i < cities; i++) {
-        instance.Vertices[i, 0] *= factorX;
-        instance.Vertices[i, 1] *= factorY;
+      var cities = Utils.MatrixToPointList(instance.Vertices);
+      var minX = cities.Min(c => c.X);
+      var minY = cities.Min(c => c.Y);
+      var maxX = cities.Max(c => c.X);
+      var maxY = cities.Max(c => c.Y);
+      var rangeX = maxX - minX;
+      var rangeY = maxY - minY;
+      var factor = Math.Sqrt(0.5)/Math.Max(rangeX, rangeY);
+
+
+      for (int i = 0; i < instance.Vertices.GetLength(0); i++) {
+        instance.Vertices[i, 0] = (cities[i].X-minX)*factor;
+        instance.Vertices[i, 1] = (cities[i].Y-minY)*factor;
       }
     }
@@ -231,5 +213,5 @@
       var path = args[0];
       using (StreamWriter sw = new StreamWriter(Path.Combine(path, "analysis.csv"))) {
-        sw.WriteLine("Instance;Customers;Clustering;DistanceAvg;DistanceStdev;DemandAvg;DemandStdev");
+        sw.WriteLine("Instance;Customers;Clustering;DistanceAvg;DistanceStdev;DemandAvg;DemandStdev;GeographicExcentricity;DistanceExcentricity;DistanceDemandExcenetricity");
         
         string[] instances = Directory.GetFiles(path, "*.vrp", SearchOption.AllDirectories);
@@ -253,7 +235,15 @@
           sw.Write(GetDemandHeterogenity(parser));
           sw.Write(';');
+          sw.Write(DepotExcentricityCalculator.Geographic(parser.Vertices));
+          sw.Write(';');
+          sw.Write(DepotExcentricityCalculator.DistanceCentroid(parser.Vertices));
+          sw.Write(';');
+          sw.Write(DepotExcentricityCalculator.DemandDistanceCentroid(parser.Vertices, parser.Demands));
+          sw.Write(';');
           sw.WriteLine();
         }
       }
+      Console.WriteLine("Done. Press Enter...");
+      Console.ReadLine();
     }
   }
Index: /branches/FitnessLandscapeAnalysis/VRPProblemAnalyzer/Utils.cs
===================================================================
--- /branches/FitnessLandscapeAnalysis/VRPProblemAnalyzer/Utils.cs	(revision 7315)
+++ /branches/FitnessLandscapeAnalysis/VRPProblemAnalyzer/Utils.cs	(revision 7315)
@@ -0,0 +1,18 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace VRPProblemAnalyzer {
+
+  public static class Utils {
+
+    public static List<PointD> MatrixToPointList(double[,] vertices) {
+      var points = new List<PointD>();
+      for (int i = 0; i < vertices.GetLength(0); i++) {
+        points.Add(new PointD(vertices[i, 0], vertices[i, 1]));
+      }
+      return points;
+    }
+  }
+}
Index: /branches/FitnessLandscapeAnalysis/VRPProblemAnalyzer/VRPProblemAnalyzer.csproj
===================================================================
--- /branches/FitnessLandscapeAnalysis/VRPProblemAnalyzer/VRPProblemAnalyzer.csproj	(revision 7314)
+++ /branches/FitnessLandscapeAnalysis/VRPProblemAnalyzer/VRPProblemAnalyzer.csproj	(revision 7315)
@@ -111,8 +111,12 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="EnumerableExtensions.cs" />
+    <Compile Include="PointD.cs" />
+    <Compile Include="DepotExcentricityCalculator.cs" />
     <Compile Include="KMeansClustering.cs" />
     <Compile Include="Program.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="TSPLIBParser.cs" />
+    <Compile Include="Utils.cs" />
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
