`
hyw520110
  • 浏览: 223410 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

tcl中如何产生随机数

    博客分类:
  • TCL
Tcl 
阅读更多

[前言]

        亂數產生器在NS2中是非常重要的,舉凡網路節點在NAM中的位置或者是應用程式在何時開始傳送或結束資料傳輸,都會用到亂數產生器。因此,在本節中,筆者將介紹如何在NS2中使用亂數產生器。

 

[種子(seed)和分佈(distribution)]

        亂 數產生器所產生的數值是由種子和分佈所控制的,不同的種子或者是分佈就會產生出不同的亂數。我們可以這樣思考,當一個種子和分佈決定之後,亂數產生器會產 生出一個表格,表格內是由一長串不同數字所組成,當我們需要一個亂數,亂數產生器就會去選取這個表格中第一個數字,當再需要另一個亂數,亂數產生器就會去 選取這個表格中第二個數字,以此類推,所以當使用種子和分佈相同時,得到的亂數會相同,若不同時,得到的亂數會不同。而在NS2中,若是種子的值為0的話,則表示每次執行程式的時候,亂數產生器都會在產生出不同的表格,也就是說每次得到的亂數都不相同。

       

[Creating Random Variable]

        若是我們要在NS2中產生一個亂數產生器,並把種子設定為2,則可以把下面的程式碼放入tcl code中。

set rng [new RNG]

$rng seed 2

       random variable產生之後,接下來要決定分佈,我們可以使用的分佈有ParetoConstantUniformExponential、或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

 

可以看出當seed0ParetoUniformExponential所得到的結果會不相同。

 

 

[參考文件]

1. http://www-sop.inria.fr/mistral/personnel/Eitan.Altman/ns.htm

分享到:
评论

相关推荐

    使用tcl脚本产生随机数

    使用tcl脚本产生随机数

    winrunner 例子2 将指定文件拷贝到指定文件夹

    然后,"通过随机数字的产生"可能涉及到TCL的随机数生成函数,如`expr {rand()}`。生成的随机数可以用于选择数组中的某个特定元素,也就是随机选取一个文件夹进行操作。这增加了测试的随机性和覆盖率,确保了不同情况...

    柯志亨版NS2仿真实验4

    在实验过程中,你将学习如何编写和调用NS2内部的随机数生成函数,比如`uniform`、`exponential`、`poisson`等,它们分别对应均匀分布、指数分布和泊松分布的随机数。这些分布常用来模拟网络中的各种随机事件,如...

    基本遗传算法的Matlab程序

    - `tcl`: 此处未在代码中使用到。 2. **种群初始化**: - 使用随机数生成器初始化种群,每个个体包含两个变量\(x_1\)和\(x_2\)的值。 - 计算每个个体的适应度值`f0(i)`。 3. **选择操作**: - 使用轮盘赌选择...

    VCS利用makefile仿真详细介绍

    这些信号可以是常量、随机数或者通过高级验证库(如UVM)生成的序列。 3. **例化module**:在`module_tb.v`中,你需要实例化被测模块,连接初始化的信号到DUT的输入端,并将DUT的输出连接到观察变量,以便在仿真...

Global site tag (gtag.js) - Google Analytics