智能优化算法(一):伪随机数的产生

文章目录

    • 1.伪随机数介绍
      • 1.1.伪随机产生的意义
      • 1.2.伪随机产生的过程
    • 2.产生U(0,1)的乘除同余法
      • 2.1.原始的乘同余法
      • 2.2.改进的乘同余法
    • 3.产生正态分布的伪随机数
    • 4.基于逆变法产生伪随机数

1.伪随机数介绍

1.1.伪随机产生的意义

  1.随机数的产生是进行随机优化的第一步也是最重要的一步,随机优化算法运行过程中需要大量随机数。
  2.传统手工方法:抽签,掷骰子,抽牌,摇号等,无法满足产生大量随机数的需求。
  3.伪随机数方法:利用计算机通过某些数学公式计算而产生,从数学意义上说不是随机的,但只要通过随机数的一系列统计检验,就可以作为随机数来使用。

1.2.伪随机产生的过程

   ∙ \bullet Step1:确定一个数学模型或某种规则。
   ∙ \bullet Step2:规定几个初始值。
   ∙ \bullet Step3:按照上述模型产生第一个随机数。
   ∙ \bullet Step4:用产生的上一个随机数作为新的初值,按照相同的步骤产生下一个随机数,重复之,得到一个伪随机数序列。

2.产生U(0,1)的乘除同余法

2.1.原始的乘同余法

  均匀的随机数的产生是生成其他随机数的基础,U(0,1)型随机数的产生主要是通过乘同余法进行设计生成,乘同余法的计算公式如下所示:
S k + 1 = ( A ⋅ S k )   m o d   ( M ) S_{k+1}=(A\cdot S_k)\mathrm{~mod~}(M) Sk+1=(ASk) mod (M)
在公式中A表示整数常数, mod表示取模运算, M表示较大的整数

通过数论理论能够证明:
  当 M = 2 L ( L > 2 ) M=2^{L}(L>2) M=2L(L>2)时,若 A = 4 k + 1 或者 A = 8 k + 3 A=4k+1或者A=8k+3 A=4k+1或者A=8k+3,且 S 0 S_{0} S0为奇数时,可以获得的最长随机数序列长度为 2 L − 2 2^{L-2} 2L2.
  算法实现如下所示:

%% 伪随机数的生成1--乘同余法
%乘同余法
%设定参数
clc;
S0=1;
A=3;
L=4;
M=2^L;
s=S0;
% 循环计算
fprintf('参数A=%d,M=%d,s0=%d的乘除同余法计算结果如下:\n',A,M,S0)
%得到的随机数循环周期为2^(L=2)个
for i =1:2^(L-2)
    s=mod(A*s,M);
    fprintf('第%d个随机数为:%d\n', i,s);
end
%如果想产生U(0,1)则需要将求出的s/M即可。

2.2.改进的乘同余法

  对于普通的乘同余法只能获得周期为 2 L − 2 2^{L-2} 2L2的随机数序列,这是远远不够的,所以我们通过添加一个与M互为质数的C来使得乘同余法获得周期为 2 L 2^{L} 2L的随机数数列,这种方法就被称作混合同余法,计算公式如下所示:
S k + 1 = ( A ⋅ S k + C )   m o d   ( M ) S_{k+1}=(A\cdot S_k+C)\mathrm{~mod~}(M) Sk+1=(ASk+C) mod (M)
  算法实现如下所示:

%% 伪随机数的生成2--混合乘同余法
%混合乘同余法
%设定参数
clc;
S0=1;
A=3;
L=4;
M=2^L;
s=S0;
C=3;
% 循环计算
fprintf('参数A=%d,M=%d,C=%d,S0=%d的乘除同余法计算结果如下:\n',A,M,C,S0)
%得到的随机数循环周期为2^(L)个
for i =1:2^(L)
    s=mod(A*s+C,M);
    fprintf('第%d个随机数为:%d\n', i,s);
end
%如果想产生U(0,1)则需要将求出的s/M即可。

