非统一概率随机

部署运行你感兴趣的模型镜像

copied from
http://forum.xda-developers.com/showthread.php?t=856735

namespace RandomWeighting
{
   class Program
   {
       static void Main(string[] args)
       {

       char[] Select =  new char[10] {'A','B','C','D','E','F','G','H','I','J'};
       int[] Weight = new int[10]  {10,30,25,60,20,70,10,80,20,30};
       int[] WeightSum = new int[10];

       int i,j,k;
       Random Rnd = new Random();

       WeightSum[0]=Weight[0];

       for (i = 1; i < 10; i++)
           WeightSum[i] = WeightSum[i - 1] + Weight[i];

       for (j = 0; j < 70; j++)
       {
           k = Rnd.Next(WeightSum[9]);

           for (i = 0; k > WeightSum[i]; i++) ;

           Console.Write(Select[i]);
       }
       Console.WriteLine();
       }
   }
} 
 






The most common thought of choose with probability is make the elements to be as many as their probability is.
And then uniformly choose some one from the new range,that will be the answer.


a1   3    -> p1 = 3 / (3 + 6) = ⅓
a2   6    -> p2 = 6 / (3 + 6) = ⅔


if a1 and a2 are of equality probability then make the position 0 denote a1 and position 1 for a2.

0    1
a 1  a 2

use Random will uniformly choose one of them.

Now things got changed.We enlarge the amount of elements by some number ,say 9

0         1             2        3         4         5         6          7           8            9
|<-----------  a 1 --------->|<-------------------------- a 2 ----------------------->|

(ATTENTION:
The length of a 1 is 3 now , and the length of a 2 is 6.
It’s the length,not the numbers contained in their ranges.)

(Suppose rand() returns both the low bound and upper bound)

if Random.rand() * 9  returns number less or equals than 3, we will choose a 1 ,
else choose a 2 .

a1’s length could be calculated through 9 * p 1 = 3;
a2’s length could be calculated through 9 * p 2 = 6;

But the number 3 is the key for choosing. Considering there’s one more element a 3 . when should a 3 be chosen? If random number greater than 9, a 3 will be chosen.(Also the random number is calculated through Random.rand() * N, where N equals to a 1 + a 2 + a 3 .)

So the separators are
N * p 1 , N * p 1 + N * p 2

More generally. there will be more elements like listed below:
S 1 = N * p 1
S 2 = N * p 1 + N * p 2
S 3 = N * p 1 + N * p 2 + N * p 3
S 4 = N * p 1 + N * p 2 + N * p 3 + N * p 4
…....
S n = N * p 1 + N * p 2 + N * p 3 + … + N * p n

R  = Random.rand() * N;

So ,the solution will be described as this:

Start from s1,  if some Si is greater than R.then the i th element is chosen.

We also noticed both S i and R are composed of N,so N could be discard on calculating.

S i = Sigma p i      

Here, we would discover that the S i is the accumulative probability of discrete elements.
Maybe this can also be used in the continuous situation.

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

