跳转到内容

动态权重系统 ⚖️

更新: 8/15/2025, 12:55:22 PM  字数: 0 字  时长: 0 分钟

🎯 公平抽取-介绍

公平抽取是一种智能随机抽取方式,它通过动态权重算法确保每个成员被抽取的概率与其历史被抽中次数成反比,从而实现真正的公平性。

适用于课堂提问、任务分配、活动参与等需要公平随机选择的场景。

核心优势

  • 智能平衡:避免频繁抽中同一学生
  • 动态调整:权重随历史记录实时变化
  • 多维度考量:综合总次数、小组、性别等因素

⚙️ 动态权重系统

动态权重系统是SecRandom实现公平抽取的核心引擎,通过5个关键维度计算每个成员的实时权重:

维度作用权重影响
📊 总抽取次数防止频繁抽中同一人次数越多,权重越低
👥 小组平衡确保各小组机会均等小组被抽次数影响权重
⚧️ 性别平衡保持性别比例平衡性别被抽次数影响权重
🎯 基础权重提供基础公平性固定基础分值
🆕 冷启动保护保护新加入成员前10次抽取权重保护

🔍 算法逻辑详解

📈 权重计算公式

系统基于历史记录数据,通过以下5步计算得出最终权重:

1️⃣ 频率惩罚因子

基于个人总抽取次数的权重调整:

python
frequency_factor = 1.0 / math.sqrt(student_history["total_number_of_times"] * 2 + 1)

示例计算

  • 学生A被抽取5次 → 1/√(5*2+1) = 1/√11 ≈ 0.302
  • 权重值:0.302(数值越小表示被抽中概率越低)

2️⃣ 小组平衡因子

确保各小组机会均等:

python
group_factor = 1.0 / (group_history * 0.2 + 1)

触发条件:至少3个小组有被抽中记录

3️⃣ 性别平衡因子

保持性别比例平衡:

python
gender_factor = 1.0 / (gender_history * 0.2 + 1)

触发条件:至少2个性别有被抽中记录

4️⃣ 冷启动保护机制

保护新加入的学生:

python
if current_round < COLD_START_ROUNDS:  # COLD_START_ROUNDS = 10
    frequency_factor = min(0.8, frequency_factor)

保护效果:新学生前10次抽取享有最低0.8的权重保护

5️⃣ 最终权重合成

综合所有因子得出最终权重:

python
student_weights = {
    'base': BASE_WEIGHT * 0.2,           # 基础权重 (20%)
    'frequency': frequency_factor * 3.0,  # 频率惩罚 (60%)
    'group': group_factor * 0.8,        # 小组平衡 (10%)
    'gender': gender_factor * 0.8       # 性别平衡 (10%)
}

权重范围

最终权重值会被规范到合理区间,防止极端值影响公平性

📊 实际应用效果

场景示例

假设班级有30名学生,其中:

  • 小明已被抽中15次(高频)
  • 小红被抽中3次(中频)
  • 小刚是新同学(冷启动)

权重对比

  • 小明:低权重(频率惩罚显著)
  • 小红:中等权重(正常水平)
  • 小刚:受保护权重(冷启动机制)

🎲 抽取概率

系统根据实时权重计算抽取概率,确保长期统计下的公平性。

本文档以 MIT 许可协议授权