【转】ns2 随机数

随机数产生器(Random Number Generator)

[前言]

随机数产生器在NS2中是非常重要的,举凡网络节点在NAM中的位置或者是应用程序在何时开始传送或结束数据传输,都会用到随机数产生器。因此,在本节中,笔者将介绍如何在NS2中使用随机数产生器。

[种子(seed)和分布(distribution)]

随机数产生器所产生的数值是由种子和分布所控制的,不同的种子或者是分布就会产生出不同的随机数。我们可以这样思考,当一个种子和分布决定之后,随机数产生器会产生出一个表格,表格内是由一长串不同数字所组成,当我们需要一个随机数,随机数产生器就会去选取这个表格中第一个数字,当再需要另一个随机数,随机数产生器就会去选取这个表格中第二个数字,以此类推,所以当使用种子和分布相同时,得到的随机数会相同,若不同时,得到的随机数会不同。而在NS2中,若是种子的值为0的话,则表示每次执行程序的时候,随机数产生器都会在产生出不同的表格,也就是说每次得到的随机数都不相同。

[Creating Random Variable]

若是我们要在NS2中产生一个随机数产生器,并把种子设定为2,则可以把下面的程序代码放入tcl code中。

 

set rng [new RNG]

$rng seed 2

 

      当random variable产生之后,接下来要决定分布,我们可以使用的分布有Pareto、Constant、Uniform、Exponential、或HyperExponentail 等等分布。

1.       Pareto Distribution : 要提供expectation 和 shaper parameter β。

set  r1  [new RandomVariable/Pareto]

$r1  use-rng   $rng

$r1  set  avg_  10.0

$r1  set  shape_  1.2

2.       Constant:

set  r2  [new RandomVariable/Constant]

$r2  use-rng  $rng

$r2  set avg_ 5.0

3.       Uniform distribution: 要提供最小值和最大值

set  r3  [new RandomVariable/Uniform]

$r3  use-rng $rng

$r3  set  min_ 0.0

$r3  set  max_ 10.0

4.       Exponential distribution: 要提供平均值

set  r4 [new RandomVariable/Exponential]

$r4  use-rng $rng

$r4  set avg_ 5

5.       Hyperexponential distribution:

set  r5  [new RandomVariable/HyperExponential]

$r5  use-rng  $rng

$r5  set  avg_  1.0

$r5  set  cov_  4.0

[Tcl Code]


set  rng  [new RNG]

$rng  seed 2

puts  “Testing Pareto Distribution”

set  r1  [new RandomVariable/Pareto]

$r1  use-rng   $rng

$r1  set  avg_  10.0

$r1  set  shape_  1.2

for {set i 1} {$i <=3} {incr i} {

puts [$r1 value]

}

puts  “Testing Constant Distribution”

set  r2  [new RandomVariable/Constant]

$r2  use-rng  $rng

$r2  set avg_ 5.0

for {set i 1} {$i <=3} {incr i} {

puts [$r2 value]

}

puts  “Testing Uniform Distribution”

set  r3  [new RandomVariable/Uniform]

$r3  use-rng $rng

$r3  set  min_ 0.0

$r3  set  max_ 10.0

for {set i 1} {$i <=3} {incr i} {

puts [$r3 value]

}

puts  “Testing Exponential Distribution”

set  r4 [new RandomVariable/Exponential]

$r4  use-rng $rng

$r4  set avg_ 5

for {set i 1} {$i <=3} {incr i} {

puts [$r4 value]

}

puts  “Testing HyperExponential Distribution”

set  r5  [new RandomVariable/HyperExponential]

$r5  use-rng  $rng

$r5  set  avg_  1.0

$r5  set  cov_  4.0

for {set i 1} {$i <=3} {incr i} {

puts [$r5 value]

}

[执行结果]

Testing Pareto Distribution

7.323108e+02

1.034996e+01

3.241146e+01

Testing Constant Distribution

1.000000e+00

1.000000e+00

1.000000e+00

Testing Uniform Distribution

1.762401e+00

8.823415e+00

5.983056e+00

Testing Exponential Distribution

2.342635e+00

2.286844e+00

3.783593e+00

Testing HyperExponential Distribution

2.182741e-01

9.029152e-01

8.333935e-02

不管执行几次,结果都会相同,这是因为seed都固定为2。

若是把seed改为0,第一次执行

Testing Pareto Distribution

2.384032e+00

5.089023e+00

4.105111e+01

Testing Constant Distribution

1.000000e+00

1.000000e+00

1.000000e+00

Testing Uniform Distribution

1.244962e+00

7.089372e+00

9.505300e+00

Testing Exponential Distribution

6.821317e-01

1.152453e+00

5.977962e+00

Testing HyperExponential Distribution

2.182741e-01

9.029152e-01

8.333935e-02

若是把seed改为0,第二次执行

Testing Pareto Distribution

2.095560e+00

3.138167e+00

4.567834e+00

Testing Constant Distribution

1.000000e+00

1.000000e+00

1.000000e+00

Testing Uniform Distribution

2.799521e+00

3.294468e-01

4.339498e+00

Testing Exponential Distribution

8.149149e-01

1.027426e+00

4.275210e+00

Testing HyperExponential Distribution

2.182741e-01

9.029152e-01

8.333935e-02

