/// <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));
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 10
0
 /// <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;
 }
Ejemplo n.º 14
0
 /// <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;
 }