合成法生成随机数原理

合成法生成随机数原理,第1张

随机数产生原理 原创
2017-06-30 18:15:46
 8点赞

大作家佚名 
码龄13年
关注
引言
利用数学的方法产生随机数的优点具有速度快、可对模拟问题进行复算检查、具有较好的统计特性。通过检验符合均匀性、随机性、独立性就可以当作真正的随机数。
随机数
经典的随机数产生方法为是线性同余法,即Linear Congruence Generator (LCG),由Lehmer于1951年提出。
同余:对于两个整数A、BA、B,如果它们同时除以一个自然数M的余数相同,就说A、BA、B对于模M同余,A≡BmodMA≡BmodM。
线性同余法
线性同余发生器是用不连续分段线性方程计算产生伪随机数序列的算法。LCG背后的理论比较容易理解,易于实现。由于计算机产生的随机数都是伪随机数,后面就直接用随机数代替伪随机数的叫法。
LCG定义如下:
Xn+1=(aXn+c)modm
Xn+1=(aXn+c)modm
其中,
XX是随机数序列
m,0<mm,0<m,模
a,0<a<ma,0<a<m,乘子
c,0≤c<mc,0≤c<m,增量,也叫做偏移量
X0,0≤X0<mX0,0≤X0<m,开始值,通常叫做“种子”seed
生成器不断往复运行,将会产生一序列<script type="math/tex" id="MathJax-Element-10"> a,c,ma,c,m取值合适,序列最大周期将达到 mm。这种情况下,序列中所有可能的整数都在某点固定出现。当c=0c=0时候,LCG就变换成了乘法同余发生器,multiplicative congruential generator (MCG), c≠0c≠0时叫做混合同余发生器,mixed congruential generator,MCG。
这里就用Wiki中的列子说明LCG是如何工作的:

当m=9,a=2,c=0,seed=1m=9,a=2,c=0,seed=1时,得:
X0=seed=1X0=seed=1
X2=(a∗X1+c)modm=(2×1+0)%9=2X2=(a∗X1+c)modm=(2×1+0)%9=2
X3=(a∗X2+c)modm=(2×2+0)%9=4X3=(a∗X2+c)modm=(2×2+0)%9=4
X4=(a∗X3+c)modm=(2×4+0)%9=8X4=(a∗X3+c)modm=(2×4+0)%9=8
X5=(a∗X4+c)modm=(2×8+0)%9=7X5=(a∗X4+c)modm=(2×8+0)%9=7
X6=(a∗X5+c)modm=(2×7+0)%9=5X6=(a∗X5+c)modm=(2×7+0)%9=5
X7=(a∗X6+c)modm=(2×5+0)%9=1X7=(a∗X6+c)modm=(2×5+0)%9=1
一个周期结束,如果再继续的话,随机序列将会以周期6重复出现。改变a,c,ma,c,m的值,LCG的周期性也发生了变换。
混合同余发生器 (MCG) 周期长度
通常MCG最大周期位mm,往往由于a,c,ma,c,m的选择使得周期无法达到mm。若想获得最大周期的随机数序列,需要同时满足下述条件:
m和c互质m和c互质。互质整数:公约数只有1的两个整数,如:7,5
a−1可以被ma−1可以被m的所有素因子整除
如果m被4整除,a−1也被4整除如果m被4整除,a−1也被4整除
这三个条件被称为Hull-Dobell定理,虽然LCG能够产生可以通过随机性的正式测试的伪随机数,但对参数c,m和ac,m和a的选择非常敏感。
使用LCG可能出现的问题
历史上,糟糕的因子选择导致了LCG的实施效率低下。在连续调用时,也无法避免序列的相关性。如果我们要自己设计LCG,选择不合适的a,c,ma,c,m往往带来糟糕的结果,却不自知。
历史上有这样的例子RANDU,其中,a=65539,m=231a=65539,m=231,在IBM大型机上使用了许多年,并被广泛应用在其他系统上,现在出现了很多问题,由于使用了糟糕的因子。
ANSI C库中的LCG
ANSI C库中的LCG实现具有一定的缺陷,其中一定数量的实施方法不能很好的工作,这个责任应该由ANSI C委员会及其实施者承担。——“Numerical Recipes”。该评判有明确出处,非笔者臆断!
由ANSI C标准规定rand()返回一个整数值,RAND_MAX通常不是很大。ANSI C标准要求RAND_MAX最大32767。
打开头文件stdlibh,可以看到定义的十六进制RAND_MAX,使用博客的方法转换为十进制为32767。
/ Maximum value that can be returned by the rand function /
#define RAND_MAX 0x7fff
1
2
3
1
2
3
ANSI C定义的LCG
打开randh头文件查看随机数生成器代码,产生随机数的过程即线性同余法,代码简单、结构清楚清楚。
/
randc - random number generator

