/// <summary> /// Overloaded constructor /// </summary> /// <param name="data">Sample pool of cases in a datatable</param> /// <param name="seed">Random seed for replicability</param> /// <param name="indexer">Easting and northing column indexes for datatables</param> public RandomTourWithCentroidBase(DataTable data, int seed, EastingNorthingColumnIndexer indexer) { this.data = data; this.sampler = new DataTableRandomRowSampler(data, seed); this.indexer = indexer; CalculateCentroid(data, indexer); }
public List <double> GenerateDistances(DataTable points, EastingNorthingColumnIndexer indexer) { var centroid = new GroupCentroid(points, indexer); var distances = new List <double>(); foreach (DataRow row in points.Rows) { distances.Add(this.calculator.Calculate(centroid.GetCentreCoordinates(), new Coordinate((int)row[indexer.NorthingIndex], (int)row[indexer.EastingIndex]))); } return(distances); }
public List<double> GenerateDistances(DataTable points, EastingNorthingColumnIndexer indexer) { var centroid = new GroupCentroid(points, indexer); var distances = new List<double>(); foreach (DataRow row in points.Rows) { distances.Add(this.calculator.Calculate(centroid.GetCentreCoordinates(), new Coordinate((int)row[indexer.NorthingIndex], (int)row[indexer.EastingIndex]))); } return distances; }
public DataTable GenerateMatrix(DataTable points, EastingNorthingColumnIndexer indexer) { DataTable matrix = CreateEmptyMatrix(points); for (int fromRow = 0; fromRow < points.Rows.Count; fromRow++) { Coordinate source = new Coordinate(Convert.ToInt32(points.Rows[fromRow][indexer.NorthingIndex]), Convert.ToInt32(points.Rows[fromRow][indexer.EastingIndex])); for (int toRow = 0; toRow < points.Rows.Count; toRow++) { Coordinate dest = new Coordinate(Convert.ToInt32(points.Rows[toRow][indexer.NorthingIndex]), Convert.ToInt32(points.Rows[toRow][indexer.EastingIndex])); matrix.Rows[fromRow][toRow] = this.calculator.Calculate(source, dest); } } return(matrix); }
/// <summary> /// Calculates the distances of each point from the group centroid /// </summary> /// <param name="points">Datatable containing northings and eastings</param> /// <param name="eastingIndex">Zero based column index for eastings</param> /// <param name="northingIndex">Zero based column index for northings</param> /// <returns>A list of distances from centroid</returns> public List <double> GetIndividualDistances(DataTable points, EastingNorthingColumnIndexer indexer) { var centroid = new GroupCentroid(points, indexer); int nullcases = 0; List <double> results = new List <double>(); foreach (DataRow row in points.Rows) { try { results.Add(this.calculator.Calculate(centroid.GetCentreCoordinates(), new Coordinate(Convert.ToInt32(row[indexer.NorthingIndex]), Convert.ToInt32(row[indexer.EastingIndex])))); } catch (InvalidCastException) { nullcases++; } } return(results); }
/// <summary> /// Calculates the average distance of points from the centroid in one single pass /// </summary> /// <param name="points">Datatable containing northings and eastings</param> /// <param name="eastingIndex">Zero based column index for eastings</param> /// <param name="northingIndex">Zero based column index for northings</param> /// <returns></returns> public double AverageDistance(DataTable points, EastingNorthingColumnIndexer indexer) { var centroid = new GroupCentroid(points, indexer); double runningTotal = 0; int nullcases = 0; foreach (DataRow row in points.Rows) { try { runningTotal += this.calculator.Calculate(centroid.GetCentreCoordinates(), new Coordinate(Convert.ToInt32(row[indexer.NorthingIndex]), Convert.ToInt32(row[indexer.EastingIndex]))); } catch (InvalidCastException) { nullcases++; } } return(runningTotal / (points.Rows.Count - nullcases)); }
public DataTable GenerateMatrix(DataTable points, EastingNorthingColumnIndexer indexer) { DataTable matrix = CreateEmptyMatrix(points); for (int fromRow = 0; fromRow < points.Rows.Count; fromRow++) { Coordinate source = new Coordinate(Convert.ToInt32(points.Rows[fromRow][indexer.NorthingIndex]), Convert.ToInt32(points.Rows[fromRow][indexer.EastingIndex])); for (int toRow = 0; toRow < points.Rows.Count; toRow++) { Coordinate dest = new Coordinate(Convert.ToInt32(points.Rows[toRow][indexer.NorthingIndex]), Convert.ToInt32(points.Rows[toRow][indexer.EastingIndex])); matrix.Rows[fromRow][toRow] = this.calculator.Calculate(source, dest); } } return matrix; }
/// <summary> /// Calculates the distances of each point from the group centroid /// </summary> /// <param name="points">Datatable containing northings and eastings</param> /// <param name="eastingIndex">Zero based column index for eastings</param> /// <param name="northingIndex">Zero based column index for northings</param> /// <returns>A list of distances from centroid</returns> public List<double> GetIndividualDistances(DataTable points, EastingNorthingColumnIndexer indexer) { var centroid = new GroupCentroid(points, indexer); int nullcases = 0; List<double> results = new List<double>(); foreach (DataRow row in points.Rows) { try { results.Add(this.calculator.Calculate(centroid.GetCentreCoordinates(), new Coordinate(Convert.ToInt32(row[indexer.NorthingIndex]), Convert.ToInt32(row[indexer.EastingIndex])))); } catch (InvalidCastException) { nullcases++; } } return results; }
/// <summary> /// Calculates the average distance of points from the centroid in one single pass /// </summary> /// <param name="points">Datatable containing northings and eastings</param> /// <param name="eastingIndex">Zero based column index for eastings</param> /// <param name="northingIndex">Zero based column index for northings</param> /// <returns></returns> public double AverageDistance(DataTable points, EastingNorthingColumnIndexer indexer) { var centroid = new GroupCentroid(points, indexer); double runningTotal = 0; int nullcases = 0; foreach (DataRow row in points.Rows) { try { runningTotal += this.calculator.Calculate(centroid.GetCentreCoordinates(), new Coordinate(Convert.ToInt32(row[indexer.NorthingIndex]), Convert.ToInt32(row[indexer.EastingIndex]))); } catch (InvalidCastException) { nullcases++; } } return runningTotal/(points.Rows.Count-nullcases); }
/// <summary> /// Create the group centroid /// </summary> /// <param name="points">DataTable containing at columns containing northings and eastings</param> /// <param name="indexes">Zero based indexes of columns containing eastings and northings</param> public GroupCentroid(DataTable points, EastingNorthingColumnIndexer indexes) { this.points = points; this.indexes = indexes; }
/// <summary> /// Constructor method /// </summary> /// <param name="seed">Random seed for replicability</param> /// <param name="indexer">Easting and northing column indexes for datatables</param> public RandomTourWithCentroidBase(int seed, EastingNorthingColumnIndexer indexer) { this.sampler = new DataTableRandomRowSampler(seed); this.indexer = indexer; }
private void CalculateCentroid(DataTable data, EastingNorthingColumnIndexer indexer) { var gen = new GroupCentroid(data, indexer); centroid = gen.GetCentreCoordinates(); }
/// <summary> /// Overloaded constructor /// </summary> /// <param name="data">Sample pool of cases in a datatable</param> /// <param name="seed">Random seed for replicability</param> /// <param name="indexer">Easting and northing column indexes for datatables</param> public RandomTourWithSpecifiedBase(DataTable data, RandomTourArguments args) { this.data = data; this.sampler = new DataTableRandomRowSampler(data, args.Seed); this.indexer = args.Indexer; }