Exemple #1
0
        //public static Int64 attributes_num;
        static void Main(string[] args)
        {
            MyCustomDatasetItem[]      featureData = { };
            List <MyCustomDatasetItem> testPoints  = new List <MyCustomDatasetItem>();
            //Dictionary<string, List<Tuple<string, double>>> testPoints = new Dictionary<string, List<Tuple<string, double>>>();

            StreamReader  lines = new StreamReader(@"B:\TrendQuery\output.txt");//Source\tTarget\tWeight
            string        line;
            Int64         row     = 22;
            List <Int64>  columns = new List <Int64>();
            List <double> data    = new List <double>();

            //attributes_num = 0;

            //set points
            //List<string> nodes = new List<string>();
            while ((line = lines.ReadLine()) != null)
            {
                string[] tmp  = line.Split('\t');
                int      indx = contains_MDS(testPoints, tmp[0]);
                if (indx == -1)
                {
                    testPoints.Add(new MyCustomDatasetItem(tmp[0]));
                }
                else
                {
                    testPoints[indx].Columns.Add(tmp[1], double.Parse(tmp[2]));
                }
                indx = contains_MDS(testPoints, tmp[1]);
                if (indx == -1)
                {
                    testPoints.Add(new MyCustomDatasetItem(tmp[1]));
                }
                else
                {
                    testPoints[indx].Columns.Add(tmp[0], double.Parse(tmp[2]));
                }
            }


            featureData = testPoints.ToArray();
            HashSet <MyCustomDatasetItem[]> clusters;

            var dbs = new DbscanAlgorithm <MyCustomDatasetItem>(((x, y) => Distances.dist(x, y)));//Math.Sqrt(((x.X - y.X) * (x.X - y.X)) + ((x.Y - y.Y) * (x.Y - y.Y))));

            dbs.ComputeClusterDbscan(allPoints: featureData, epsilon: 200, minPts: 10, clusters: out clusters);

            List <string> cluster_points = new List <string>();
            int           k = 1;

            foreach (var cluster in clusters)
            {
                for (int i = 0; i < cluster.Length; i++)
                {
                    cluster_points.Add(cluster[i].Row.ToString() + "\t" + k.ToString());
                }
                k++;
            }
            File.WriteAllLines(@"B:\TrendQuery\DBSClusters.txt", cluster_points.ToArray <string>());
        }
Exemple #2
0
        static void Main(string[] args)
        {
            MyCustomDatasetItem[] featureData = { };

            List <MyCustomDatasetItem> testPoints = new List <MyCustomDatasetItem>();

            for (int i = 0; i < 1000; i++)
            {
                //points around (1,1) with most 1 distance
                testPoints.Add(new MyCustomDatasetItem(1, 1 + ((float)i / 1000)));
                testPoints.Add(new MyCustomDatasetItem(1, 1 - ((float)i / 1000)));
                testPoints.Add(new MyCustomDatasetItem(1 - ((float)i / 1000), 1));
                testPoints.Add(new MyCustomDatasetItem(1 + ((float)i / 1000), 1));

                //points around (5,5) with most 1 distance
                testPoints.Add(new MyCustomDatasetItem(5, 5 + ((float)i / 1000)));
                testPoints.Add(new MyCustomDatasetItem(5, 5 - ((float)i / 1000)));
                testPoints.Add(new MyCustomDatasetItem(5 - ((float)i / 1000), 5));
                testPoints.Add(new MyCustomDatasetItem(5 + ((float)i / 1000), 5));
            }
            featureData = testPoints.ToArray();
            HashSet <MyCustomDatasetItem[]> clusters;

            var dbs = new DbscanAlgorithm <MyCustomDatasetItem>((x, y) => Math.Sqrt(((x.X - y.X) * (x.X - y.X)) + ((x.Y - y.Y) * (x.Y - y.Y))));

            dbs.ComputeClusterDbscan(allPoints: featureData, epsilon: .01, minPts: 10, clusters: out clusters);
        }
Exemple #3
0
    // Called by LandMap.GetZones (), returns number of subregions
    public int ClusterLocationsDBSCAN(float epsilon, int minPts, MapPoint[,] points, TerrainVerticesDatabase vertDatabase)
    {
        // DBSCAN cluster algorithm to separate locations in the regions

        int regionId = 0;

        for (int isleId = 0; isleId < regions.Count; isleId++)
        {
            MapRegion region = regions[isleId];

            List <TilePoint> tileLocations = new List <TilePoint> ();

            for (int i = 0; i < region.turf.Count; i++)
            {
                TerrainVertData vertData = vertDatabase.GetVertDataFromRegionTile(region.turf[i], isleId);
                if (vertData != null)
                {
                    tileLocations.Add(new TilePoint(region.turf[i].x, vertData.inlandPosition, region.turf[i].y));
                }
                else
                {
                    LoggerTool.Post("Null from VertDB for " + region.turf[i].ToString());
                }
            }

            HashSet <TilePoint[]> clusters;

            var dbscan = new DbscanImplementation.DbscanAlgorithm <TilePoint> ((t1, t2) => TilePoint.Dist(t1, t2));
            dbscan.ComputeClusterDbscan(allPoints: tileLocations.ToArray(), epsilon: epsilon, minPts: minPts, clusters: out clusters);

            int k = clusters.Count;
            Debug.Log("Number of clusters = " + k);

            int clstCount = 0;
            foreach (var tiles in clusters)
            {
                for (int i = 0; i < tiles.Length; i++)
                {
                    points[(int)tiles[i].X, (int)tiles[i].Z].areaValue = regionId + clstCount;
                }
                clstCount++;
            }

            regionId += k;
        }

        return(regionId);
    }