From a72022704e10d82806e297265dc6fee7a5bb2b92 Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Sat, 15 Nov 2025 19:34:52 +0800 Subject: [PATCH] =?UTF-8?q?improve:=E7=82=B9=E5=90=8D=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ink Canvas/Windows/NewStyleRollCallWindow.cs | 59 ++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/Ink Canvas/Windows/NewStyleRollCallWindow.cs b/Ink Canvas/Windows/NewStyleRollCallWindow.cs index 6dca3418..ee70c659 100644 --- a/Ink Canvas/Windows/NewStyleRollCallWindow.cs +++ b/Ink Canvas/Windows/NewStyleRollCallWindow.cs @@ -664,6 +664,62 @@ namespace Ink_Canvas return baseProbability; } + /// + /// 根据频率统计更新保存的概率 + /// + private static void UpdateProbabilitiesByFrequency() + { + if (historyData == null || historyData.NameFrequency == null || historyData.NameFrequency.Count == 0) + return; + + if (historyData.NameProbabilities == null) + historyData.NameProbabilities = new Dictionary(); + + // 计算总选中次数 + int totalSelections = historyData.NameFrequency.Values.Sum(); + if (totalSelections == 0) + return; + + // 计算平均频率 + int uniqueNamesCount = historyData.NameFrequency.Keys.Count; + if (uniqueNamesCount == 0) + return; + + double averageFrequency = 1.0 / uniqueNamesCount; + + // 遍历所有在频率统计中的人员 + foreach (var kvp in historyData.NameFrequency) + { + string name = kvp.Key; + int nameCount = kvp.Value; + + // 获取当前保存的概率(如果不存在则使用默认值) + double currentProbability = historyData.NameProbabilities.ContainsKey(name) + ? historyData.NameProbabilities[name] + : DEFAULT_PROBABILITY; + + // 计算该名字的选中频率 + double nameFrequency = (double)nameCount / totalSelections; + + // 如果该名字的频率低于平均频率,则增加概率并保存 + if (nameFrequency < averageFrequency) + { + // 计算频率差异比例 + double frequencyRatio = nameFrequency / averageFrequency; + double boostFactor = FREQUENCY_BOOST_FACTOR * (1.0 - frequencyRatio); + + // 增加概率 + double boostedProbability = currentProbability * (1.0 + boostFactor); + + // 限制最大概率,避免过高 + boostedProbability = Math.Min(boostedProbability, DEFAULT_PROBABILITY * 2.0); + + // 保存更新后的概率 + historyData.NameProbabilities[name] = boostedProbability; + } + } + } + /// /// 基于概率的随机选择 /// @@ -830,6 +886,9 @@ namespace Ink_Canvas } } + // 根据频率统计更新概率 + UpdateProbabilitiesByFrequency(); + historyData.LastUpdate = DateTime.Now; // 保存到文件