Example #1
0
        HsRangeCa CalculateHsRangeCa(string bucketCounts, int [] samplesCount, bool isVerbose)
        {
            ClusterTree rt         = new ClusterTree();
            Props       parameters = GetParams(bucketCounts);

            parameters.Set("IsCreatingClusterTree", "true");
            HsRangeCa ca = new HsRangeCa(parameters);

            CaMcGen gen = new CaMcGen
            {
                Clusterizer = ca,
                IsVerbose   = isVerbose,
                // IsVerboseSamples = true,
                RngSeed      = 0,
                SamplesCount = samplesCount
            };

            rt.Root = gen.Generate();
            string fileName = Path.Combine(_outDir, bucketCounts.Replace(' ', 'x')) + ".dat";

            rt.Write(fileName);

            parameters.Set("ClusterTreeFile", fileName);
            parameters.Set("IsCreatingClusterTree", "false");
            HsRangeCa ca1 = new HsRangeCa(parameters);

            return(ca1);
        }
Example #2
0
        HsSdKMeansAdaptiveCa CalculateCa(Props parameters, int[] samplesCount, int rngSeed)
        {
            ClusterTree rt = new ClusterTree();

            parameters.Set("IsCreatingClusterTree", "true");
            HsSdKMeansAdaptiveCa ca = new HsSdKMeansAdaptiveCa(parameters);

            CaMcGen gen = new CaMcGen
            {
                Clusterizer = ca,
                IsVerbose   = false,
                // IsVerboseSamples = true,
                RngSeed      = rngSeed,
                SamplesCount = samplesCount
            };

            rt.Root = gen.Generate();
            string fileName = Path.Combine(_outDir, "ca-hssd-km.dat");

            rt.Write(fileName);

            parameters.Set("ClusterTreeFile", fileName);
            parameters.Set("IsCreatingClusterTree", "false");
            HsSdKMeansAdaptiveCa ca1 = new HsSdKMeansAdaptiveCa(parameters);

            return(ca1);
        }
        public void Test_ReadWrite()
        {
            ClusterTree rt1  = new ClusterTree();
            RangeNode   root = new RangeNode(5);

            rt1.Root = root;
            for (int i = 0; i < 5; ++i)
            {
                root.Children[i] = new RangeNode(0)
                {
                    UpperLimit = 0.1f * i
                };
            }
            rt1.Version.UserDescription = "Bla bla";

            string fileName = Path.Combine(_outDir, "ClusterTree.dat");

            rt1.Write(fileName);
            ClusterTree rt2 = ClusterTree.Read(fileName);

            Assert.AreEqual(rt1.Version, rt2.Version);
            Assert.IsTrue(CompareTrees <int, int> .Compare(rt1, rt1.Root, rt2, rt2.Root,
                                                           (t1, n1, t2, n2) =>
            {
                return(((RangeNode)n1).UpperLimit == ((RangeNode)n2).UpperLimit);
            }));
        }
