`

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脚本产生随机数

    Keil C51 中产生随机数的方法

    在Keil C51开发环境中,生成随机数是嵌入式系统编程中常见的需求,尤其在游戏、加密算法、测试工具等领域。本文将详细介绍在Keil C51中如何使用标准库函数`rand()`和`srand()`来生成随机数,并通过实例代码进行演示...

    混合同余法产生随机数和M序列产生方法(算例及matlab程序)

    根据给定文件的信息,本文将详细探讨混合同余法生成随机数的方法以及M序列的产生方式,包括如何基于M序列生成逆M序列及其相应的Matlab实现。 ### 一、混合同余法产生随机数 #### 1.1 原理介绍 混合同余法是一种...

    汇编语言产生随机数并运算程序

    汇编语言 产生随机数并运算 汇编语言 产生随机数并运算

    C语言线性同余法产生随机数.rar_C语言线性同余法产生随机数_seed

    `C语言线性同余法产生随机数.h` 文件可能是包含函数声明的头文件,可能定义了一个用于生成随机数的函数,例如: ```c #ifndef _LINEAR_CONGRUENTIAL_H_ #define _LINEAR_CONGRUENTIAL_H_ unsigned int linear_...

    MFC实现产生随机数

    总结起来,通过MFC在VC++中实现生成随机数的功能,你需要创建一个MFC对话框应用程序,添加一个按钮控件,处理按钮点击事件,然后在事件处理函数中使用C++的标准库生成随机数。这个过程涉及了MFC的消息映射、控件交互...

    乘同余法产生随机数

    系统辨识中利用乘同余法产生服从0,1分布的随机数

    java中产生随机数的两个方法

    Java 中产生随机数的两个方法 在 Java 语言中,产生随机数的需求非常常见,无论是在游戏开发、数据模拟还是其他应用场景中,随机数都是必不可少的。Java 中提供了两种方式来生成随机数:一是通过 Math.random() ...

    C++中产生随机数的程序

    我根据C++中产生随机数的方法写的一个源程序。

    C语言中产生随机数

    ### C语言中产生随机数详解 #### 一、引言 在C语言中,生成随机数是一项非常实用的功能,尤其在模拟、游戏开发以及其他需要随机性的应用中尤为重要。本文将详细介绍C语言中如何生成随机数,包括核心概念、常用函数...

    verilog产生高斯随机数

    本篇文章将探讨如何在Verilog中生成高斯随机数,具体步骤包括利用移位寄存器产生均匀随机数以及通过Box-Muller变换生成高斯随机数。 首先,让我们理解什么是移位寄存器。移位寄存器是一种基本的数字逻辑电路,它...

    汇编语言产生随机数并运算

    在“汇编语言产生随机数并运算”这个主题中,我们将探讨如何利用汇编语言生成随机数以及如何对这些随机数进行算术运算。 随机数在各种应用程序中都有广泛的应用,比如模拟、加密、游戏、统计计算等。在汇编语言中,...

    ADC产生随机数

    在这个特定的场景中,我们探讨的是如何利用STM32微控制器的ADC的一个悬空输入引脚来生成随机数。STM32是一款广泛使用的基于ARM Cortex-M内核的微控制器,它提供了丰富的外设接口,包括多个ADC通道,可以满足各种应用...

    C语言C++中怎样产生随机数.pdf

    "C语言C++中产生随机数的方法和应用" C语言和C++是一种非常流行的编程语言,在各种应用程序中广泛使用。产生随机数是C语言和C++中的一种非常重要的功能,用于模拟随机事件、生成随机数队列、进行模拟试验等。下面...

    用c语言产生随机数

    在C语言中,生成随机数是编程中常见的需求,尽管计算机生成的随机数实际上是伪随机数,因为它们是通过算法产生的,而非真正的不可预测的随机过程。在C语言中,我们可以利用标准库提供的rand()函数来生成伪随机数,而...

    产生随机数的方法

    在这个示例中,`srand(time(NULL))`确保了每次运行程序时,`rand()`函数都会根据当前系统时间产生一个新的种子,从而生成不同的随机数。`1 + rand() % 10`则生成1到10之间的随机整数,并通过`printf()`打印出来。 ...

    C语言产生随机数详解

    C语言产生随机数详解 本文档详细叙述了srand和rand函数的使用...rand和srand函数是C语言中产生随机数的重要组成部分。通过对这两个函数的使用和理解,我们可以更好地掌握C语言的随机数生成机制,并应用于实际开发中。

    如何用spss产生随机数

    #### 一、SPSS中产生随机数的基本方法 在统计学领域,SPSS(Statistical Package for the Social Sciences)是一款广泛使用的统计软件包,用于数据分析。对于需要随机性数据的研究场景,学会在SPSS中生成随机数是...

    高斯分布产生随机数及其估计

    该程序时高斯分布产生随机数并对其参数进行估计

Global site tag (gtag.js) - Google Analytics