<think> 我们正在讨论JMeter中的统一随机定时器(Uniform Random Timer)。根据引用[2]和引用[3],统一随机定时器用于在请求之间插入随机的等待时间,以模拟真实用户操作间的随机停顿。它允许设置一个随机延迟的最大值和一个固定延迟偏移量(Constant Delay Offset)。 功能特点: 1. 随机延迟范围:在0到设定的最大随机延迟之间取随机值。 2. 固定偏移量:在随机延迟的基础上增加一个固定的时间偏移。 3. 总延迟时间 = 固定偏移量 + [0, 随机延迟最大值]之间的随机值。 数学表达: 设: $T_{\text{offset}}$ = 固定偏移量(Constant Delay Offset) $R_{\text{max}}$ = 随机延迟最大值(Random Delay Maximum) 则每个请求前的延迟时间 $T$ 为: $$ T = T_{\text{offset}} + \text{random}(0, R_{\text{max}}) $$ 其中,$\text{random}(0, R_{\text{max}})$ 表示在区间$[0, R_{\text{max}}]$上均匀分布的随机整数。 配置步骤: 1. 添加定时器:在JMeter测试计划中,右键点击需要添加定时器的采样器或控制器,选择“添加” -> “定时器” -> “统一随机定时器”。 2. 配置参数: - 随机延迟最大值(Random Delay Maximum(in milliseconds)):设置随机延迟的最大值(毫秒)。 - 固定延迟偏移(Constant Delay Offset (in milliseconds)):设置固定偏移量(毫秒)。 3. 保存并运行。 应用场景: - 模拟用户在操作之间的随机思考时间(例如,浏览网页时,每个页面停留时间在2秒到5秒之间随机变化)。 - 避免所有线程在同一时刻发送请求,使负载测试更接近真实场景。 注意事项: - 统一随机定时器的作用域:作用于其所在作用域内的所有采样器。如果放在线程组级别,则影响线程组内所有采样器;如果放在某个采样器下,则只影响该采样器。 - 多个定时器叠加:如果同一个采样器作用域内有多个定时器(包括不同类型),则总延迟时间为所有定时器延迟之和。 对比固定定时器: - 固定定时器:延迟时间固定,每个请求等待相同时间。 - 统一随机定时器:延迟时间在固定偏移的基础上加上一个随机值,更符合实际用户行为的不确定性。 示例配置: - 假设我们想模拟用户在每个操作之间等待2到5秒(2000到5000毫秒): 固定延迟偏移 = 2000 毫秒 随机延迟最大值 = 3000 毫秒(因为2000+3000=5000,所以实际延迟在2000到5000毫秒之间) 执行效果: - 第一次请求前延迟:2000 + 随机数(0~3000)毫秒,比如2300毫秒。 - 第二次请求前延迟:2000 + 另一个随机数(0~3000)毫秒,比如4500毫秒。 引用说明: - 根据引用[2]和引用[3],统一随机定时器也称为均匀随机定时器,其随机延迟部分是在0到最大值之间均匀分布的随机数。 现在,结合以上内容,组织回答。 </think> ### JMeter统一随机定时器详解 统一随机定时器(Uniform Random Timer)是JMeter中用于模拟真实用户随机等待行为的核心组件。以下为深度解析: --- #### 一、数学原理与计算公式 1. **延时模型** 每个请求前插入的随机延时由两部分组成: $$ \text{总延时} = \text{固定偏移量} + U(0, R_{\text{max}}) $$ - $U(0, R_{\text{max}})$:服从$[0, R_{\text{max}}]$均匀分布的随机变量 - 固定偏移量:恒定延迟基数(单位:毫秒) 2. **均匀分布特性** 随机延时部分满足概率密度函数: $$ f(x) = \begin{cases} \frac{1}{R_{\text{max}}} & 0 \leq x \leq R_{\text{max}} \\ 0 & \text{其他} \end{cases} $$ 延时值在区间内概率均等,符合真实用户操作间隔特征[^3]。 --- #### 二、核心配置参数 | 参数 | 说明 | 示例值 | 必填 | |------|------|--------|------| | **Random Delay Maximum** | 随机延迟上限(ms) | 3000 | ✓ | | **Constant Delay Offset** | 固定延迟基数(ms) | 2000 | ✓ | > 配置示例:Offset=2000ms + Random Max=3000ms → 实际延时范围:2000-5000ms --- #### 三、与固定定时器的对比 ```mermaid graph LR A[定时器类型] --> B[固定定时器] A --> C[统一随机定时器] B -->|延时模式| D[恒定值] C -->|延时模式| E[均匀随机] B -->|计算公式| F[T_恒定] C -->|计算公式| G[T_offset + U(0,R_max)] ``` 应用场景差异: - **固定定时器**:标准化操作(如API轮询) - **统一随机定时器**:真实用户行为模拟(如页面浏览间隔) --- #### 四、配置步骤 1. 右键目标采样器 → 添加 → 定时器 → Uniform Random Timer[^3] 2. 设置参数: ```properties Constant Delay Offset = 2000 // 基础等待2秒 Random Delay Maximum = 3000 // 随机增加0-3秒 ``` 3. 验证效果(通过查看结果树): ``` 请求1 延时:2000 + 843ms = 2843ms 请求2 延时:2000 + 1925ms = 3925ms 请求3 延时:2000 + 3012ms = 5012ms // 接近上限 ``` --- #### 五、典型应用场景 1. **电商浏览行为模拟** - 商品列表页停留:$T_{\text{offset}}=1000, R_{\text{max}}=4000$(1-5秒随机) - 详情页阅读时间:$T_{\text{offset}}=3000, R_{\text{max}}=7000$(3-10秒随机)[^4] 2. **避免并发尖峰** 通过随机延时分散线程启动时间,防止瞬时高压: ```mermaid graph LR A[100并发线程] --> B[统一随机定时器] B --> C[请求均匀分散在2-5秒] C --> D[避免服务雪崩] ``` 3. **API压力测试** 模拟用户操作间隔,如: ```plaintext 登录 → [随机延时2-4秒] → 搜索 → [随机延时1-3秒] → 下单 ``` --- #### 六、特殊注意事项 1. **作用域叠加规则** 当多个定时器共存时,总延时累加计算: $$ T_{\text{总}} = T_{\text{固定}} + [T_{\text{offset}} + U(0,R_{\text{max}})] $$ 2. **高斯随机定时器对比** | 特性 | 统一随机定时器 | 高斯随机定时器 | |---|---|---| | 分布类型 | 均匀分布 | 正态分布 | | 延时集中度 | 全域均匀 | 均值附近集中 | | 适用场景 | 常规随机间隔 | 稳定操作场景 | 3. **性能影响** - ✅ 正确:增强测试真实性 - ❌ 错误:过度延长总测试时间(需平衡$R_{\text{max}}$设置) --- #### 七、最佳实践建议 1. **参数设置原则** $$ R_{\text{max}} \leq 3 \times \text{平均操作时间} $$ > 例如:平均停留3秒 → $T_{\text{offset}}=2000, R_{\text{max}}=4000$ 2. **结合事务控制器** 将定时器与关联请求打包为原子操作: ```java 事务控制器("加入购物车流程") ├─ HTTP请求:查看商品 ├─ 统一随机定时器:T_offset=2000, R_max=3000 └─ HTTP请求:加入购物车 ``` 3. **监控提示** 通过`聚合报告`观察实际吞吐量波动,验证随机效果: ```plaintext QPS波动范围:120-180次/秒 // 体现随机延时影响 ``` --- ### 相关问题延伸 1. 如何验证统一随机定时器的延时是否符合均匀分布特征? 2. 当$R_{\text{max}}$设置过大时会对压力测试结果产生什么影响? 3. 统一随机定时器与常数吞吐量定时器如何协同工作? 4. 在高并发场景下,统一随机定时器能否有效防止数据库连接耗尽?[^4]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值