Copyright (c) Microsoft Corporation All rights reserved

Purpose:
defines rand(), srand() - random number generator

/
#include <cruntimeh>
#include <mtdllh>
#include <stddefh>
#include <stdlibh>
/
void srand(seed) - seed the random number generator

Purpose:
Seeds the random number generator with the int given Adapted from the
BASIC random number generator

Entry:
unsigned seed - seed to seed rand # generator with

Exit:
None

Exceptions:

/
void __cdecl srand (
unsigned int seed
)
{
_getptd()->_holdrand = (unsigned long)seed;
}
/
int rand() - returns a random number

Purpose:
returns a pseudo-random number 0 through 32767

Entry:
None

Exit:
Returns a pseudo-random number 0 through 32767

Exceptions:

/
int __cdecl rand (
void
)
{
_ptiddata ptd = _getptd();
return( ((ptd->_holdrand = ptd->_holdrand 214013L
+ 2531011L) >> 16) & 0x7fff );
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
调用方式:
#include <iostream>
#include <random>
#include <timeh>
using namespace std;
void main(){
//srand((unsigned)time(NULL));
srand(11);
for (int i = 0; i < 10; i++)
cout << rand() << '\t';
cout << endl;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
均匀分布随机数
均匀分布随机数即等概率随机数,如:扔骰子、掷硬币。使用《数值方法》中的LCG生成服从[0,1][0,1]分布的均匀分布。
#include <iostream>
#define IA 16807
#define IM 2147483647
#define AM (10/IM)
#define IQ 127773
#define IR 2836
#define NTAB 32
#define NDIV (1+(IM-1)/NTAB)
#define EPS 12e-7
#define RNMX (10-EPS)
float ran1(long idum)
{
int j;
long k;
static long iy = 0;
static long iv[NTAB];
float temp;
if (idum <= 0 || !iy) {
if (-(idum) < 1)
idum = 1;
else
idum = -(idum);
for (j = NTAB + 7; j >= 0; j--) {
k = (idum) / IQ;
idum = IA(idum - kIQ) - IRk;
if (idum < 0)
idum += IM;
if (j < NTAB)
iv[j] = idum;
}
iy = iv[0];
}
k = (idum) / IQ;
idum = IA(idum - kIQ) - IRk;
if(idum < 0)
idum += IM;
j = iy / NDIV;
iy = iv[j];
iv[j] = idum;
if ((temp = AMiy) > RNMX)
return RNMX;
else
return temp;
}
void main()
{
float ran1(long idum);
long seed = 10;
for (int i = 0; i < 10;++i)
{
std::cout << ran1(&seed) << std::endl;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
标准正态分布随机数
现实生活中更多的随机现象是服从正态分布的,如:20岁的成年人体重分布。正太分布随机数可以通过Box-Muller方法从均匀分布随机数转换为标准正态分布随机数。下面代码是《数值方法》中完整代码。
#include <iostream>
#include <mathh>
#define IA 16807
#define IM 2147483647
#define AM (10/IM)
#define IQ 127773
#define IR 2836
#define NTAB 32
#define NDIV (1+(IM-1)/NTAB)
#define EPS 12e-7
#define RNMX (10-EPS)
float ran1(long idum)
{
int j;
long k;
static long iy = 0;
static long iv[NTAB];
float temp;
if (idum <= 0 || !iy) {
if (-(idum) < 1)
idum = 1;
else
idum = -(idum);
for (j = NTAB + 7; j >= 0; j--) {
k = (idum) / IQ;
idum = IA(idum - kIQ) - IRk;
if (idum < 0)
idum += IM;
if (j < NTAB)
iv[j] = idum;
}
iy = iv[0];
}
k = (idum) / IQ;
idum = IA(idum - kIQ) - IRk;
if(idum < 0)
idum += IM;
j = iy / NDIV;
iy = iv[j];
iv[j] = idum;
if ((temp = AMiy) > RNMX)
return RNMX;
else
return temp;
}
float gasdev(long idum){
float ran1(long idum);
static int iset = 0;
static float gset;
float fac, rsq, v1, v2;
if (idum < 0)
iset = 0;
if (iset == 0) {
do {
v1 = 20ran1(idum) - 10;
v2 = 20ran1(idum) - 10;
rsq = v1v1 + v2v2;
} while (rsq >= 10 || rsq == 00);
fac = sqrt(-20log(rsq) / rsq);
gset = v1fac;
iset = 1;
return v2fac;
}
else {
iset = 0;
return gset;
}
}
void main()
{
float ran1(long idum);
long seed = 10;
for (int i = 0; i < 10;++i)
{
std::cout << gasdev(&seed) << std::endl;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
总结
这里详细叙述了LCG生成均匀分布随机数的方法,分析了获得最大周期的条件。随机序列具体服从的分布,可以通过卡方检验得到。由于ANSI C中的LCG随机数的缺陷,vs下编程不建议使用系统自带的随机数生成器。如果只是单独的使用LCG产生随机数,也不建议自己实现LCG(即使实现过程很简单)。最后建议使用《数值方法》中的LCG随机数生成器。
参考
>

关于设备设施员工培训手册

10目的

规范电梯维修保养工作,确保电梯各项性能完好。

20适用范围

适用于物业管理公司辖区内的电梯维修保养

30职责

31主管经理负责审核《电梯维修保养年度计划》并检查维修保养工作的实施情况。

32设备部主管负责组织制定《电梯维修保养年度计划》并具体组织、实施、监督维修保养工作。

33电梯管理员负责电梯的日常维修保养。

34公共事务部负责向有关用户通知电梯停用的情况。

40程序要点

41《电梯维修保养年度计划表》的制定。

411每年的12月15日之前,由设备部主管组织电梯管理员一起研究、制定《电梯维修保养年度计划》并上报公司审批。

412制定《电梯维修保养年度计划》的原则是:

a)电梯使用的频度;

b)电梯的运行状况(故障隐患);

c)合理时间(避开节假日、特殊活动日等)。

413《电梯维修保养年度计划》应包括如下内容:

a)维修保养项目及内容;

b)备品、备件计划;

c)具体实施维修保养的时间;

