jerry58321/probability-random

这是一个控制范围和概率区间的随机数生成器。

v1.0.0 2023-05-24 16:30 UTC

This package is not auto-updated.

Last update: 2024-09-26 14:45:07 UTC


README

ProbabilityRandom 是一个用于根据区间和概率随机生成数字的 PHP Composer 包。

安装

可以使用 Composer 来安装 ProbabilityRandom。请在您的项目目录中运行以下命令:

composer require jerry58321/probability-random

用法

初始化

首先,您需要将 ProbabilityRandom 类引入到您的代码中:

use Jerry58321\ProbabilityRandom\ProbabilityRandom;

然后,您可以通过以下方式初始化一个 ProbabilityRandom 实例:

$min = 1; // 最小值
$max = 100; // 最大值
$probabilityRandom = ProbabilityRandom::build($min, $max);
// 注意:build method 第三個參數為是否使用安全區間,
// 若設定不啟用(false)時,遇到 min > max 情況時則會拋出例外,預設為(true)。
// 若採用預設啟用(true),遇到 min > max 情況時則不採用區間機率(等於使用 random_int)

设置区间比例和区间概率

您可以使用:

setRangeProportions 方法设置区间比例,区间比例是一个数值数组,每个数值表示该区间在整个范围内的比例。

setRangeProbabilities 方法设置区间概率,区间概率是一个数值数组,每个数值表示该区间的概率,所有数值的总和必须为 1。

注意:区间概率的数组数量必须为区间比例的数组数量+1

/**
 * e.g. 假設 min=1, max=1000
 * 區間1比例=0.04, 範圍=1(min) ~ 40       ,機率=0.01 (1%)
 * 區間2比例=0.08, 範圍=41 ~ 119          ,機率=0.36 (36%)
 * 區間3比例=0.2,  範圍=120 ~ 318         ,機率=0.34 (34%)
 * 區間4比例=0.08, 範圍=319 ~ 397         ,機率=0.2  (20%)
 * 區間5比例=0.17, 範圍=398 ~ 566         ,機率=0.06 (6%)
 * 區間6          範圍=567 ~ 1000(max)   ,機率=0.03 (3%)
 */
$min = 1; // 最小隨機值
$max = 1000; // 最大隨機值
$proportions = [0.04, 0.08, 0.2, 0.08, 0.17]; // 區間比例
$probabilities = [0.01, 0.36, 0.34, 0.2, 0.06, 0.03]; // 區間機率

$probabilityRandom = ProbabilityRandom::build($min, $max)
    ->setRangeProportions($proportions)
    ->setProbabilities($probabilities);

生成随机数

使用 random 方法可以生成一个随机数,该数会根据设置的区间比例和概率进行随机生成。

$randomNumber = $probabilityRandom->random();

其他方法

ProbabilityRandom 类还提供了一些其他方法:

  • getActualRangeValue:获取实际区间数值
  • getExpectValue:获取期望值
  • checkRangeSettingLegal:检查区间设置是否合法
  • checkProbabilitiesSettingLegal:检查概率设置是否合法
  • isSafeRange:是否为安全区间

详细的方法使用方式可以参考代码中的注释。

单元测试

本包提供了一些单元测试示例,您可以在 ProbabilityRandomTest.php 文件中找到这些测试案例。