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

文章目录

    • 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:1000Y=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)
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt QTableWidget表格的宽度

本文归属于 Qt实验室-CSDN博客 系列文章 默认值 QTableWIdget的表格宽度默认是一个给定值,可以手动调整每列的宽度,也不填满父窗口 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {this->resize(800,600);QStringList contents{&q…

2023.11-9 hive数据仓库,概念,架构,元数据管理模式

目录 0.数据仓库和数据库 数据仓库和数据库的区别 数据仓库基础三层架构 一.HDFS、HBase、Hive的区别 二.大数据相关软件 三. Hive 的优缺点 1)优点 2)缺点 四. Hive 和数据库比较 1)查询语言 2)数据更新 3)…

《视觉SLAM十四讲》-- 相机与图像

04 相机与图像 4.1 相机模型 4.1.1 针孔相机模型 针孔模型描述了一束光线通过针孔后,在针孔背面投影成像的关系(类似小孔成像原理)。 根据相似三角关系 Z f − X X ′ − Y Y ′ (3-1) \frac{Z}{f}-\frac{X}{X^{\prime}}-\frac{Y}{Y^{\p…

基于DBO算法的WSN节点覆盖优化

先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年…

【EI会议征稿】第三届区块链、信息技术与智慧金融国际学术会议 (ICBIS2024)

第三届区块链、信息技术与智慧金融国际学术会议 (ICBIS2024) The 3rd International Academic Conference on Blockchain, Information Technology and Smart Finance 第三届区块链、信息技术与智慧金融国际学术会议 (ICBIS2024) 将于2024年2月23-25日在马来西亚举行。本次会…

IP地址如何实现定位功能?

网络犯罪、保护网络安全的重要手段。近日,一则新闻引起了广大网友的关注:IP也能实现定位功能,这是如何做到的呢?本文将对此进行深入解析。 首先,我们需要了解什么是IP地址定位。IP地址定位是通过IP地址确定网络用户所在…

计算机视觉:使用opencv实现银行卡号识别

1 概述 1.1 opencv介绍 OpenCV是Open Source Computer Vision Library(开源计算机视觉库)的简称,由Intel公司在1999年提出建立,现在由Willow Garage提供运行支持,它是一个高度开源发行的计算机视觉库,可以…

我国陆地遥感卫星发展现状与展望

一、引言 从20世纪90年代末至今,我国陆地遥感卫星事业历经二十多年,实现了从无到有、从小到大、从弱到强的跨越发展。随着高分辨率对地观测系统重大专项(高分专项)、《陆海观测卫星业务发展规划(2011—2020年&#xff…

vue3响应式api

响应式api——compositon api setup: 不要再想this问题执行是在beforeCreated之前 beforeCreated:也就是创建了一个实例 created:挂载了数据 通过形参props接收,只读 以后所有代码都写到setup中 判断是否只读:isReadon…

【04】Istio的pilot流量分发机制

4.1 Pilot配置分发机制 Pilot负责网格数据平面相关配置信息的获取,生成,和分发,它通过Service Registry获取网格配置信息并将其转换为XDS接口的标准数据格式,而后经gRPC分发至相关的Envoy; Service Registry:服务注册表…

EXIT(1)

EXTI介绍 EXTI是片上外设 NVIC是cpu内的外设 回忆起之前的GPIO和AFIO 我们是如何检测按键按下的 我们是一直用while循环读取IDR寄存器的对应位置的值 一直检测判断按键是否被按下 那么是否有第二种方式检测按键是否被按下了呢? 通过EXTI 当EXTI检测到按键的电平发生…

【C++】【Opencv】minMaxLoc()函数详解和示例

minMaxLoc()函数 是 OpenCV 库中的一个函数,用于找到一个多维数组中的最小值和最大值,以及它们的位置。这个函数对于处理图像和数组非常有用。本文通过参数和示例详解,帮助大家理解和使用该函数。 参数详解 函数原型…

将 ONLYOFFICE 文档编辑器与 С# 群件平台集成

在本文中,我们会向您展示 ONLYOFFICE 文档编辑器与其自有的协作平台集成。 ONLYOFFICE 是一款开源办公套件,包括文本文档、电子表格和演示文稿编辑器。这款套件支持用户通过文档编辑组件扩展第三方 web 应用的功能,可直接在应用的界面中使用。…

搭建 Makefile+OpenOCD+CMSIS-DAP+Vscode arm-none-eabi-gcc 工程模板

Embedded-GCC-Template 第三方资源集合 STM32F407-GCC-Template Arm-none-eabi-gcc MakefileOpenOCDCMSIS-DAPVscode工程模板 一、本次环境搭建所用的软硬件 1)Windows or Linux (本文以Windows为主) 2)JLink、Daplink、Wch-Link烧录器 3&#xff…

MySQL join原理及优化

MySQL的JOIN原理是基于索引和算法的。在执行JOIN查询时,MySQL会根据连接字段上的索引来查找匹配的记录。 这种算法在链接查询的时候,驱动表会根据关联字段的索引进行查找,当在索引上找到了符合的值,再回表进行查询,也就…

C#中的扩展方法---Extension

C#中扩展方法是C# 3.0/.NET 3.x 新增特性,能够实现向现有类型中“添加”方法,以下主要介绍C#中扩展方法的声明及使用。 1、扩展方法的声明 扩展方法使能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型…

Flink在汽车行业的应用【面试加分系列】

很多同学问我为什么要发这些大数据前沿汇报? 一方面是自己学习完后觉得非常好,然后总结发出来方便大家阅读;另外一方面,看这些汇报对你的面试帮助会很大,特别是面试前可以看看即将面试公司在大数据前沿的发展动向&…

OmniFocus Pro for Mac(GTD时间管理软件) OmniFocus Mac版

OmniFocus Pro 3 for Mac 中文激活版是一款功能强大且灵活的 GTD 时间管理工具,可为您提供无干扰的环境,帮助您可以轻松地从邮件,消息,Safari 和任何其他第三方应用程序中安排任务,编写备注和剪辑信息。您可以快速轻松…

计算机网络:概述

0 学时安排及讨论题目 0.1讨论题目: CSMA/CD协议交换机基本原理ARP协议及其安全子网划分IP分片路由选择算法网络地址转换NATTCP连接建立和释放再论网络体系结构 0.2 本节主要内容 计算机网络在信息时代中的作用 互联网概述 互联网的组成 计算机网络在我国的发展 …

键盘打字盲打练习系列之认识键盘——0

一.欢迎来到我的酒馆 盲打,yyds! 目录 一.欢迎来到我的酒馆二.键盘规格三.键盘分区 二.键盘规格 经常看视频,看到别人在键盘上一通干净利索的操作,就打出想要的文字。心里突然来一句:卧槽,打字贼快啊&#…