码迷,mamicode.com
首页 > 其他好文 > 详细

【转】ns2 随机数

时间:2016-04-26 23:45:40      阅读:472      评论:0      收藏:0      [点我收藏+]

标签:

随机数产生器(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###

【转】ns2 随机数

标签:

原文地址:http://www.cnblogs.com/hadis-yuki/p/5436945.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!