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