using Azure; using Bogus; using HTEX.Test.Service; using MathNet.Numerics; using System; using System.Configuration; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Text.RegularExpressions; using TEAMModelOS.SDK; using TEAMModelOS.SDK.DI; using TEAMModelOS.SDK.Extension; using TEAMModelOS.SDK.Models; using TEAMModelOS.SDK.Models.Cosmos.Student; using static HTEX.Test.Controllers.LessonRecordController; using static Microsoft.Azure.Amqp.Serialization.SerializableType; using static System.Runtime.InteropServices.JavaScript.JSType; namespace HTEX.Test { public class Program { public static void Main(string[] args) { Test(); var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); builder.Services.AddAzureStorage(builder.Configuration.GetValue("Azure:Storage:ConnectionString")); builder.Services.AddAzureRedis(builder.Configuration.GetValue("Azure:Redis:ConnectionString")); builder.Services.AddAzureCosmos(builder.Configuration.GetValue("Azure:Cosmos:ConnectionString")); builder.Services.AddAzureServiceBus(builder.Configuration.GetValue("Azure:ServiceBus:ConnectionString")); builder.Services.AddAzureSignalR(builder.Configuration.GetValue("Azure:SignalR:ConnectionString")); builder.Services.AddSnowflakeId(Convert.ToInt64(builder.Configuration.GetValue("Option:LocationNum")), 1); builder.Services.AddHttpClient(); var app = builder.Build(); // Configure the HTTP request pipeline. app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run(); } public static string Test2() { // 创建一个包含三万个元素的数组 int[] data = Enumerable.Range(1, 30000).Select(i => new Random().Next(1, 31)).ToArray(); // 设置聚类的数量 int k = 2; // 初始化质心,可以选择数据中的k个随机点作为初始质心 List centroids = new List(); Random rand = new Random(); for (int i = 0; i < k; i++) { centroids.Add(rand.Next(1, 31)); } centroids.Sort(); // 对质心进行排序以避免重复 Dictionary> clustersD= new Dictionary>(); // 迭代次数 int maxIterations = 100; for (int iteration = 0; iteration < maxIterations; iteration++) { // 将数据点分配给最近的质心 Dictionary> clusters = new Dictionary>(); foreach (int point in data) { int nearestCentroid = centroids.OrderBy(c => Math.Abs(point - c)).First(); if (!clusters.ContainsKey(nearestCentroid)) { clusters[nearestCentroid] = new List(); } clusters[nearestCentroid].Add(point); } // 更新质心位置 List newCentroids = new List(); foreach (KeyValuePair> cluster in clusters) { int sum = cluster.Value.Sum(); int count = cluster.Value.Count; int newCentroid = sum / count; // 计算均值 newCentroids.Add(newCentroid); // 输出当前聚类的信息 Console.WriteLine($"Cluster with centroid {cluster.Key}:"); Console.WriteLine($"Min: {cluster.Value.Min()}, Max: {cluster.Value.Max()}, Average: {sum / count}"); } // 检查质心是否改变 newCentroids.Sort(); clustersD=clusters; if (newCentroids.SequenceEqual(centroids)) { break; } centroids = newCentroids; } return ""; } public static string Test() { string jsons = System.IO.File.ReadAllText( $"F:\\lesson-local\\analysis.json"); LessonDataAnalysis lessonDataAnlysis = jsons.ToObject(); var n = 5; //聚类分数量大和数量小的类群。判断当前出题数在两个类群的最大范围内,再取其质心。 var m = n<=lessonDataAnlysis.clustersInteract.First().Value.Max() ? lessonDataAnlysis.clustersInteract.First().Value: lessonDataAnlysis.clustersInteract.Last().Value; var persent = GetPersent(lessonDataAnlysis.interactNormal, n); //Console.WriteLine(persent); return "Hello World!"; } static bool[] MarkAnomalies(List array) { if (array.Count == 0) return new bool[0]; double average = array.Average(); double variance = array.Average(x => Math.Pow(x - average, 2)); double standardDeviation = Math.Sqrt(variance); // 定义异常值的阈值,这里使用2倍标准差 double threshold =3* standardDeviation; bool[] anomalies = new bool[array.Count]; for (int i = 0; i < array.Count; i++) { double deviation = Math.Abs(array[i] - average); anomalies[i] = deviation > threshold; } return anomalies; } /// /// 计算当前元素在集合中超过了多少百分比的值 /// /// /// /// public static double GetPersent(IEnumerable nums, int curr) { int count = 0; foreach (var op in nums.OrderBy(x => x)) { if (op < curr) { count++; } else if (op == curr) { count++; } else { break; } } return count *1.0/ nums.Count() * 100; } public class KeyCount { public int count { get; set;} public int key { get; set;} } class WeightedItem { public int Value { get; set; } public double Weight { get; set; } } } }