Esempio n. 1
0
 // This function will get triggered/executed when a new message is written
 // on an Azure Queue called queue.
 public static void StartClusterAnalysis([QueueTrigger("clusterqueue")] int clusterCalculationId, TextWriter log)
 {
     Task.Factory.StartNew(() =>
     {
         using (var context = new SvdEntities())
         {
             ClusterOptimizer.OptimizeRange(context, clusterCalculationId);
         }
     });
 }
Esempio n. 2
0
        public JsonResult GetClusters(int jobId, int k = 2)
        {
            var nameList = new Dictionary <string, List <string> >();

            var start = DateTime.Now;

            var cluster = ClusterOptimizer.OptimizeRange(_context, new ClusterCalculationParameters()
            {
                MinimumClusterCount       = 20,
                MaximumClusterCount       = 20,
                IterationsPerCluster      = 1,
                MaximumOptimizationsCount = 200,
                JobId = jobId
            });

            Debug.WriteLine($"Total Optimization Time: {DateTime.Now.Subtract(start).TotalMilliseconds} Milliseconds");

            for (var i = 0; i < cluster.ClusterMap.Count; i++)
            {
                var fileName = LSA.MatrixContainer.DocNameMap[i];

                if (!nameList.ContainsKey(cluster.ClusterMap[i].ToString()))
                {
                    nameList[cluster.ClusterMap[i].ToString()] = new List <string>();
                }

                nameList[cluster.ClusterMap[i].ToString()].Add(fileName);
            }

            return(Json(new {
                GlobalSI = cluster.GlobalSi,
                ClusterSIAverage = cluster.GlobalClusterSiAverage,
                ClusterSiList = cluster.ClusterSiAverages,
                NameList = nameList,
                NumClusters = cluster.Clusters
            }, JsonRequestBehavior.AllowGet));
        }
Esempio n. 3
0
        public IList <Cluster> SearchClusters(double radius, IList <Dot> dots)
        {
            int    i     = 0;
            double range = int.MaxValue;//radius * radius;

            Dot[] copy = new Dot[dots.Count];
            dots.CopyTo(copy, 0);
            var            dotsToCluster = copy.ToList();
            List <Cluster> clusters      = new List <Cluster>(dots.Count);

            Dot middlePoint = default;

            while (dotsToCluster.Count > 0)
            {
                middlePoint = dotsToCluster.OrderBy(d => d.GetDistance(middlePoint)).First();
                var dotsInRange = dotsToCluster
                                  .Where(d => d.GetDistance(middlePoint) <= range)
                                  .OrderBy(d => d.GetDistance(middlePoint))
                                  .ToList();

                List <Dot> dotsInCluster = new List <Dot>(dotsInRange.Count());
                if (dotsInRange.Any())
                {
                    foreach (var inRangeDot in dotsInRange)
                    {
                        if (dotsInCluster.Count > 0)
                        {
                            middlePoint = default;
                            foreach (var dot in dotsInCluster)
                            {
                                middlePoint += dot;
                            }

                            middlePoint /= dotsInCluster.Count;
                        }

                        Dot displaced = (middlePoint + inRangeDot) / 2;
                        dotsInCluster.Add(inRangeDot);
                        if (dotsInCluster.Any(d => d.GetDistance(displaced) >= radius))
                        {
                            dotsInCluster.Remove(inRangeDot);
                            break;
                        }
                        else
                        {
                            middlePoint = displaced;
                        }
                    }
                }

                clusters.Add(new Cluster()
                {
                    Dots      = ColoredDots(dotsInCluster, i),
                    Number    = i,
                    Radius    = radius,
                    RadiusDot = middlePoint
                });

                dotsToCluster = dotsToCluster.Except(dotsInCluster).ToList();
                i            += 1;
            }

            clusters = ClusterOptimizer.RemoveSharedClusters(clusters);

            return(clusters);
        }