RandomGeneratorState
给出伪随机发生器的内部状态表示.
更多信息
- RandomGeneratorState[…] 包含生成器方法、方法参数以及(如果适用)完整的内部状态.
- 可以将 RandomGeneratorState 对象提供给 SeedRandom 以恢复其表示的状态.
- 某些方法具有的状态只在创建它的内核会话期间持续存在.
- 可以使用 RandomGeneratorState[…]["prop"] 提取下列属性:
-
"CrossSessionPersistent" 内部状态是否持续到当前内核会话之后 "Method" 方法名称 "StateHash" 状态的哈希为整数
范例
打开所有单元 关闭所有单元基本范例 (2)
$RandomGeneratorState使用 RandomGeneratorState 对象播种 BlockRandom:
BlockRandom[RandomReal[1, 5], RandomSeeding -> RandomGeneratorState[{"ExtendedCA", {80, 4, 0}},
{{NumericArray[{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, "UnsignedInteger64"],
0, 20, 20}, {RawArray["UnsignedInteger64", {8402553920425805686, 9934563772124633544,
13 ... 91188148046, 1589259630949761215,
10047890358231901395, 5864488619226313396, 17324547311914965925, 9027643525916071240,
2022314520320920354, 9575528438213517111}], 4, 0}}, NumericArray[{6155169294560358013, 0},
"UnsignedInteger64"]]]范围 (5)
state = SeedRandom[1234]RandomReal[1, 5]使用 RandomGeneratorState 对象重新播种:
SeedRandom[state]RandomReal[1, 5]state = SeedRandom[Method -> "MersenneTwister"]SeedRandom 将在同一内核会话中按预期工作:
SeedRandom[state]尝试在新的内核会话中还原这些状态将还原方法,但不会还原状态:
SeedRandom[RandomGeneratorState[{"MersenneTwister", {}}, None, NumericArray[{4857860914754488958,
140482937400640}, "UnsignedInteger64"]]]state = SeedRandom[Method -> "OpenSSL"]RandomReal[1, 5]SeedRandom 可以使用这些对方法进行设置,但是不会重现随机序列:
SeedRandom[state]RandomReal[1, 5]RandomGeneratorState[{"ExtendedCA", {80, 4, 0}},
{{RawArray["UnsignedInteger64", {1925, 13048886, 4, 5656827551150272186, 9312665952733943442,
10398778312959407752, 4671418463509876432, 6731002240056127455, 16113267302907396450,
57984 ... 87309568208765236, 15133492278866283308, 13933284397491862970,
1429261345893883317, 1452695175278016063, 6887258866072377979, 7731815659488748009,
9304348969792937342}], 4, 0}}, RawArray["UnsignedInteger64", {10598522656566661182, 0}]]["Method"]SeedRandom[Method -> "MersenneTwister"]%["CrossSessionPersistent"]应用 (1)
创建一个 BlockRandom 版本,如果无法恢复当前的随机状态,则拒绝运行:
SetAttributes[myBlockRandom, HoldFirst];
myBlockRandom[args__] := If[$RandomGeneratorState["StateHash"] =!= None,
BlockRandom[args],
"Aborting as the active method has no restorable state."]SeedRandom["Method" -> "OpenSSL"]由于无法播种此方法,因此 BlockRandom 无法提供可重现的结果:
SeedRandom[1234, "Method" -> "OpenSSL"]myBlockRandom[RandomReal[]]SeedRandom["Method" -> "ExtendedCA"]myBlockRandom[RandomReal[]]myBlockRandom[RandomReal[]]属性和关系 (5)
RandomGeneratorState[{"ExtendedCA", {80, 4, 0}},
{{NumericArray[{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, "UnsignedInteger64"],
0, 20, 20}, {RawArray["UnsignedInteger64", {8060441096411809293, 7434674114353368987,
12 ... 93602255759, 3581077303534282414,
2711167416813240053, 16847719750629492897, 767784795062009256, 11669799734052451846,
2695242276903763392, 18342349237190784571}], 4, 0}}, NumericArray[{8497996912419771049, 0},
"UnsignedInteger64"]]["StateHash"]如果状态哈希值已过期,则将其返回为 None:
RandomGeneratorState[{"MersenneTwister", {}}, None, NumericArray[{4857860914754488958,
140482937400640}, "UnsignedInteger64"]]["StateHash"]当前的随机发生器状态存储在 $RandomGeneratorState 中:
$RandomGeneratorStateSeedRandom 返回 RandomGeneratorState 对象:
SeedRandom[1234]SeedRandom[12345678]RandomGeneratorState 对象可用作 SeedRandom 及相关函数的种子:
state = RandomGeneratorState[{"ExtendedCA", {80, 4, 0}},
{{RawArray["UnsignedInteger64", {280665, 17811601035166618301, 1074886304135541815,
10839886105759978540, 5680751118638851723, 3721304837657701207, 12648882479676994813,
769196801773415 ... 125819794062, 1777030780391743728, 12894190655988600087,
3378906715729370330, 3226407513801960496, 11210220280600898473, 15920304109148374896,
15976351686747944429}], 4, 0}}, NumericArray[{5244220962157879211, 0}, "UnsignedInteger64"]];在 SeedRandom 中使用 state:
Table[SeedRandom[state];RandomInteger[100], {5}]用它来播种 BlockRandom 中的计算:
Table[BlockRandom[RandomInteger[100], RandomSeeding -> state], {5}]可能存在的问题 (1)
当将仅会话的 RandomGeneratorState 对象提供给 SeedRandom 时,将创建一个副本:
state1 = SeedRandom[1234, Method -> "MKL"]state2 = SeedRandom[state1]但是,两个 RandomGeneratorState 对象都产生相同的随机序列:
BlockRandom[RandomReal[1, 100], RandomSeeding -> state1] === BlockRandom[RandomReal[1, 100], RandomSeeding -> state2]文本
Wolfram Research (2020),RandomGeneratorState,Wolfram 语言函数,https://reference.wolfram.com/language/ref/RandomGeneratorState.html.
CMS
Wolfram 语言. 2020. "RandomGeneratorState." Wolfram 语言与系统参考资料中心. Wolfram Research. https://reference.wolfram.com/language/ref/RandomGeneratorState.html.
APA
Wolfram 语言. (2020). RandomGeneratorState. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/RandomGeneratorState.html 年
BibTeX
@misc{reference.wolfram_2026_randomgeneratorstate, author="Wolfram Research", title="{RandomGeneratorState}", year="2020", howpublished="\url{https://reference.wolfram.com/language/ref/RandomGeneratorState.html}", note=[Accessed: 18-June-2026]}
BibLaTeX
@online{reference.wolfram_2026_randomgeneratorstate, organization={Wolfram Research}, title={RandomGeneratorState}, year={2020}, url={https://reference.wolfram.com/language/ref/RandomGeneratorState.html}, note=[Accessed: 18-June-2026]}