带随机种子的javascript随机函数
随机种子的作用
我们有的需要随机函数带有随机种子,请考虑下面的应用场景
- 一个游戏中,一个游戏角色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随机函数相关推荐
- python随机密码生成以整数17为随机数种子_简述pythonpytorch 随机种子的实现
随机数广泛应用在科学研究, 但是计算机无法产生真正的随机数, 一般成为伪随机数. 它的产生过程: 给定一个随机种子(一个正整数), 根据随机算法和种子产生随机序列. 给定相同的随机种子, 计算机产生的 ...
- python随机种子的作用_简述pythonpytorch 随机种子的实现
随机数广泛应用在科学研究, 但是计算机无法产生真正的随机数, 一般成为伪随机数. 它的产生过程: 给定一个随机种子(一个正整数), 根据随机算法和种子产生随机序列. 给定相同的随机种子, 计算机产生的 ...
- 【小家java】Java中Random ThreadLocalRandom 设置随机种子获取随机数精讲
相关阅读 [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小 ...
- Pytorch(6)-设置随机种子,复现模型结果
设置随机种子,复现模型结果 1.Python本身的随机因素 2.numpy随机因素 3.pytorch随机因素 在很多情况下,我们希望能够复现实验的结果.为了消除程序中随机因素的影响,我们需要将随机数 ...
- 设置随机种子的函数: srand(种子);的重要性
游戏中,许多情况都是随即发生的.还有一些图案程序,例如屏保,也是随即运动的.这就需要用随机函数. 随机函数很简单,只有一个:rand() 该函数返回 0-32767 之间的一个整数.(不需要记住 32 ...
- 什么是随机种子(random seed)?
在用随机函数产生随机数的时候,我们总会设一个随机种子,那这个随机种子是什么,设随机种子有什么用呢? 我们知道计算机产生的随机数都是伪随机数,是利用算法产生的一系列数.因此,需要给函数一个随机值作为初始 ...
- 如何理解“伪随机”以及“随机种子”
"真随机"与"伪随机" 真随机:就是我们传统意义上理解的"随机",随机事件如今天是否下雨,抛硬币的正反面,家门口的十字路口今天发生车祸等等. ...
- 你真的会用Python随机数种子吗——Python生成随机数随机种子“失效”:Jupyter中不同cell中生成的随机数不一致
在Python中经常会生成很多随机数,例如Python自带的random库.科学计算库NumPy.深度学习框架PyTorch等都可以生成随机数. 同时为了固定生产的随机数.使得随机数生成可复现,很多时 ...
- 深度强化学习系列之(13): 深度强化学习实验中应该使用多少个随机种子?
How Many Random Seeds Should I Use? Statistical Power Analysis in (Deep) Reinforcement Learning Expe ...
最新文章
- Centos下源码安装git
- oracle和mysql存储汉字_mysql和oracle的一个汉字占几个字节
- netty系列之:中国加油
- mysql按月分列统计_实现mysql按月统计的教程
- 4、Orcal数据库dmp文件导入
- [你必须知道的.NET]第十七回:貌合神离:覆写和重载
- 深度学习图像超分辨率最新综述:从模型到应用
- JAVA中“:”的用法详解
- ORA-01033 ORACLE 正在初始化或关闭
- 升级ubuntu后EMACS 无法使用
- Exchange 混合部署—Office 365 注册及预览
- Atitit.软件按钮与仪表盘(13)--全文索引操作--db数据库子系统mssql2008
- 反常识—股票暴跌收益会更高
- 网站URL被劫持怎么办?
- js技巧收集(200多个)——2
- Git入门-github
- win7计算机时间显示错误,win7系统时间怎么调总是不对如何解决?win7系统时间总是不对解决方法...
- 计算机快捷键任务管理器,任务管理器快捷键,教您win10怎么打开任务管理器
- cocosbuilder创建工程
- 【书签】web自动化测试之selenium
热门文章
- 页面切换成黑白,公祭日,哀悼可用
- 最新OPPOR9S无人直播魅族版硬改相机刷机教程
- 浅析vue3PDF插件不显示文字
- ERP : 物料控制--相关需求
- pip install scrapy 报错:缺少Twisted 解决办法 :error: Microsoft Visual C++ 14.0 is required
- Vue-----Vue本地应用篇(2)
- 基于图像处理技术的印刷电路板缺陷检测技术分析
- windows上的时间管理软件
- 脚本录制软件python 按键精灵 tc_用动作脚本的方式介绍如何使用按键精灵的录制功能...
- NSLog与printf的使用差异