d)预计费用。

42电梯管理员进行电梯维修保养时,应按《电梯维修保养年度计划》进行。

43电梯维修保养安全 *** 作。

431维修保养前的安全准备工作:

a)在电梯基站门口处放置“检修停用”标牌;

b)关好厅门,不能关厅门时,用合适的护栅挡住入口处,防止无关人员进入电梯轿厢或进入电梯井道;

c)有人在轿顶上做检修工作时,必须按下轿顶检修箱上的检修开关,关好厅门。

432检修过程中的安全注意事项:

a)给转动部位加油、清洗或观察钢丝绳的磨损情况时必须停闭电梯;

b)人在轿顶上工作时,站立之处应有选择,脚下不得有油污,否则应打扫干净,以防滑倒;

c)人在轿顶上准备开动电梯以观察有关电梯部件的工作情况时,必须牢牢握住钢丝绳,并应注意整个身体置于轿厢外框尺寸之内,防止被其他部件碰伤。需由轿内检修人员开电梯时,要交代和配合好,未经许可不准开动电梯;

d)禁止在井道内和轿顶上吸烟;

e)检修电器部件时应尽可能避免带电作业,必须带电 *** 作或难以在完全切断电源的情况下 *** 作时,应预防触电,并应有监护人、必备的工具和材料,特别应注意电梯突然启动运行;

f)使用的手灯必须采用带护罩的、电压为36V以下的安全灯。最好使用手电筒;

g)严禁维修人员站在井沿处向井道内探身,严禁维修人员两只脚分别站在轿厢顶与厅门上坎之间进行长时间的检修 *** 作;

h)底坑深度超过15M的,应使用梯子上下,禁止攀附随线和轿底其他部位上下。进入底坑后,应将底坑检视灯箱上的急停开关或限速器涨紧装置的断绳开关断开;

i)应尽量避免在井道内上下同时作业,必须同时作业时,下方作业人员应戴上安全帽;

j)检修未完,检修人员需暂离开现场时,应做到:——关闭所有厅门,暂时关不上的必须设置明显标示物,进行安全围档,并在该厅门口悬挂“危险、切勿靠近”警告牌,并派人看守;——切断电梯总电源开关;——排除热源,如烙铁、电焊、喷灯等。

