当前位置: 首页 > 知识库问答 >
问题:

如何将随机生成的数字拟合到自定义的“钟形曲线”分布?

琴镜
2023-03-14

我设计了一个偏离中心的钟形曲线。试运行似乎给出了理想的结果,但我是否遗漏了什么?

我发现了一个问题,认为会有帮助,但他们使用的是标准差。

随机正态分布(高斯钟形曲线)?

    null
const ranks = [
  ['X'   , 0.01, 0.01],
  ['SSS' , 0.03, 0.04],
  ['SS'  , 0.06, 0.10],
  ['S'   , 0.08, 0.18],
  ['A'   , 0.11, 0.29],
  ['B'   , 0.14, 0.43],
  ['C'   , 0.21, 0.64],
  ['D'   , 0.17, 0.81],
  ['E'   , 0.12, 0.93],
  ['F'   , 0.07, 1.00]
];

log('Total:', ranks.reduce((a, b) => a + b[1], 0).toFixed(2));
for (let i = 0; i < 10; i++) {
  generate();
}

/* Public */
function generate() {
  let percent = Math.random();
  log(percent.toFixed(4), getRank(percent));
}

/* Protected */
function getRank(percent) {
  return ranks.filter((rank, index) => {
    let min = index > 0 ? ranks[index - 1][2] : -1;
    return percent > min && percent <= rank[2];
  })[0][0];
}

/* Private */
function log() {
  let el = document.createElement('DIV');
  el.innerHTML = [].slice.call(arguments).join(' ');
  el.className = 'log-line';
  document.body.appendChild(el);
}
body {
  background: #666;
}

.log-line {
  font-family: monospace;
  background: #AAA;
  margin: 0.5em 0.25em;
  padding: 0.25em;
}

.log-line::before {
  content: '>>> ';
}

共有1个答案

孟泽宇
2023-03-14

您可能缺少以下内容:

  • 将每个等级(“X”、“SS”等)分配给数字线上的一个点。
  • 对于每个等级,计算正态分布在该点的PDF(概率密度函数)(使用自定义均值和标准差)。这是该等级的概率。
  • 给出了这里的实现:将每个等级的概率除以所有概率的和。
  • 给定此处的实现:计算累积概率。

如果您使用加权随机选择的实现,那么最后两个步骤并不是绝对必要的-

  • 允许概率相加为1以外的值,以及
  • “即时”计算累积概率。
 类似资料:
  • 例如,随机函数产生120个数字(0或1),这些相加值的平均值必须接近60。

  • 本文向大家介绍JavaScript生成随机数的4种自定义函数分享,包括了JavaScript生成随机数的4种自定义函数分享的使用技巧和注意事项,需要的朋友参考一下 第一种方法 第二种方法 第三种方法 第四种方法

  • 问题内容: 最重要的答案是建议使用switch语句来完成这项工作。但是,如果我要考虑的情况很多,那么代码看起来就很笨拙。我有一个巨大的switch语句,在每种情况下都一遍又一遍地重复非常相似的代码。 当您要考虑的概率很大时,是否有更好,更干净的方法来选择具有一定概率的随机数?(例如〜30) 问题答案: 这是一个Swift实现,受各种答案的影响很大,这些答案会生成具有给定(数字)分布的随机数 对于

  • 本文向大家介绍C#自定义函数NetxtString生成随机字符串,包括了C#自定义函数NetxtString生成随机字符串的使用技巧和注意事项,需要的朋友参考一下 本文实例展示了C#自定义函数NetxtString实现生成随机字符串的方法,在进行C#项目开发中非常实用!分享给大家供大家参考。 一、生成随机字符串 关键代码如下: 测试代码如下: 测试结果如下图所示: 二、根据指定字符生成随机字符串

  • 问题内容: 我有一个具有不同值的概率的文件,例如: 我想使用此分布生成随机数。是否存在处理此问题的现有模块?自己编写代码是很简单的(构建累积密度函数,生成随机值[0,1]并选择相应的值),但似乎这应该是一个常见问题,并且可能有人为它创建了一个函数/模块它。 我需要这个,因为我想生成一个生日列表(不遵循标准模块中的任何分布)。 问题答案: 可能就是你想要的。你可以通过values参数提供概率。然后,