示例#1
0
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.R))
        {
            Reset();
        }
        if (Input.GetKeyDown(KeyCode.Mouse1))
        {
            RaycastHit hit;
            if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit))
            {
                SpawnObjects(hit.point);
            }
        }

        if (Input.GetKeyDown(KeyCode.H))
        {
            mStopwatch.Restart();
            mClusters = HAC.Clusterize(mObjectInstances, m_ClusterThresholdHAC);
            mStopwatch.Stop();
            UnityEngine.Debug.LogFormat("Cluster Count: {2}. Instance Count: {0}. Clusterize Time: {1}", mObjectInstances.Count, mStopwatch.Elapsed, mClusters.Count);

            UnityEngine.Random.InitState(Time.frameCount);
            Colorize();
        }

        if (Input.GetKeyDown(KeyCode.K))
        {
            mStopwatch.Restart();
            mClusters = KMeans.Clusterize(mObjectInstances, m_DesiredClusterCount, m_RandomCentroidChoices, m_ProgressionThreshold);
            mStopwatch.Stop();
            UnityEngine.Debug.LogFormat("Cluster Count: {2}. Instance Count: {0}. Clusterize Time: {1}", mObjectInstances.Count, mStopwatch.Elapsed, mClusters.Count);

            UnityEngine.Random.InitState(Time.frameCount);
            Colorize();

            if (OnClustersUpdate != null)
            {
                OnClustersUpdate(mClusters, mFloorInstances);
            }

            StopAllCoroutines();
            //  StartCoroutine(Clusterize());
        }
        if (Input.GetKeyDown(KeyCode.M))
        {
            for (int i = 0; i < mObjectInstances.Count; i++)
            {
                Vector2 force = UnityEngine.Random.insideUnitCircle * 100;
                mObjectInstances[i].GetComponent <Rigidbody>().AddForce(new Vector3(force.x, 0, force.y));
            }
        }
    }
        public void HACClusterDataTest4D()
        {
            HAC            hac         = new HAC();
            List <Cluster> testOutput1 = hac.ClusterData(_testInput2, "average", "euclidean", 0);
            List <Cluster> testOutput2 = hac.ClusterData(_testInput2, "minimum", "euclidean2", 0);
            List <Cluster> testOutput3 = hac.ClusterData(_testInput2, "minimum", "manhattan", 0);
            List <Cluster> testOutput4 = hac.ClusterData(_testInput2, "maximum", "euclidean", 0);
            List <Cluster> testOutput5 = hac.ClusterData(_testInput2, "maximum", "manhattan", 0);

            bool allEqual = true;

            if (testOutput1.Count != testOutput2.Count || testOutput1.Count != testOutput3.Count ||
                testOutput1.Count != testOutput4.Count || testOutput1.Count != testOutput5.Count)
            {
                allEqual = false;
            }
            else
            {
                foreach (Cluster c in testOutput1)
                {
                    if (!testOutput2.Contains(c) || !testOutput3.Contains(c) ||
                        !testOutput4.Contains(c) || !testOutput5.Contains(c))
                    {
                        allEqual = false;
                    }
                }
            }

            Assert.IsTrue(allEqual, "Outputs are not equal");
            Assert.IsTrue(testOutput1.Count.Equals(_testInput2.Count * 2 - 1), "HAC output incomplete");
            Assert.IsTrue(testOutput1.Contains(new Cluster(_p7)), "HAC output 1 incomplete");
            Assert.IsTrue(testOutput1.Contains(new Cluster(_p8)), "HAC output 1 incomplete");
            Assert.IsTrue(testOutput1.Contains(new Cluster(_p9)), "HAC output 1 incomplete");
            Assert.IsTrue(testOutput1.Contains(new Cluster(_p10)), "HAC output 1 incomplete");
            Assert.IsTrue(testOutput1.Contains(new Cluster(new List <Point> {
                _p7, _p8
            })), "HAC output 1 incomplete");
            Assert.IsTrue(testOutput1.Contains(new Cluster(new List <Point> {
                _p7, _p8, _p9
            })), "HAC output 1 incomplete");
            Assert.IsTrue(testOutput1.Contains(new Cluster(new List <Point> {
                _p7, _p8, _p9, _p10
            })), "HAC output 1 incomplete");
            Assert.IsFalse(testOutput1.Contains(new Cluster(new List <Point> {
                _p7, _p9
            })), "HAC output 1 has incorrect data");
            Assert.IsFalse(testOutput1.Contains(new Cluster(new List <Point> {
                _p9, _p10
            })), "HAC output 1 has incorrect data");
        }