3.产生正态分布的伪随机数

  产生正态分布的伪随机数的基本原理:若 Y 1 , Y 2 , Y 3 . . . . . . Y n Y_{1},Y_{2},Y_{3}......Y_{n} Y1,Y2,Y3......Yn 是独立同分布,均值和方差分别为 μ \mu μ σ \sigma σ ,且 n n n较大,则 X = Y 1 + Y 2 + Y 3 . . . . . . + Y n X=Y_{1}+Y_{2}+Y_{3}......+Y_{n} X=Y1+Y2+Y3......+Yn 近似于正态分布,且满足 μ x = μ 1 + μ 2 + μ 3 . . . . . + μ n = n μ \mu_{x}=\mu_{1}+\mu_{2}+\mu_{3}.....+\mu_{n}=n\mu μx=μ1+μ2+μ3.....+μn=nμ σ x 2 = σ 1 2 + σ 2 2 + σ 3 2 . . . . . + σ n 2 = n σ 2 \sigma_{x}^{2}=\sigma_{1}^{2}+\sigma_{2}^{2}+\sigma_{3}^{2}.....+\sigma_{n}^{2}=n\sigma_{}^{2} σx2=σ12+σ22+σ32.....+σn2=nσ2,即 x ∈ N ( n μ , n σ 2 ) x\in N( n \mu,n\sigma^{2}) xN(nμ,nσ2).
  于是正态分布可以由多个U(0,1)来近似。
  对于 Y ∈ U ( 0 , 1 ) Y\in U( 0,1) YU(0,1) 来说,对于Y的均值有:
μ y = 1 2 \mu_y=\frac12 μy=21
  对于Y的方差,计算如下所示:
σ y 2 = E ( Y 2 ) − ( E ( Y ) ) 2 = ∫ − ∞ + ∞ f ( y ) d y − ( 1 2 ) 2 = ∫ 0 1 y 2 d y − 1 4 = y 3 3 ∣ 1 0 − 1 4 = 1 12 \begin{aligned}\sigma_y^2&=E\color{r}{\left(Y^2\right)-\left(E(Y)\right)^2=\int_{-\infty}^{+\infty}f(y)dy-\left(\frac12\right)^2\\}=\int_0^1y^2dy-\frac14=\frac{y^3}3|\frac10-\frac14=\frac1{12}\end{aligned} σy2=E(Y2)(E(Y))2=+f(y)dy(21)2=01y2dy41=3y30141=121
  令 z = x − μ x σ x z=\frac{x-\mu_x}{\sigma_x} z=σxxμx,则 z ∈ N ( 0 , 1 ) z\in N(0,1) zN(0,1),则z的公式如下所所示:
z = ∑ y i − μ x σ x = ∑ y i − n μ y n σ y 2 = ∑ y i − n 2 n / 12 z=\frac{\sum y_i-\mu_x}{\sigma_x}=\frac{\sum y_i-n\mu_y}{\sqrt{n\sigma_y^2}}=\frac{\sum y_i-\frac n2}{\sqrt{n/_{12}}} z=σxyiμx=nσy2 yinμy=n/12 yi2n
  一般取n=12,则z的计算公式为:
z = ∑ i = 1 12 y i − 6 ∈ N ( 0 , 1 ) z=\sum_{i=1}^{12}y_i-6\in N(0,1) z=i=112yi6N(0,1)
  若想产生服从一般正态分布 N ( μ , σ 2 ) N(\mu,\sigma^{2}) N(μ,σ2) 的随机数x ,则只需产生 z ∈ N ( 0 , 1 ) z\in N(0,1) zN(0,1) ,再按公式 x = μ + σ z x=\mu+\sigma z x=μ+σz,即可获得 x ∈ N ( μ , σ 2 ) x\in N(\mu,\sigma^2) xN(μ,σ2).

  算法实现如下所示(取 n = 1200 n=1200 n=1200计算结果好):

%% 伪随机数的生成3--正态分布方法
%正态分布方法
%设定参数
clc
%生成12个U(0,1)分布的随机数就直接调用包来解决
N=1200;
for i=1:1000
    Y=rand(N,1);
    z=(sum(Y)-N*0.5)/sqrt(N/12);
    fprintf('第%d个属于N(0,1)的随机数为:%.2f\n',i,z)
