HOME 首页
SERVICE 服务产品
XINMEITI 新媒体代运营
CASE 服务案例
NEWS 热点资讯
ABOUT 关于我们
CONTACT 联系我们
创意岭
让品牌有温度、有情感
专注品牌策划15年

    伪随机算法有哪些

    发布时间:2023-04-08 09:14:56     稿源: 创意岭    阅读: 64        

    大家好!今天让创意岭的小编来大家介绍下关于伪随机算法有哪些的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。

    开始之前先推荐一个非常厉害的Ai人工智能工具,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等

    只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端

    官网:https://ai.de1919.com

    创意岭作为行业内优秀的企业,服务客户遍布全球各地,如需了解SEO相关业务请拨打电话175-8598-2043,或添加微信:1454722008

    本文目录:

    伪随机算法有哪些

    一、『伪随机』伪随机的概念

    计算机里的确的确没有“真随机”,因为计算机是由0和1组成,不存在不确定的因素。但是程序经常会用到随机的功能,因此出现了“伪随机”,这是相对“真随机”的一个概念。

    “真随机”就是我们现实世界中的随机,每次发生都是独立事件,概率不会相互影响。

    比如一件事发生的概率是20%,不管是否发生,那么下次再发生的概率依然是20%。

    随机数生成器 是一个函数y=f(x),而 随机种子 则是变量x。所以一旦x和f(x)确定了,那么产生的随机数y也就确定。

    “伪随机”正是通过,在 随机数生成器 中传入的 随机种子 得到结果产生随机数。之所以为“伪随机”,是因为能够出现的结果以及次序其实已经在 随机数生成器 这个函数中确定了,如果f(x)一定,而程序通过输入x的变化,而产生不同结果,达到随机的效果。 “伪”指的是有规律,而不是“假”。

    比如3次输入的x值相同,那么得到的3次结果也将相同。但是如果将当前时间节点(时钟)当做输入x,x则必然不同,则达到了随机的效果。

    在游戏中,经常有"暴击率"的游戏设定,但是出现连续暴击而改变战局对于电子竞技游戏来说并不是好事,因此经典游戏war3,dota就对暴击率进行了干涉,首先设定一个暴击率初始值x%,之后进行正常判定,如果未发生暴击,则通过算法,提高x%的值。那么下次暴击率就会提高。如此循环,直到出现暴击,然后重置暴击率为初始x%。

    虽然过程并不独立,但平均总体算下来,是符合该角色暴击率的。

    在游戏中,经常有抽卡玩法,比如YYS,FGO,王者荣耀等。

    假如SSR出率为1%,那么1个玩家抽100次没有SSR的概率是99%,那么100个玩家各抽100次,0.99^100=0.366,将近37%的人没有SSR。这就非常影响游戏体验了,超过1/3的玩家都没有获得强力卡牌。这会导致这部分玩家一气之下卸载游戏甚至在网络上攻击游戏,对游戏厂商非常不利。为了避免这种情况,很多游戏推出了保底机制,比如当你前99次都没有抽到某爆率1%角色时,第100次必定会出,这就是保底机制。

    现在的音乐播放器都有“随机播放”功能,这个功能的实现并不是在你的歌单中随机抽取歌曲播放,而是将你歌单中的歌曲重新打乱排序生成一个新歌单(用户看不到),再顺序播放这个生成的歌单。

    所以即使你使用随机播放,当你从固定的歌曲选择“上一首”时,每次都是同一首歌。

    二、听说计算机产生的随机数是伪随机数,公式有谁知道。

    用S作随机模拟计算

    作为统计工作者,我们除了可以用S迅速实现新的统计方法,还可以用S进行随机模拟。随机模拟可以验证我们的算法、比较不同算法的的优缺点、发现改进统计方法的方向,是进行统计研究的最有力的计算工具之一。

    随机模拟最基本的需要是产生伪随机数,S中已提供了大多数常用分布的伪随机数函数,可以返回一个伪随机数序列向量。这些伪随机数函数以字母r开头,比如rnorm()是正态伪随机数函数,runif()是均匀分布伪随机数函数,其第一个自变量是伪随机数序列长度n。关于这些函数可以参见第14节以及系统帮助文件。下例产生1000个标准正态伪随机数:

    >

    y

    <-

    rnorm(1000)

    这些伪随机数函数也可以指定与分布有关的参数,比如下例产生1000个均值为150、标准差为100的正态伪随机数:

    >

    y

    <-

    rnorm(1000,

    mean=150,

    sd=100)

    产生伪随机数序列是不重复的,实际上,S在产生伪随机数时从一个种子出发,不断迭代更新种子,所以产生若干随机数后内部的随机数种子就已经改变了。有时我们需要模拟结果是可重复的,这只要我们保存当前的随机数种子,然后在每次产生伪随机数序列之前把随机数种子置为保存值即可:

    >

    the.seed

    <-

    .Random.seed

    >

    ……………

    >

    .Random.seed

    <-

    the.seed

    >

    y

    <-

    rnorm(1000)

    作为例子,我们来产生服从一个简单的线性回归的数据。

    #

    简单线性回归的模拟

    lm.simu

    <-

    function(n){

    #

    先生成自变量。假设自变量x的取值范围在150到180之间,大致服从正态分布。

    x

    <-

    rnorm(n,

    mean=165,

    sd=7.5)

    #

    再生成模型误差。假设服从N(0,

    1.2)分布

    eps

    <-

    rnorm(n,

    0,

    1.2)

    #

    用模型生成因变量

    y

    <-

    0.8

    *

    x

    +

    eps

    return(data.frame(y,x))

    }

    S没有提供多元随机变量的模拟程序,这里给出一个进行三元正态随机变量模拟的例子。假设要三元正态随机向量

    n个独立观测,可以先产生n个服从三元标准正态分布的观测,放在一个

    n行3列的矩阵中:

    U

    <-

    matrix(rnorm(3*n),

    ncol=3,

    byrow=T)

    可以认为矩阵U的每一行是一个标准的三元正态分布的观测。设矩阵

    的Choleski分解为

    A为上三角矩阵,若随机向量

    ,则

    。因此,

    作为一个三行

    n列的矩阵每一行都是服从

    分布的,且各行之间独立。经过转置,产生的

    X

    X

    <-

    matrix(rep(mu,n),

    ncol=3,

    byrow=T)

    +

    U

    %*%

    A

    是一个

    n行三列的矩阵。

    有时模拟需要的计算量很大,多的时候甚至要计算几天的时间。对于这种问题我们要善于把问题拆分成可以单独计算的小问题,然后单独计算每个小问题,把结果保存在S对象中或文本文件中,最后综合保存的结果得到最终结果。

    如果某一个问题需要的计算时间比较长,我们在编程时可以采用以下的技巧:每隔一定时间就显示一下任务的进度,以免计算已经出错或进入死循环还不知道;应该把中间结果每隔一段时间就记录到一个文本文件中(cat()函数可以带一个file参数和append参数,对这种记录方法提供了支持),如果需要中断程序,中间结果可能是有用的,有些情况下还可以根据记录的中间结果从程序中断的地方继续执行。

    参考文献:

    http://www.math.pku.edu.cn/teachers/lidf/docs/statsoft/html/s/13.html

    三、C++ 中的伪随机数,例如rand(),是怎么生成的?

    #include<math.h>

    #define RAND_MAX 32767

    unsigned int g_nSeed;//随机数种子

    void srand(unsigned int seed)//初始化随机数种子

    {

    g_nSeed = seed;

    }

    int rand()

    {

    int a, c;

    a = sqrt(RAND_MAX) + 1;

    c = sqrt(3)*RAND_MAX;

    g_nSeed = (g_nSeed*a+c)%RAND_MAX;//一种求随机数种子的算法,具体算法不一定是这样,可以有很多种,但大概原理就是这样

    return g_nSeed;

    }

    四、伪随机和真随机区别

    计算机不会产生绝对随机的随机数,计算机只能产生“伪随机数”。其实绝对随机的随机数只是一种理想的随机数,即使计算机怎样发展,它也不会产生一串绝对随机的随机数。计算机只能生成相对的随机数,即伪随机数。

    随机数三个特性

    1、随机性:完全乱序;

    2、不可推测性:从已有的数,无法推测出下一个数;

    3、不可重复性:随机数之间不重复。

    真随机数是伴随着物理实验的,比如:抛硬币、掷骰子、电子元件的噪音、核裂变等,它的结果符合三大特性的。

    伪随机数

    伪随机数是通过一定算法,获得一个随机的值,并不是真的随机。伪随机又分为强伪随机数和弱伪随机数。强伪随机数:更加贴近真随机数,满足特性的。随机性和不可推测性,难以预测。弱伪随机数:满足随机性,可以预测。

    以上就是关于伪随机算法有哪些相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。


    推荐阅读:

    伪随机算法有哪些

    中国最长漂流排行榜(中国最长的漂流多长时间)

    产品设计的四个阶段(产品设计的四个阶段分别是)