用于模拟短信群发情况的随机数产生

简介: 短信下发时的一些条件每分钟最高发送量,每分钟最高发送量,每分钟标准发送量,发送总量,最后在产生每分钟发送量的随机数时还加上了一个波幅值来控制随机数偏向标准量的波动,这样可以模拟出网路情况好和不好时的不同状态。
短信下发时的一些条件
每分钟最高发送量,每分钟最高发送量,每分钟标准发送量,发送总量,
最后在产生每分钟发送量的随机数时还加上了一个波幅值来控制随机数偏向标准量的波动,这样可以模拟出网路情况好和不好时的不同状态。

下面是随机数序列产生的类
img_a6339ee3e57d1d52bc7d02b338e15a60.gif public   class  dataclass
img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif {
img_33d02437d135341f0800e3d415312ae8.gif    Random rand 
= new Random();
img_33d02437d135341f0800e3d415312ae8.gif    
//生成随机数;
img_33d02437d135341f0800e3d415312ae8.gif
    private int getrand(int min,int max)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif        
int temprand = rand.Next(min, max);
img_33d02437d135341f0800e3d415312ae8.gif        
return temprand;
img_105a1e124122b2abcee4ea8e9f5108f3.gif    }

img_33d02437d135341f0800e3d415312ae8.gif    
//生成带最大最小偏向和波幅的随机数
img_33d02437d135341f0800e3d415312ae8.gif
    private int getformatrand(int min, int max, int def,int wav)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif        
