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); }
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); })); }
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); }
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"); } } } }
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); } }
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); }