k)检修保养工作结束后应做到:——将所有开关恢复到原来状态,检查工具、材料有无遗落在设备上;——清点工具、材料,打扫工作现场,摘除悬挂的告示牌;——送电试运行,观察电梯运行情况,发现异常及时整改;——通知有关人员电梯恢复正常运行。

44电梯管理员负责电梯的日常维修保养工作(清洁、润滑、调整、测试和安全装置效能检查),电梯的大中型修理由外委完成。

45每3个月对电梯各部位进行一次检查、清洁、润滑(着重对各安全装置效能检查,对电梯进行保养时,可以一台电梯的全部保养项目一次性进行,也可以对小区内所有电梯分项目进行保养。

451检查曳引电动机、减速箱有无异常响声,如有则应对曳引电动机轴承加注润滑油,对减速箱加入蜗轮蜗杆润滑油。

452检查曳引电动机和减速箱联轴器d性圈有无损伤,如有则应更换d性圈,检查曳引电动机、减速箱地脚螺栓有无松动现象,如有则应拧紧。

453检查制动器电磁铁与铜套间是否润滑良好、动作是否灵活无阻碍,否则应加润滑剂,检查各固定螺栓、d簧调节螺母是否紧固无松动,如松动则应拧紧。制动器温升不超过60度。

454门机直流电动机碳刷磨损如果超过新装时厚度的1/3时则应更换。

455限速器旋转销轴处应加润滑油,限速器轮、涨紧轮轮槽应无异常磨损,如磨损严重则应更换并作必要调整;钢丝绳应完好无油污;限速器夹绳钳口处应无油污或异物,发脚螺栓应紧固。

456检查涨紧装置动作是否正常,否则应作机械调整;检查限位开关是否处于正常位置,如未在正常位置则应扳回。

457检查安全钳传动连杆动作是否灵活无卡阻,如果有阻滞现象则应对各传动处加润滑油,安全钳楔块与导轨的间隙应为2~4mm。安全钳钳口应清洁无油污。

458清洁控制柜内各元器件,检查接触器、继电器动作是否正常,有无异常声响,触点有无打火、熔焊、积碳现象,如有则应进行整修,整修达不到要求的则应更换同型号规格的接触器、继电器;检查熔断器有无松动、发热现象,如有则应处理并拧紧;检查各仪表、信号灯是否正常,如损坏则应予以更换。

459检查机械选层器钢带有无断齿、开裂和扭曲现象,如有则应更换钢带;检查各传动机构动作是否灵活无阻滞,如阻滞则应对各传动部位加润滑油;检查电气触头或开关接触是否良好,否则应擦拭或修理。

4510清除轿门、各厅门导轨的灰尘、油污。

4511检查各厅门门锁接触是否良好,否则应修理,门锁转动部位应注入润滑油;检查 *** 纵箱按钮、开关 *** 作是否灵活可靠,失效的应及时更换。

4512检查自动门传动机构,安全触板传动机构是否正常,各部位螺钉、定位装置是否紧固,门机皮带有无损伤,开关门动作是否灵活可靠,轿厢门限位开关、减速开关、门锁接点、电阻器等有无损坏。要求门刀距厅门地坎5~8mm,运行中门刀不能碰门轱辘,门刀与门轱辘间隙为3rnm,厅门不能从外面用手扒开。对各转动轴加润滑油,保证转动灵活自如,安全触板动作灵敏可靠。

4513检查轿厢和对重导靴油盒中油量(正常应为2/3油盒),缺油应及时加好;检查滚轮导靴胶皮有无开裂、膨胀,如开裂、膨胀则应更换。

4514检查断相保护、超速保护、机械联锁、厅门和轿门机电联锁油压缓冲器复位开关、急停开关、安全钳开关、检修开关、终端限位安全装置是否动作可靠,对不符合要求的要调整或更换,对传动部位应加润滑油。

4515清除对重架、对重块、缓冲器上的杂物,清扫底坑、清洁接油盒。

4516检查紧固感应器各部位螺栓,清除各部位尘土、污物。

4517检查曳引钢丝绳张力是否一致,绳有无伸长,如伸长则应作相应调整。曳引轮绳槽应清洁无油污。

4518检查导轨连接板、压道板螺栓是否紧固,如松动则应拧紧。

4519做好中间接线盒外部清洁,紧固各端子板压线螺母。

46每年对小区内所有电梯进行一次全面综合性检查、清洗、润滑、修理、调整和测试,此项工作于每年12月上旬以前完成。

461每年对减速箱更换一次新的蜗轮蜗杆油。

462检查制动片磨损情况,如磨损厚度超过新装时厚度的1/2时则应更换。

463清洁限速轮、涨紧轮并加润滑油。

464涨紧轮底平面距底坑地面距离应为500±50mm,超过规定的应予以截绳。

465检查安全钳楔块和导轨的间隙(正常值2~4mm),试验安全钳动作是否灵敏可靠,如不满足要求则应作机械调整。

466清洁机械选层器,对各转动部位加润滑油,损坏的元器件应予以更换。

467清洁厅门吊门轮、轨道和钢丝绳,更换磨损的门轮、地脚滑块,调整好门机速度。

468调整厅轿门位置、门锁位置,紧固各部螺栓,门刀与层门地坎、门锁滚轮与轿厢的间隙应保证5~8mm。

469紧固对重块锁紧装置、绳头板及各部螺栓,调整紧固补偿链,运行时应无撞击声。

4610加缓冲器油,作缓冲器复位试验时,复位开关应动作准确,传动部分应灵活。

4611对终端限位开关做越程试验,其越程距离为上下端站厅门地坎以远50~70mm。

4612对终端极限开关做越程试验,其越程距离为上下端站厅站地坎以远150~200mm。

4613检查动力部分绝缘电阻应在0。5MΩ以上,其余电气线路应在0。25MΩ以上,电气设备的金属外壳对地应在4MΩ以上,如果达不到要求则应进行干燥处理。

4614检查各熔断器、熔断体、热继电器、相序继电器等保护装置是否工作正常,如果不行则应更换。

47每次电梯维修保养时间不允许超过8小时,若要超过8小时,则应由设备部主管填写《申请延时维修保养表》,经主管经理批准后方可延时。

48对于计划中未列出的维修保养工作,应由设备部主管尽快补充至计划中,对于突发性的设备设施故障,先经设备部主管口头批准后,按《电梯故障维修标准作业规程》进行紧急维修。

49电梯管理员应将上述维修保养工作清晰、完整、规范地记录在《__维修保养记录表》内,并于每次维修保养后的3天之内整理成册后交设备部存档,保存期为长期。

410电梯停用管理。电梯因维修保养等原因需要停梯时,应由设备部主管填写《停__申请表》,经主管经理批准后通知公共事务部,由公共事务部提前24小时通知有关用户。如因特殊情况突然电梯停用,应在电梯恢复使用后12小时内向有关用户作出解释。

50记录相关支持文件

空调存水弯一般都是90度的。

存水弯是为了防止水倒流的。一般的高度不应该超过70公分。还有的存水弯是为了防止气味随管道进入室内而设置的,高度也就是管道粗细的弯头长度,不用太大了。

存水弯防止下水道气体通过排水食系进人房间污染室内环境。常见形式分有管式存水弯、筒式存水弯、瓶式存水弯和碗式存水弯。材质多为铸铁与塑料。它要求水封高度不小于50RNM,且要便于清通。

扩展资料

存水弯水封应满足一定高度要求的水柱。存水弯水封高度与管内气压变化、水蒸发率、水量损失、水中杂质的含量及比重有关,若水封高度太深,其防止有害物质穿透能力越,但器具的排水流速降低,自净能力减弱,污水中固体杂质容易沉积在存水弯的底部,堵塞管道,影响排水效果。

同时存水弯水封太高,存水弯尺寸相应增大而影响卫生器具的安装;水封高度太小,管内压力波动,气体容易破坏水封的静水压力而进入室内,污染室内境,且存水弯内水容易蒸发而干凅,同时排水噪音变大。

根据排水系统室外地下化粪池等构筑物应满足满水后能承压 500Pa(50mmH20)的要求,以及一般情况 500Pa(50mmH20)压力下气体能及时排入大气中,同时考虑到水封蒸发损失、自虹吸损失及管道内气压变化等因素,存水弯水封高度一般 50~100mm 比较合理。

存水弯分S型存水弯和P型存水弯,S和P可以很形象的说明存水弯的形状。水弯头里面总是积有一定的水,封闭下水道,阻挡下水管道里的臭味。存水弯头有各种形状,有U形也有V形N形,但是形状应该有利于排水。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13464102.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-12
下一篇 2023-08-12

发表评论

登录后才能评论

评论列表(0条)

保存