示例#3
0
        static void RunBenchmark(int[] pointCounts, int[] pointDims, int averageOf, string linkageMethod = "average", string distanceMethod = "euclideansquared", bool createFiles = false, string resultFilename = "benchmark_results.txt")
        {
            string startupMessage = $"Clustering benchmark with parameters: averageOf={averageOf}," +
                                    $" linkageMethod=\"{linkageMethod}\", distanceMethod=\"{distanceMethod}\"";

            Console.WriteLine(startupMessage);
            DataIO dio = new DataIO();
            HAC    hac = new HAC();

            using (StreamWriter file = new StreamWriter(resultFilename))
            {
                file.WriteLine(startupMessage);
                foreach (int count in pointCounts)
                {
                    foreach (int dim in pointDims)
                    {
                        long result = 0;
                        for (int i = 0; i < averageOf; ++i)
                        {
                            string inputFilename  = createFiles ? $"testGenerated-{count}-{dim}-{i}.txt" : "";
                            string outputFilename = createFiles ? $"testOutput-{count}-{dim}-{i}.txt" : "";

                            Console.WriteLine($"Now clustering: {count}-{dim}-{i}...");
                            Stopwatch    watch = new Stopwatch();
                            List <Point> input = dio.GenerateData(-1000000, 1000000, count, dim, inputFilename);
                            watch.Start();
                            List <Cluster> output = hac.ClusterData(input, "average", "euclidean2", 0);
                            watch.Stop();

                            result += watch.ElapsedMilliseconds;
                            if (createFiles)
                            {
                                dio.SaveData(output, outputFilename);
                            }
                        }
                        result /= averageOf;
                        file.WriteLine($"{count} points, {dim} dimensions = {result} milliseconds");
                    }
                }
            }
            Console.WriteLine("Benchmark finished successfully");
        }
        public void HACClusterDataTest2D()
        {
            HAC            hac         = new HAC();
            List <Cluster> testOutput  = hac.ClusterData(_testInput, "average", "euclidean2", 0);
            List <Cluster> testOutput2 = hac.ClusterData(_testInput, "average", "manhattan", 0);
            List <Cluster> testOutput3 = hac.ClusterData(_testInput, "minimum", "euclidean", 0);
            List <Cluster> testOutput4 = hac.ClusterData(_testInput, "maximum", "euclidean2", 0);

            bool equal124 = true;

            if (testOutput.Count != testOutput2.Count || testOutput.Count != testOutput4.Count)
            {
                equal124 = false;
            }
            else
            {
                foreach (Cluster c in testOutput)
                {
                    if (!testOutput2.Contains(c) || !testOutput4.Contains(c))
                    {
                        equal124 = false;
                    }
                }
            }

            Assert.IsTrue(equal124, "Outputs 1, 2 and 4 are not equal");

            Assert.IsTrue(testOutput.Count.Equals(_testInput.Count * 2 - 1), "HAC output incomplete");
            Assert.IsTrue(testOutput.Contains(new Cluster(_p1)), "HAC output 1 incomplete");
            Assert.IsTrue(testOutput.Contains(new Cluster(_p2)), "HAC output 1 incomplete");
            Assert.IsTrue(testOutput.Contains(new Cluster(_p3)), "HAC output 1 incomplete");
            Assert.IsTrue(testOutput.Contains(new Cluster(_p4)), "HAC output 1 incomplete");
            Assert.IsTrue(testOutput.Contains(new Cluster(_p5)), "HAC output 1 incomplete");
            Assert.IsTrue(testOutput.Contains(new Cluster(_p6)), "HAC output 1 incomplete");
            Assert.IsTrue(testOutput.Contains(new Cluster(new List <Point> {
                _p1, _p2
            })), "HAC output 1 incomplete");
            Assert.IsTrue(testOutput.Contains(new Cluster(new List <Point> {
                _p3, _p4
            })), "HAC output 1 incomplete");
            Assert.IsTrue(testOutput.Contains(new Cluster(new List <Point> {
                _p5, _p6
            })), "HAC output 1 incomplete");
            Assert.IsTrue(testOutput.Contains(new Cluster(new List <Point> {
                _p3, _p4, _p5, _p6
            })), "HAC output 1 incomplete");
            Assert.IsTrue(testOutput.Contains(new Cluster(new List <Point> {
                _p1, _p2, _p3, _p4, _p5, _p6
            })), "HAC output 1 incomplete");
            Assert.IsFalse(testOutput.Contains(new Cluster(new List <Point> {
                _p1, _p2, _p3
            })), "HAC output 1 has incorrect data");
            Assert.IsFalse(testOutput.Contains(new Cluster(new List <Point> {
                _p1, _p6
            })), "HAC output 1 has incorrect data");

            Assert.IsTrue(testOutput3.Count.Equals(_testInput.Count * 2 - 1), "HAC output 3 incomplete");
            Assert.IsTrue(testOutput3.Contains(new Cluster(_p1)), "HAC output 3 incomplete");
            Assert.IsTrue(testOutput3.Contains(new Cluster(_p2)), "HAC output 3 incomplete");
            Assert.IsTrue(testOutput3.Contains(new Cluster(_p3)), "HAC output 3 incomplete");
            Assert.IsTrue(testOutput3.Contains(new Cluster(_p4)), "HAC output 3 incomplete");
            Assert.IsTrue(testOutput3.Contains(new Cluster(_p5)), "HAC output 3 incomplete");
            Assert.IsTrue(testOutput3.Contains(new Cluster(_p6)), "HAC output 3 incomplete");
            Assert.IsTrue(testOutput3.Contains(new Cluster(new List <Point> {
                _p1, _p2
            })), "HAC output 3 incomplete");
            Assert.IsTrue(testOutput3.Contains(new Cluster(new List <Point> {
                _p3, _p4
            })), "HAC output 3 incomplete");
            Assert.IsTrue(testOutput3.Contains(new Cluster(new List <Point> {
                _p5, _p6
            })), "HAC output 3 incomplete");
            Assert.IsTrue(testOutput3.Contains(new Cluster(new List <Point> {
                _p1, _p2, _p3, _p4
            })), "HAC output 3 incomplete");
            Assert.IsTrue(testOutput3.Contains(new Cluster(new List <Point> {
                _p1, _p2, _p3, _p4, _p5, _p6
            })), "HAC output 3 incomplete");
            Assert.IsFalse(testOutput3.Contains(new Cluster(new List <Point> {
                _p1, _p2, _p3
            })), "HAC output 3 has incorrect data");
            Assert.IsFalse(testOutput3.Contains(new Cluster(new List <Point> {
                _p1, _p6
            })), "HAC output 3 has incorrect data");
        }