end

4.基于逆变法产生伪随机数

  逆变法产生伪随机数的基本原理是设Y是(0,1)上均匀分布随机变量,F为任意一个连续分布函数,定义随机变量 X = F − 1 ( Y ) X=F^{-1}(Y) X=F1(Y),则 X具有分布函数F。
  证明如下:
F X ( a ) = P { X ≤ a } = P { F − 1   ( Y ) ≤ a } = P { Y ≤ F ( a ) } \begin{aligned}F_X(a)&=P\{X\leq a\}=P\{F^{-1}~(Y)\leq a\}=P\{Y\leq F(a)\}\end{aligned} FX(a)=P{Xa}=P{F1 (Y)a}=P{YF(a)}
  这里 Y ∈ U ( 0 , 1 ) Y\in U( 0,1) YU(0,1) ,有
f ( y ) = 1 , F ( y ) = P { Y ≤ y } = ∫ − ∞ y f ( y ) d y = y f(y)=1,\quad F(y)=P\{Y\leq y\}=\int_{-\infty}^yf(y)dy=y f(y)=1,F(y)=P{Yy}=yf(y)dy=y
  最后能够推出:
F X ( a ) = F ( a ) F_X(a)=F(a) FX(a)=F(a)
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/140595.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ final

参考:https://blog.csdn.net/qq_45358642/article/details/124232686#t2 不想让类继承 方式一:将类的构造函数设置为私有 子类不能调用父类构造函数初始化来实例化对象,所以不能继承 缺点:我们自己也不能够实例化出对象 class A { privat…

跨境电商商城源码:打造全球化的多语言、多货币、多商户平台

随着全球电子商务的快速发展,越来越多的企业希望在跨境电子商务领域取得突破。然而,要实现这一目标,企业需要解决语言、货币和商户等多个方面的挑战。本文将探讨如何使用跨境电商商城源码打造全球化的多语言、多货币、多商户平台。 一、多语言…

扫码连接WiFi微信小程序项目(带源码下载)