Example #4
0
        static int Main(string[] args)
        {
            if (!Parser.ParseArgumentsWithUsage(args, _cmdLine))
            {
                return(1);
            }
            if (_cmdLine.DebuggerLaunch)
            {
                Debugger.Launch();
            }
            Props caProps = XmlSerializerExt.Deserialize <Props>(_cmdLine.ChanceAbstractionFile);

            caProps.Set("IsCreatingClusterTree", "true");

            IChanceAbstraction ca = ChanceAbstractionHelper.CreateFromProps(caProps);

            Console.WriteLine("CA: {0}", ca.Name);

            List <int> samplesCount = new List <int>();

            foreach (string sc in  _cmdLine.SamplesCount.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
            {
                samplesCount.Add(int.Parse(sc));
            }

            int rngSeed = _cmdLine.RngSeed == 0 ? (int)DateTime.Now.Ticks : _cmdLine.RngSeed;

            Console.WriteLine("RNG seed: {0}", rngSeed);

            CaMcGen gen = new CaMcGen
            {
                Clusterizer = (IClusterizer)ca,
                IsVerbose   = true,
                // IsVerboseSamples = true,
                RngSeed      = rngSeed,
                SamplesCount = samplesCount.ToArray()
            };

            ClusterTree rt = new ClusterTree();

            rt.Root = gen.Generate();
            string dir      = Path.GetDirectoryName(_cmdLine.ChanceAbstractionFile);
            string file     = Path.GetFileNameWithoutExtension(_cmdLine.ChanceAbstractionFile) + ".dat";
            string fileName = Path.Combine(dir, file);

            Console.WriteLine("Writing range tree to {0}", fileName);
            rt.Write(fileName);

            return(0);
        }
Example #5
0
        public void TestBigClusterTree()
        {
            DbMongo          sqlDB  = new DbMongo("SingleFile");
            List <Rectangle> rects  = new List <Rectangle>();
            List <string>    coords = sqlDB.GetRectanglesFromLines();

            foreach (string coord in coords)
            {
                rects.Add(new Rectangle(coord));
            }

            Stopwatch   timer = Stopwatch.StartNew();
            ClusterTree ct    = new ClusterTree(rects.ToArray());

            timer.Stop();

            Assert.IsTrue(timer.ElapsedMilliseconds < 3 * rects.Count);

            for (int i = 0; i < ct.Clusters.Count; i++)
            {
                for (int j = 0; j < ct.Clusters.Count; j++)
                {
                    Rectangle rec1 = ct.Clusters[i].BoundBox;
                    Rectangle rec2 = ct.Clusters[j].BoundBox;

                    if (rec1.Equals(rec2))
                    {
                        continue;
                    }

                    Rectangle notRound1 = new Rectangle(9571.0563, 11257.8221, 12095.1892, 13879.5525);
                    Rectangle notRound2 = new Rectangle(6559.4258, 4018.8264, 16465.4917, 13169.6058);

                    if (Math.Round(rec1.MinPoint.X, 0) == 3704)
                    {
                        //throw new System.ExecutionEngineException();

                        if (Math.Round(rec2.MinPoint.X, 0) == 9571)
                        {
                            Debug.WriteLine("Here we should intersect");
                        }
                    }

                    if (rec1.Intersects(rec2))
                    {
                        Assert.Fail("There's an interesection between clusters");
                    }
                }
            }
        }
Example #6
0
        private static void Visualize(string rtFile)
        {
            ClusterTree rt       = ClusterTree.Read(rtFile);
            string      fileName = rtFile + ".gv";

            using (TextWriter output = new StreamWriter(fileName))
            {
                var vis = new ClusterTree.Vis
                {
                    Output       = output,
                    ShowDealPath = _cmdLine.ShowPath
                };
                vis.Walk(rt, rt.Root);
            }
        }
Example #7
0
        public void TestClustersSmall()
        {
            //     at level1:
            //     ((0, 0) (150, 350))
            //     rectangles[0..1]

            //     ((550, 250) (650, 350))
            //     rectangles[2..3]

            //     ((750, 50) (900, 250))
            //     rectangles[4..6]

            Rectangle[] rectangles1 = new Rectangle[7];
            for (int i = 0; i < rectangles.Length; i++)
            {
                rectangles1[rectangles.Length - i - 1] = rectangles[i];
            }

            ct = new ClusterTree(rectangles1);

            // Getting clusters at level 1
            List <ClusterTree.Cluster> clusters = ct.Clusters;

            // Check number of clusters in
            int rectCount = clusters.Count;

            Assert.AreEqual(4, rectCount);

            int       grade = 0;
            Rectangle rect1 = new Rectangle(0, 0, 350, 150);
            Rectangle rect2 = new Rectangle(550, 250, 650, 350);
            Rectangle rect3 = new Rectangle(750, 50, 900, 250);
            Rectangle rect4 = new Rectangle(575, 275, 625, 325);


            foreach (ClusterTree.Cluster cluster in clusters)
            {
                // Gain grage++ if current cluster equals one of rectangles

                if (rect1.Equals(cluster.BoundBox))
                {
                    // Check contents match
                    List <Rectangle> expectedContents = new List <Rectangle>();
                    expectedContents.Add(rectangles[0]);
                    expectedContents.Add(rectangles[1]);

                    foreach (var rect in expectedContents)
                    {
                        Assert.IsTrue(cluster.Contains(rect));
                    }

                    // Increase grade
                    grade++;
                }
                if (rect2.Equals(cluster.BoundBox))
                {
                    // Check contents match
                    List <Rectangle> expectedContents = new List <Rectangle>();
                    expectedContents.Add(rectangles[2]);

                    foreach (var rect in expectedContents)
                    {
                        Assert.IsTrue(cluster.Contains(rect));
                    }

                    // Increase grade
                    grade++;
                }

                if (rect3.Equals(cluster.BoundBox))
                {
                    // Check contents match
                    List <Rectangle> expectedContents = new List <Rectangle>();
                    expectedContents.Add(rectangles[4]);
                    expectedContents.Add(rectangles[5]);
                    expectedContents.Add(rectangles[6]);

                    foreach (var rect in expectedContents)
                    {
                        Assert.IsTrue(cluster.Contains(rect));
                    }

                    // Increase grade
                    grade++;
                }

                if (rect4.Equals(cluster.BoundBox))
                {
                    // Check contents match
                    List <Rectangle> expectedContents = new List <Rectangle>();
                    expectedContents.Add(rectangles[3]);

                    foreach (var rect in expectedContents)
                    {
                        Assert.IsTrue(cluster.Contains(rect));
                    }

                    // Increase grade
                    grade++;
                }
            }
            // Check whether we have enough grade to pass
            // If each rectangle in list was met, grade will have
            Assert.AreEqual(4, grade);
        }