示例#5
0
        private void InsertServices(string hotelId, string hotelCode, IList <OTA_HotelDescriptiveInfoRS.HotelDescriptiveContentsLocalType.HotelDescriptiveContentLocalType.HotelInfoLocalType.ServicesLocalType> Services)
        {
            if (Check(Services))
            {
                using (var context = new TravelDBContext())
                {
                    //using (TransactionScope tran = new TransactionScope())
                    {
                        EfRepository <HACHATMapping> hachatContext = new EfRepository <HACHATMapping>(context);
                        EfRepository <HAT>           hatContext    = new EfRepository <HAT>(context);
                        EfRepository <HAC>           hacContext    = new EfRepository <HAC>(context);

                        var hachatlist = (from h in hachatContext.Table where h.HotelID == hotelId select h).ToList();

                        if (hachatlist.Count > 0)
                        {
                            hachatContext.Delete(hachatlist);
                            LoggerHelper(hotelCode, "Service Deleted");
                        }


                        foreach (var item in Services[0].Service)
                        {
                            if (string.IsNullOrEmpty(item.Code)) //may be empty
                            {
                                item.Code = "-1";
                            }

                            if (string.IsNullOrEmpty(item.ID)) //may be empty
                            {
                                item.ID = "-1";
                            }

                            int HACID = Convert.ToInt32(item.Code);

                            string descriptiveText = item.DescriptiveText;


                            var hacList = (from h in hacContext.Table where h.Id == HACID select h).ToList();

                            if (hacList.Count == 0)
                            {
                                HAC hac = new HAC();
                                hac.Id   = HACID;
                                hac.Name = descriptiveText;

                                hac.LastModiyTime = DateTime.Now;

                                hacContext.Insert(hac);
                            }

                            int HATID = Convert.ToInt32(item.ID);

                            var hatList = (from h in hatContext.Table where h.Id == HATID select h).ToList();

                            if (hatList.Count == 0)
                            {
                                HAT hac = new HAT();
                                hac.Id   = HATID;
                                hac.Name = "NO";

                                hac.LastModiyTime = DateTime.Now;

                                hatContext.Insert(hac);
                            }



                            HACHATMapping hachatmapping = new HACHATMapping();
                            hachatmapping.HACID           = Convert.ToInt32(HACID);
                            hachatmapping.HATID           = Convert.ToInt32(HATID);
                            hachatmapping.HotelID         = hotelId;
                            hachatmapping.LastModifyTine  = DateTime.Now;
                            hachatmapping.DescriptionText = descriptiveText; //use this value to  display

                            LoggerHelper(hotelCode, "Service,HacID/HATID" + HACID + "/" + HATID + "Inserted");
                            hachatContext.Insert(hachatmapping);
                        }

                        //tran.Complete();
                    }
                }
            }
        }