You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按照JSON中配置的百分比概率随机抽取对应等级

加权随机抽取等级实现方案

你给出的概率配置总和恰好为100%,可以直接使用累积区间法实现加权随机抽样,方案如下:

实现逻辑

  • 提取levels字段的所有等级与对应概率值,转换为键值对列表
  • 计算每个等级对应的累积概率区间,每个区间采用左闭右开规则,区间长度等于对应等级的概率值
  • 生成一个范围在[0, 100)的随机浮点数
  • 判断随机数落在哪个区间,返回对应区间的等级即可

提示:如果后续调整概率后总和不为100%,可以先将所有概率值求和得到总权重,再生成[0, 总权重)范围的随机数进行匹配,不需要强制凑100%的总和。

代码示例

JavaScript 实现

// 你的配置数据
const config = {
  "fire": {
    "price": 25,
    "uniques": [23],
    "levels": {
      "1": 30,
      "2": 50,
      "3": 10,
      "4": 6.5,
      "5": 2.5,
      "6": 0.9,
      "7": 0.1
    }
  }
}

function drawLevel() {
  const levels = config.fire.levels
  // 构建累积概率区间
  let cumulative = 0
  const ranges = Object.entries(levels).map(([level, prob]) => {
    const range = [cumulative, cumulative + prob, level]
    cumulative += prob
    return range
  })
  // 生成0-100的随机浮点数
  const random = Math.random() * 100
  // 匹配对应区间返回等级
  for (const [start, end, level] of ranges) {
    if (random >= start && random < end) {
      return parseInt(level)
    }
  }
  // 浮点精度边界兜底
  return 7
}

// 测试调用
console.log(drawLevel())

Python 实现

import random

# 你的配置数据
config = {
    "fire": {
        "price": 25,
        "uniques": [23],
        "levels": {
            "1": 30,
            "2": 50,
            "3": 10,
            "4": 6.5,
            "5": 2.5,
            "6": 0.9,
            "7": 0.1
        }
    }
}

def draw_level():
    levels = config["fire"]["levels"]
    # 构建累积概率区间
    cumulative = 0
    ranges = []
    for level, prob in levels.items():
        ranges.append((cumulative, cumulative + prob, int(level)))
        cumulative += prob
    # 生成0-100的随机浮点数
    random_num = random.uniform(0, 100)
    # 匹配对应区间返回等级
    for start, end, level in ranges:
        if start <= random_num < end:
            return level
    # 浮点精度边界兜底
    return 7

# 测试调用
print(draw_level())

效果验证

你可以批量调用抽取函数统计结果分布,正常情况下统计10000次的话,等级2出现占比接近50%、等级1占比接近30%,和配置的概率分布一致。

内容的提问来源于stack exchange,提问作者user9342273

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 15:42:00