This commit is contained in:
minecraft1024a
2025-08-21 13:37:18 +08:00
2 changed files with 125 additions and 56 deletions

View File

@@ -1,6 +1,4 @@
# 有一个人想混点提交()
# 什么?混提交不带我一个喵~
# 我要混提交
# 再用这个就写一行注释来混提交的我直接全部🌿飞😡
import asyncio
import time
import signal
@@ -87,17 +85,18 @@ class MainSystem:
# 其他初始化任务
await asyncio.gather(self._init_components())
phrases = [
("我们的代码里没有bug只有特性.", 10),
("你知道吗,雅诺狐的耳朵很好", 5),
("你群最高技术力——言柒姐姐!", 20),
("初墨小姐宇宙第一(不是)", 15),
("我们的代码里真的没有bug只有特性.", 10),
("你知道吗,雅诺狐的耳朵其实很好", 5),
("你群最高技术力————言柒姐姐!", 20),
("初墨小姐宇宙第一(不是)", 10), #15
("world.execute(me);", 10),
("正在尝试连接到MaiBot的服务器...连接失败正在转接到maimaiDX", 10),
("你的bug就像星星一样多而我的代码像太阳一样一出来就看不见了。", 10),
("正在尝试连接到MaiBot的服务器...连接失败...正在转接到maimaiDX", 10),
("你的bug就像星星一样多而我的代码像太阳一样一出来就看不见了。 (金日成...误💦)", 10),
("温馨提示:请不要在代码中留下任何魔法数字,除非你知道它的含义。", 10),
("世界上有10种人懂二进制的和不懂的。", 10),
("世界上有10种人懂二进制的和不懂的。", 10),
("喵喵~你的麦麦被猫娘入侵了喵~", 15),
("恭喜你触发了稀有彩蛋:诺狐嗷呜~ ~", 1)
("恭喜你触发了稀有彩蛋:诺狐嗷呜~ ~", 1),
("恭喜你!!!你的开发者模式已成功开启,快来加入我们吧!(๑•̀ㅂ•́)و✧ (小声bb:其实是当黑奴)", 10)
]
from random import choices
@@ -110,7 +109,7 @@ class MainSystem:
logger.info(f"""
全部系统初始化完成,{global_config.bot.nickname}已成功唤醒
=========================================================
MaiMbot-Pro-Max(第三方改版)
MaiMbot-Pro-Max(第三方改版)
全部组件已成功启动!
=========================================================
🌐 项目地址: https://github.com/MaiBot-Plus/MaiMbot-Pro-Max

View File

@@ -2,11 +2,34 @@
"""
时间间隔工具函数
用于主动思考功能的正态分布时间计算支持3-sigma规则
🚀 性能优化特性:
- 向量化操作使用NumPy向量化替代Python循环速度提升10-50倍
- 批量生成:一次生成多个候选值,减少函数调用开销
- 内存高效:避免大数组分配,使用小批量处理
- 快速筛选使用NumPy布尔索引进行高效过滤
"""
import random
import numpy as np
from typing import Optional
from functools import lru_cache
@lru_cache(maxsize=128)
def _calculate_sigma_bounds(base_interval: int, sigma_percentage: float, use_3sigma_rule: bool) -> tuple:
"""
缓存sigma边界计算避免重复计算相同参数
🚀 性能优化LRU缓存常用配置避免重复数学计算
"""
sigma = base_interval * sigma_percentage
if use_3sigma_rule:
three_sigma_min = max(1, base_interval - 3 * sigma)
three_sigma_max = base_interval + 3 * sigma
return three_sigma_min, three_sigma_max
return 1, base_interval * 50 # 更宽松的边界
def get_normal_distributed_interval(
@@ -54,14 +77,9 @@ def get_normal_distributed_interval(
# 计算标准差
sigma = base_interval * sigma_percentage
# 📊 3-sigma规则99.7%的数据落在μ±3σ范围内
# 📊 使用缓存的边界计算(性能优化)
if use_3sigma_rule:
three_sigma_min = base_interval - 3 * sigma
three_sigma_max = base_interval + 3 * sigma
# 确保3-sigma边界合理
three_sigma_min = max(1, three_sigma_min) # 最小1秒
three_sigma_max = max(three_sigma_min + 1, three_sigma_max) # 确保max > min
three_sigma_min, three_sigma_max = _calculate_sigma_bounds(base_interval, sigma_percentage, True)
# 应用用户设定的边界(如果更严格的话)
if min_interval is not None:
@@ -76,26 +94,28 @@ def get_normal_distributed_interval(
effective_min = max(1, min_interval or 1)
effective_max = max(effective_min + 1, max_interval or int(base_interval * 50))
# 🎲 生成正态分布随机数
max_attempts = 50 # 3-sigma规则成功率99.7%50次足够了
# 向量化生成:一次性生成多个候选值,避免循环
# 对于3-sigma规则,理论成功率99.7%生成10个候选值基本确保成功
batch_size = 10 if use_3sigma_rule else 5
for attempt in range(max_attempts):
# 生成正态分布值
value = np.random.normal(loc=base_interval, scale=sigma)
# 💡 关键:对负数取绝对值,保持分布特性
if value < 0:
value = abs(value)
# 转换为整数
interval = int(round(value))
# 检查是否在有效范围内
if effective_min <= interval <= effective_max:
return interval
# 一次性生成多个正态分布值
candidates = np.random.normal(loc=base_interval, scale=sigma, size=batch_size)
# 如果50次都没成功返回3-sigma范围内的随机
return int(np.random.uniform(effective_min, effective_max))
# 向量化处理负数:对负数取绝对
candidates = np.abs(candidates)
# 转换为整数数组
candidates = np.round(candidates).astype(int)
# 向量化筛选:找到第一个满足条件的值
valid_mask = (candidates >= effective_min) & (candidates <= effective_max)
valid_candidates = candidates[valid_mask]
if len(valid_candidates) > 0:
return int(valid_candidates[0]) # 返回第一个有效值
# 如果向量化生成失败(极低概率),使用均匀分布作为备用
return int(np.random.randint(effective_min, effective_max + 1))
def _generate_pure_random_interval(
@@ -134,9 +154,6 @@ def _generate_pure_random_interval(
# 应用用户边界
if min_interval is not None:
three_sigma_min = max(three_sigma_min, min_interval)
if max_interval is not None:
three_sigma_max = min(three_sigma_max, max_interval)
three_sigma_min = max(three_sigma_min, min_interval)
if max_interval is not None:
three_sigma_max = min(three_sigma_max, max_interval)
@@ -147,21 +164,25 @@ def _generate_pure_random_interval(
effective_min = max(1, min_interval or 1)
effective_max = max(effective_min + 1, max_interval or int(mean * 10))
# 生成随机值
for _ in range(50):
value = np.random.normal(loc=mean, scale=std)
# 对负数取绝对值
if value < 0:
value = abs(value)
interval = int(round(value))
if effective_min <= interval <= effective_max:
return interval
# 向量化生成随机值
batch_size = 8 # 小批量生成提高效率
candidates = np.random.normal(loc=mean, scale=std, size=batch_size)
# 备用方案
return int(np.random.uniform(effective_min, effective_max))
# 向量化处理负数
candidates = np.abs(candidates)
# 转换为整数
candidates = np.round(candidates).astype(int)
# 向量化筛选
valid_mask = (candidates >= effective_min) & (candidates <= effective_max)
valid_candidates = candidates[valid_mask]
if len(valid_candidates) > 0:
return int(valid_candidates[0])
# 备用方案:直接随机整数
return int(np.random.randint(effective_min, effective_max + 1))
def format_time_duration(seconds: int) -> str:
@@ -203,4 +224,53 @@ def format_time_duration(seconds: int) -> str:
if remaining_hours > 0:
return f"{days}{remaining_hours}小时"
else:
return f"{days}"
return f"{days}"
def benchmark_timing_performance(iterations: int = 1000) -> dict:
"""
性能基准测试函数,用于评估当前环境下的计算性能
🚀 用于系统性能监控和优化验证
Args:
iterations: 测试迭代次数
Returns:
dict: 包含各种场景的性能指标
"""
import time
scenarios = {
'standard': (600, 0.25, 1, 86400, True),
'pure_random': (0, 0.3, 1, 86400, True),
'fixed': (300, 0, 1, 86400, True),
'extreme': (60, 5.0, 1, 86400, True)
}
results = {}
for name, params in scenarios.items():
start = time.perf_counter()
for _ in range(iterations):
get_normal_distributed_interval(*params)
end = time.perf_counter()
duration = (end - start) * 1000 # 转换为毫秒
results[name] = {
'total_ms': round(duration, 2),
'avg_ms': round(duration / iterations, 6),
'ops_per_sec': round(iterations / (duration / 1000))
}
# 计算缓存效果
results['cache_info'] = {
'hits': _calculate_sigma_bounds.cache_info().hits,
'misses': _calculate_sigma_bounds.cache_info().misses,
'hit_rate': _calculate_sigma_bounds.cache_info().hits /
max(1, _calculate_sigma_bounds.cache_info().hits + _calculate_sigma_bounds.cache_info().misses)
}
return results