可以看出当seed为0时,Pareto、Uniform、Exponential所得到的结果会不相同。

参考地址:http://wenku.baidu.com/view/e0320cd87f1922791688e82e.html###

时间: 2024-10-11 05:48:26

【转】ns2 随机数的相关文章

shell系列生成随机数的方法

一: RANDOM echo $RANDOM RANDOM的随机数是有范围的1--32767,一般用它是可以被破解的 1.2  生成八位数的随机密码: echo $(($RANDOM+11111111)) 二:MD5sum 随机加密方法 生成的密码较长 取9位数密码: echo $RADDOM |md5sum|cut -c 2-9 三:通过openssl产生随机数 [[email protected] tmp]# openssl rand -base64 8 hInfIvtfOSk= [[ema

ubuntu16.04下安装NS-2.35以及对simple例的理解

本人是在VMWare上安装的ubuntu16.04版本,然后安装NS2.35. 1.下载ns2的安装包,这里我选择的是ns-allinone-2.35.tar.gz压缩格式的all in one安装包,all in one 安装包包含所有的组件,比较方便,另附下载地址: http://www.isi.edu/nsnam/ns/ns-build.html 2.安装前要先进行一些准备工作进行配置环境,输入如下代码: $sudo apt-get install build-essential $sud

javaScript随机数取值方法

Math.random()方法返回0到1之间的一个随机数,不包括0和1 如若想取的一个范围的随机数可套用下面的公式: 一.X+开始数-1=结束数 二.Math.floor(Math.random()*X+开始数) 注:Math.floor()向下舍入,去掉小数点后数 例: //若想取的5到10之间的数,套用公式:①X+开始数-1=结束数//可得出X为6//②Math.floor(Math.random()*X+开始数)//for(var i=0;i<10;i++){ document.write

重复10个1~60顺序且不重复的随机数

$flag = 1; for ($i = 0; $i < 10; $i++) {     $data['mobile'] = $evaluate_mobile;     //随机时间     $second = rand($flag, 6 * ($i + 1));//重复10个1~60顺序且不重复的随机数     $flag = $second + 1;//加1是未免与上一结果重复     $data['second'] = $second;     $result[] = $data; }

r语言之生成随机序列,随机数生成函数及用法

(1)生成正态分布随机数: rnorm(n,mean,sd)     其中,n表示生成的随机数个数,mean表示正态分布均值,sd表示正态分布标准差 > rnorm(5,0,2)[1] -5.31147765 0.09634197 0.35276104 -1.94548466 0.54533883 (2)生成均匀分布随机数: runif(n,min,max)     其中,n表示生成的随机数个数,min表示均匀分布最小值,max表示均匀分布最大值 > runif(5,0,10)[1] 9.74

随机数和随机数种子(转)

在计算机中并没有一个真正的随机数发生器,但是可以做到使产生的数字重复率很低,这样看起来好象是真正的随机数,实现这一功能的程序叫伪随机数发生器. 有关如何产生随机数的理论有许多,如果要详细地讨论,需要厚厚的一本书的篇幅.不管用什么方法实现随机数发生器,都必须给它提供一个名为“种子”的初始值.而且这个值最好是随机的,或者至少这个值是伪随机的.“种子”的值通常是用快速计数寄存器或移位寄存器来生成的. 下面讲一讲在C语言里所提供的随机数发生器的用法.现在的C编译器都提供了一个基于ANSI标准的伪随机数发

六爻预测等各种预测术的本质探讨之随机数猜想

对于各类预测术,比如六爻术,源于周易八卦.大家对预测术的观点泾渭分明,要么很相信,要么很不屑.或者有些人认为信则有不信则无. 当然我本人是信奉现代科学的,不过预测术确实有不可思议的地方,对过去和未来的分析不是简单的一句"巧合,概率论"能说的过去的.现经过本人的一番分析,试图对各类预测术的本质来个大起底. 其实,预测术不神奇,更不是有什么鬼神之力.而且也不能说古人比现在人更聪明.预测术的外圈是遵循一定规律的一整套规则,这些规则是古代在不停的经验总结中逐步完善的.换句话说,只要你自己能遵循

在ns2.35中添加myevalvid框架

在用ns2进行网络视频通信仿真的时候,先要为我们自己的ns2添加evalvid或者myevalvid框架.其中myevalvid框架是由柯志亨老师整合evalvid和ns2之后得出的新框架,笔者建议大家安装该框架,而不要安装原生的evalvid框架.这样就可以结合柯志亨老师的<ns2仿真实验-----多媒体和无线网络通信>这本书,做配套的实验,比较方便. 网上关于myevalvid框架的安装文章很多,大家可以参考去做,笔者会在本文最后给出相关的链接.本文主要是对myevalvid框架源码中的错

SQL Server生成指定范围内的随机数

在开发中很多时候,我们都会遇到这种需要生成一个指定范围随机数的情况.而且在很多语言中比如Java.C#.SQl等,都会有一个函数生成一个类似于0.234273983423789的随机小数,而所有的随机数都是通过这个最基本的随机数(0.234273983423789)变化过来的. 下面我说一下生成指定范围随机数的思路,比如我要生成一个100-999范围内的随机数,我就要保证我写的生成随机数的表达式所生成的值,最大是999,最小是100.还有就是要明白一个数学里的小道理,0.99去乘一个数字所得的结