int[,] temprand = new int[wav, 2];
img_33d02437d135341f0800e3d415312ae8.gif        
img_33d02437d135341f0800e3d415312ae8.gif        
for (int i = 0; i < wav; i++)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif            temprand[i, 
0= getrand(min, max);
img_33d02437d135341f0800e3d415312ae8.gif            temprand[i, 
1= (int)Math.Abs(temprand[i, 0- def);
img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

img_33d02437d135341f0800e3d415312ae8.gif        
img_33d02437d135341f0800e3d415312ae8.gif        
int temp = 0;
img_33d02437d135341f0800e3d415312ae8.gif        
for (int j = 0; j < wav - 1; j++)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif            
for (int i = 0; i < wav - 1; i++)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif                temp 
= 0;
img_33d02437d135341f0800e3d415312ae8.gif                
if (temprand[i, 1> temprand[i + 11])
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif                
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif                    temp 
= temprand[i, 1];
img_33d02437d135341f0800e3d415312ae8.gif                    temprand[i, 
1= temprand[i + 11];
img_33d02437d135341f0800e3d415312ae8.gif                    temprand[i 
+ 11= temp;
img_33d02437d135341f0800e3d415312ae8.gif                    temp 
= temprand[i, 0];
img_33d02437d135341f0800e3d415312ae8.gif                    temprand[i, 
0= temprand[i + 10];
img_33d02437d135341f0800e3d415312ae8.gif                    temprand[i 
+ 10= temp;
img_105a1e124122b2abcee4ea8e9f5108f3.gif                }

img_105a1e124122b2abcee4ea8e9f5108f3.gif            }

img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

img_33d02437d135341f0800e3d415312ae8.gif        
return temprand[00];
img_105a1e124122b2abcee4ea8e9f5108f3.gif    }

img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    
/**//// <summary>
img_33d02437d135341f0800e3d415312ae8.gif    
/// 生成发送数据
img_33d02437d135341f0800e3d415312ae8.gif    
/// </summary>
img_33d02437d135341f0800e3d415312ae8.gif    
/// <param name="min">单位时间内最小发送量</param>
img_33d02437d135341f0800e3d415312ae8.gif    
/// <param name="max">单位时间内最大发送量</param>
img_33d02437d135341f0800e3d415312ae8.gif    
/// <param name="def">单位时间内标准发送量</param>
img_33d02437d135341f0800e3d415312ae8.gif    
/// <param name="wav">波幅,1波动最大,数字或大波动越小</param>
img_33d02437d135341f0800e3d415312ae8.gif    
/// <param name="num">发送总量</param>
img_105a1e124122b2abcee4ea8e9f5108f3.gif    
/// <returns></returns>

img_33d02437d135341f0800e3d415312ae8.gif    public string[] getsendnum(int min, int max, int def, int wav, int num)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif        
string temp = "";
img_33d02437d135341f0800e3d415312ae8.gif        
img_33d02437d135341f0800e3d415312ae8.gif        
for (int i = 0; i < num; )
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif            
int temprand = getformatrand(min, max, def, wav);
img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif            
if ((i + temprand) >= num)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif                temprand 
= num - i;
img_33d02437d135341f0800e3d415312ae8.gif                i 
+= temprand;
img_33d02437d135341f0800e3d415312ae8.gif                temp 
+= temprand;
img_105a1e124122b2abcee4ea8e9f5108f3.gif            }

img_33d02437d135341f0800e3d415312ae8.gif            
else
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif                i 
+= temprand;
img_33d02437d135341f0800e3d415312ae8.gif                temp 
+= temprand + ",";
img_105a1e124122b2abcee4ea8e9f5108f3.gif            }

img_33d02437d135341f0800e3d415312ae8.gif            
img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

img_33d02437d135341f0800e3d415312ae8.gif        
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
string[] str = temp.Split(new char[]img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{','});
img_33d02437d135341f0800e3d415312ae8.gif        
return str;
img_33d02437d135341f0800e3d415312ae8.gif        
img_105a1e124122b2abcee4ea8e9f5108f3.gif    }

img_05dd8d549cff04457a6366b0a7c9352a.gif}

产生的是一组字符串数组,但都是数字,必要时可以转成整型应用就是了。

下面给两个演示图,主要是看波幅的控制
波幅为5时的情况
bf5.JPG
再来个波幅为50时的情况图
bf50.JPG
可以看到随机数产生的波动效果了吧。

其实思想很简单,在范围内产生的随机数的波动是控制不了的,那么怎么控制它偏向某个值呢?很简单,取多个随机数,从中找出离标准值最近的,也就是用它减标准值后,绝对值最小的那个,那么其它不要了,就取这个就行了,这样产生的一系列随机数就会向标准值偏向,每次产生的越多,最终得出的数值就离标准值越近,所以我这里这个波幅值(网络环境)其实就是定义的随机数每次产生的个数,在多少个中选一,当然数字越大,波幅越小了,哈哈!

这是一个小项目里用到的,接下来我要做的就是把生成的这组数据转成曲线图,对客户来说就看到一个比较完美的模拟了。
相关文章
|
3月前
程序与技术分享:CDCE913产生任意频率
程序与技术分享:CDCE913产生任意频率
32 0
|
4月前
|
算法
KPM算法求字符串的最小周期证明
公式 `ans = n - LPS[n-1]` 描述了最小周期,其中 `n` 是子串长度,`LPS[n-1]` 是前缀函数值。证明分为特殊情况和一般情况:对于完整周期字符串,`LPS[n-1] = 3*T`,故 `ans = T`;对于非完整周期,通过分析不同长度的 `[末部分]` 和 `[前部分]`,展示 `ans` 始终等于周期 `T` 或由 `[e][b]` 构成的最小周期,从而证明公式正确。
|
10月前
|
机器人 Java 开发工具
生成指定长度的随机数字,用对方法精准提效数10倍!
生成指定长度的随机数字这一函数功能可能在以下情况下被使用:
|
Java
随机点名系统
随机点名系统
111 0
|
算法
算法创作 | 将数字变成 0 的操作次数
算法创作 | 将数字变成 0 的操作次数
108 0
|
传感器 芯片
模拟量与数字量区别
模拟量与数字量区别
171 0
|
C++
【力扣·每日一题】1629. 按键持续时间最长的键 (C++ 模拟)
【力扣·每日一题】1629. 按键持续时间最长的键 (C++ 模拟)
49 0
【力扣·每日一题】1629. 按键持续时间最长的键 (C++ 模拟)
|
Java
用Java实现3D随机选号码的功能
- ## 需要用到Scanner语句 - ## 需要用到for循环 - ## 需要用到Math方法
490 0
用Java实现3D随机选号码的功能
|
监控 Java Linux
使用SecureRandom产生随机数采坑记录
使用SecureRandom产生随机数采坑记录