微信小程序扫码连wifi(共享wifi)(WiFi地推项目),2023年非常火爆全网的项目 下载: 项目源码 效果图如下 一 扫码连接WiFi如何收益 用户扫码连接WiFi时会有4-15秒的广告弹框,有效时间看完后微信会发送给项目负责人0.5-1元的广告费 (如给1元) 项目负责人(团长)(收益2…

【08】DestinationRule 高级配置功能

6.2 loadbalancer 定义demoapp v1.0和demoapp v1.1版本和subset的dr规则。参考weight中定义; 定义loadbalance在DestinationRule上定义规则 apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata:name: demoapp spec:host: demoapptrafficPoli…

火山引擎云原生存储加速实践

在火山引擎相关的业务中绝大部分的机器学习和数据湖的算力都运行在云原生 K8s 平台上。云原生架构下存算分离和弹性伸缩的计算场景,极大的推动了存储加速这个领域的发展,目前业界也衍生出了多种存储加速服务。但是面对计算和客户场景的多样性&#xff0c…

1 Supervised Machine Learning Regression and Classification

文章目录 Week1OverViewSupervised LearningUnsupervised LearningLinear Regression ModelCost functionGradient Descent Week2Muliple FeatureVectorizationGradient Descent for Multiple RegressionFeature ScalingGradient DescentFeature EngineeringPolynomial Regress…

C# 使用 RSA 加密算法生成证书签名产生“The system cannot find the file specified”异常

使用 C# 中 RSA(System.Security.Cryptography.RSA) 加密算法生成证书签名进行身份验证,在 VS2022 开发工具本地运行应用程序一切正常。 但将应用程序部署到远程服务器(如:Azure App Services)&#xff0c…

【数据结构】——单链表(增删查改)

目录 前言: 一:单链表的特点 ​编辑 二:单链表实现 单链表定义 2.1申请节点(初始化) 2.2单链表尾插 ​编辑 2.3单链表打印 2.4单链表头插 2.5单链表尾删 2.6单链表头删 2.7单链表查找 2.8在目标位置后面插入…

正点原子嵌入式linux驱动开发——Linux ADC驱动

在之前的笔记中,学习了如何给ICM20608编写IIO驱动,ICM20608本质就是ADC,因此纯粹的ADC驱动也是IIO驱动框架的。本章就学习一下如何使用STM32MP1内部的ADC,并且在学习巩固一下IIO驱动。 ADC简介 ADC ADC,Analog to D…

做一个springboot用户信息模块

目录 用户信息部分 1、获取用户详细信息 前言 代码分析 代码实现 测试 2、更新用户信息 前言 代码实现 测试 3、更新用户头像 前言 代码实现 测试 4、更新用户密码 前言 代码实现 测试 用户信息部分 1、获取用户详细信息 前言 承接上一篇博客登录注册功能…

找工作去哪个网站比较好

吉鹿力招聘网是一个专注于互联网岗位求职招聘的网站,提供海量的互联网人才储备。它主要覆盖了互联网类招聘,包括技术、产品、设计、运营、市场、销售等。吉鹿力招聘网的特点是用户量大,需求旺盛。如果你希望找工作,吉鹿力招聘网是…

[HCTF 2018]admin 1(四种解法!)

题目环境: 有登录和注册两个按钮 先注册一个admin用户 注册admin用户 显示admin用户已经被注册了 好,这就简单了,admin用户存在,但是不清楚admin用户的密码 尝试以下弱口令 第一种解法:密码爆破-尝试弱口令 进去login登…

基于selenium的pyse自动化测试框架

介绍: pyse基于selenium(webdriver)进行了简单的二次封装,比selenium所提供的方法操作更简洁。 特点: 默认使用CSS定位,同时支持多种定位方法(id\name\class\link_text\xpath\css&#xff09…

Python+unittest+requests接口自动化测试框架搭建 完整的框架搭建过程

首先配置好开发环境,下载安装Python并下载安装pycharm,在pycharm中创建项目功能目录。如果不会的可以百度Google一下,该内容网上的讲解还是比较多比较全的! 大家可以先简单了解下该项目的目录结构介绍,后面会针对每个文…

第 19 章 网络编程

网络可以使不同物理位置上的计算机达到资源共享和通信的目的,在Java中也提供了专门的网络开发程序包--java.net,以方便开发者进行网络程序的开发,本章将讲解TCP与UDP程序开发 19.1 网络编程简介 将地理位置不同的、具有独立功能的多台计算机…

uview的u-calendar日历组件,当设置了 minDate配置项后,会导致第一次打开日历弹窗,不会精准的滚动到选中的日期(设置了默认日期都没用)

发现需要给month.vue文件里的getMonth方法加一个延时器,猜测是因为设置最小日期后,日历没渲染完毕的时候就已经开始获取节点信息了

C# Onnx Yolov8 Detect 印章 指纹捺印 检测

应用场景 检测文件中的印章和指纹捺印,用于判断文件是否合规(是否盖章,是否按印) 效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.…

Makefile应用

Makefile实例 在c.c里面&#xff0c;包含一个头文件c.h&#xff0c;在c.h里面定义一个宏&#xff0c;把这个宏打印出来。 c.c&#xff1a; #include <stdio.h> #include <c.h>void func_c() {printf("This is C %d\n", C); }c.h #define C 1然后上传…

跨国企业如何选择安全靠谱的跨国传输文件软件?

随着全球化的不断发展&#xff0c;跨国企业之间的合作变得越来越频繁。而在这种合作中&#xff0c;如何安全、可靠地将文件传输给合作伙伴或客户&#xff0c;成为了跨国企业必须面对的问题。 然而&#xff0c;跨国文件传输并不是一件容易的事情&#xff0c;由于网络物理条件的…

Mysql-库的操作

1.创建数据库 CREATE DATABASE [IF NOT EXISTS] name name后可以加 CHARACTER SET 或者是 charsetname COLLATE collation_name &#xff08;mysql数据库不区分大小写&#xff09; 说明&#xff1a; name表示想创建的库的名字大写的表示关键字 [] 是可选项 CHARACTER SET…