随机种子的作用

我们有的需要随机函数带有随机种子,请考虑下面的应用场景

  • 一个游戏中,一个游戏角色A的一次的攻击输出是50-100
  • 我们的游戏需要有录像功能,也就是支持replay

如果我们要记录一次A的攻击动作,怎么来记录呢?要不要记录具体的输出值呢?
一般来说,不记录 ,我们只会记录”A发动了一次攻击”
那么我们怎么保证还原这个随机的攻击输出值呢?
答案是使用随机种子


随机种子的要求

所以我们知道随机种子要让随机函数满足以下的条件

  • 一个随机种子下要有一个稳定的随机序列
  • 随机值要平均分布
  • 随机值在很多次生成中不碰撞(不会出现2个重复的值)

seedrandom

安装

npm install seedrandom

bower install seedrandom

传送门

github地址

测试代码

var seedrandom = require('seedrandom');// 平均分布
(function() {var test = function(seed) {// 设置随机种子Math.seedrandom(seed);var COUNT = 10000;var count = COUNT;var arr = [];while (count--) {arr.push(Math.random());}// 求和var sum = arr.reduce(function(mem, n) {return mem + n;}, 0);// 求平均值,期望是0.5左右var avg = sum / COUNT;// 所以...console.assert(Math.floor(avg * 10 + 0.5) / 10 == 0.5);};test('dino');test('pumandashi');test('jack');})();// 种子作用,确定了后续的随机值
(function() {var cal = function(seed){Math.seedrandom(seed);var arr=[];var count = 1000;while(count--){arr.push(Math.random());}return arr;};var arr1 = cal('hello world');var arr2 = cal('hello world');for (var i = arr1.length - 1; i >= 0; i--) {console.assert(arr1[i]===arr2[i]);}
})();// 一百万不重复
// 仅为测试,实则碰撞范围非常大,远远大于一百万
(function(){var count  =1000000;var dict = {};Math.seedrandom('dino');while(count--){var key = Math.random();if(dict[key]){console.log(count);console.assert(false);}else{dict[key]=true;}}
})();

带随机种子的javascript随机函数相关推荐

  1. python随机密码生成以整数17为随机数种子_简述pythonpytorch 随机种子的实现

    随机数广泛应用在科学研究, 但是计算机无法产生真正的随机数, 一般成为伪随机数. 它的产生过程: 给定一个随机种子(一个正整数), 根据随机算法和种子产生随机序列. 给定相同的随机种子, 计算机产生的 ...

  2. python随机种子的作用_简述pythonpytorch 随机种子的实现

    随机数广泛应用在科学研究, 但是计算机无法产生真正的随机数, 一般成为伪随机数. 它的产生过程: 给定一个随机种子(一个正整数), 根据随机算法和种子产生随机序列. 给定相同的随机种子, 计算机产生的 ...

  3. 【小家java】Java中Random ThreadLocalRandom 设置随机种子获取随机数精讲

    相关阅读 [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小 ...

  4. Pytorch(6)-设置随机种子,复现模型结果

    设置随机种子,复现模型结果 1.Python本身的随机因素 2.numpy随机因素 3.pytorch随机因素 在很多情况下,我们希望能够复现实验的结果.为了消除程序中随机因素的影响,我们需要将随机数 ...

  5. 设置随机种子的函数: srand(种子);的重要性

    游戏中,许多情况都是随即发生的.还有一些图案程序,例如屏保,也是随即运动的.这就需要用随机函数. 随机函数很简单,只有一个:rand() 该函数返回 0-32767 之间的一个整数.(不需要记住 32 ...

  6. 什么是随机种子(random seed)?

    在用随机函数产生随机数的时候,我们总会设一个随机种子,那这个随机种子是什么,设随机种子有什么用呢? 我们知道计算机产生的随机数都是伪随机数,是利用算法产生的一系列数.因此,需要给函数一个随机值作为初始 ...

  7. 如何理解“伪随机”以及“随机种子”

    "真随机"与"伪随机" 真随机:就是我们传统意义上理解的"随机",随机事件如今天是否下雨,抛硬币的正反面,家门口的十字路口今天发生车祸等等. ...

  8. 你真的会用Python随机数种子吗——Python生成随机数随机种子“失效”:Jupyter中不同cell中生成的随机数不一致

    在Python中经常会生成很多随机数,例如Python自带的random库.科学计算库NumPy.深度学习框架PyTorch等都可以生成随机数. 同时为了固定生产的随机数.使得随机数生成可复现,很多时 ...

  9. 深度强化学习系列之(13): 深度强化学习实验中应该使用多少个随机种子?

    How Many Random Seeds Should I Use? Statistical Power Analysis in (Deep) Reinforcement Learning Expe ...

最新文章

  1. Centos下源码安装git
  2. oracle和mysql存储汉字_mysql和oracle的一个汉字占几个字节
  3. netty系列之:中国加油
  4. mysql按月分列统计_实现mysql按月统计的教程
  5. 4、Orcal数据库dmp文件导入
  6. [你必须知道的.NET]第十七回:貌合神离:覆写和重载
  7. 深度学习图像超分辨率最新综述:从模型到应用
  8. JAVA中“:”的用法详解
  9. ORA-01033 ORACLE 正在初始化或关闭
  10. 升级ubuntu后EMACS 无法使用
  11. Exchange 混合部署—Office 365 注册及预览
  12. Atitit.软件按钮与仪表盘(13)--全文索引操作--db数据库子系统mssql2008
  13. 反常识—股票暴跌收益会更高
  14. 网站URL被劫持怎么办?
  15. js技巧收集(200多个)——2
  16. Git入门-github
  17. win7计算机时间显示错误,win7系统时间怎么调总是不对如何解决?win7系统时间总是不对解决方法...
  18. 计算机快捷键任务管理器,任务管理器快捷键,教您win10怎么打开任务管理器
  19. cocosbuilder创建工程
  20. 【书签】web自动化测试之selenium

热门文章

  1. 页面切换成黑白,公祭日,哀悼可用
  2. 最新OPPOR9S无人直播魅族版硬改相机刷机教程
  3. 浅析vue3PDF插件不显示文字
  4. ERP : 物料控制--相关需求
  5. pip install scrapy 报错:缺少Twisted 解决办法 :error: Microsoft Visual C++ 14.0 is required
  6. Vue-----Vue本地应用篇(2)
  7. 基于图像处理技术的印刷电路板缺陷检测技术分析
  8. windows上的时间管理软件
  9. 脚本录制软件python 按键精灵 tc_用动作脚本的方式介绍如何使用按键精灵的录制功能...
  10. NSLog与printf的使用差异