【MATLAB强化学习工具箱】学习笔记--随机数种子是如何设置的?
介绍
在MATLAB强化学习工具箱的大部分demo中,都有对随机数种子的重置。
中,随机数种子重置语句为:
setdemorandstream(491218382)
中,随机数种子重置语句为:
rng(0)
效果如下所示。可以看到随机数种子重置后,每次生成的伪随机数序列是相同的。便于在多次仿真中互相对比其他因素。
>> s = rng(0);x = rand(1,5)
x =
0.2190 0.0470 0.6789 0.6793 0.9347
>> s = rng(0);x = rand(1,5)
x =
0.2190 0.0470 0.6789 0.6793 0.9347
>> s = rng(0);x = rand(1,5)
x =
0.2190 0.0470 0.6789 0.6793 0.9347
本文简单对目前发现较常用的两个函数进行说明。
setdemorandstream函数
setdemorandstream函数如下所示,核心调用的是RandStream,而且采用的伪随机数生成算法为‘mcg16807’
function setdemorandstream(n)
%SETDEMORANDOMSTREAM Set default stream for reliable example results.
%
% SETDEMORANDOMSTREAM(N) is less distracting in example code, but
% equivalent to:
%
% rs = RandStream('mcg16807','Seed',n);
% RandStream.setGlobalStream(rs);% Copyright 2011-2012 The MathWorks, Inc.
rs = RandStream('mcg16807','Seed',n);
RandStream.setGlobalStream(rs);
根据RandStream函数的帮助文档,可用的伪随机数生成算法如下:
| Name | Generator | Multiple Stream and Substream Support | Approximate Period In Full Precision |
|---|---|---|---|
'mt19937ar' |
Mersenne Twister (used by default stream at MATLAB startup) | No | 219937-1 |
'dsfmt19937' |
SIMD-Oriented Fast Mersenne Twister | No | 219937-1 |
'mlfg6331_64' |
Multiplicative lagged Fibonacci generator | Yes | 2124 (251 streams of length 272) |
'mrg32k3a' |
Combined multiple recursive generator | Yes | 2191 (263 streams of length 2127) |
'philox4x32_10' |
Philox 4x32 generator with 10 rounds | Yes | 2193 (264 streams of length 2129) |
'threefry4x64_20' |
Threefry 4x64 generator with 20 rounds | Yes | 2514 (2256 streams of length 2258) |
'shr3cong' |
Shift-register generator summed with linear congruential generator | No | 264 |
'swb2712' |
Modified subtract with borrow generator | No | 21492 |
'mcg16807' |
Multiplicative congruential generator | No | 231-2 |
rs = RandStream('mcg16807','Seed',n)的含义是定义了一个随机数流,采用‘mcg16807’伪随机数算法根据提供的种子n生成随机数。
rs =
mcg16807 random stream
Seed: 0
NormalTransform: Polar
RandStream.setGlobalStream(rs)将此设置状态告知全局随机数生成器,函数说明如下:
Set global random number stream
rng函数
rng函数的使用如下:
s = rng(seed)
在RandStream.setGlobalStream的函数帮助文档中,专门提到:
Note The rng function is a shorter alternative for many common uses of RandStream.setGlobalStream
说明,RandStream.setGlobalStream函数与rnd函数的功能是相同的。
但是两者也有区别。setdemorandstream采用的随机数生成算法为‘mcg16807’;而rng(‘default’)默认的是‘twister’,对应的算法为‘mt19937ar’。以下为rng函数帮助文档中的说明
| Value | Generator Name | Generator Keyword |
|---|---|---|
'twister' |
Mersenne Twister | mt19937ar |
'simdTwister' |
SIMD-oriented Fast Mersenne Twister | dsfmt19937 |
'combRecursive' |
Combined multiple recursive | mrg32k3a |
'multFibonacci' |
Multiplicative Lagged Fibonacci | mlfg6331_64 |
'philox' |
Philox 4x32 generator with 10 rounds | philox4x32_10 |
'threefry' |
Threefry 4x64 generator with 20 rounds | threefry4x64_20 |
在 MATLAB versions 4.0和5.0时代,选项如下。默认的也是‘mcg16807’。
| Value | Generator Name | Generator Keyword |
|---|---|---|
'v4' |
Legacy MATLAB version 4.0 generator | mcg16807 |
'v5uniform' |
Legacy MATLAB version 5.0 uniform generator | swb2712 |
'v5normal' |
Legacy MATLAB version 5.0 normal generator | shr3cong |
更多推荐
https://blog.csdn.net/bear_miao/article/details/121303759?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163704356716780261921772%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=163704356716780261921772&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-121303759.first_rank_v2_pc_rank_v29&utm_term=%E3%80%90MATLAB%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%B7%A5%E5%85%B7%E7%AE%B1%E3%80%91%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0--%E4%BD%93%E8%84%82%E4%BC%B0%E8%AE%A1Body&spm=1018.2226.3001.4187
所有评论(0)