基于量子遗传算法的函数寻优算法—MATLAB实现
文章目录
- 一、算法概述
- 二、算法讲解
- 2.1 量子比特编码
- 2.2 量子门更新
- 三、MATLAB实现
- 3.1 案例描述
- 3.2 算法实现
- 3.2.1算法流程:
- 3.2.2算法实现:
- 3.2.3MATLAB实现:
- 3.2.3.1种群初始化
- 3.2.3.2测量函数
- 3.2.3.3量子旋转门函数
- 3.2.3.4适应度函数
- 3.2.3.5量子遗传主函数
- 3.2结果分析
一、算法概述
量子遗传算法(quantum genetic algorithm,QGA)是量子计算与遗传算法相结合的产物,是一种新发展起来的概率进化算法。遗传算法是处理复杂优化问题的一种方法,其基本思想是模拟生物进化的优胜劣汰规则与染色体的交换机制,通过选择、交叉、变异三种基本操作寻找最优个体。由于GA不受问题性质、优化准则形式等因素的限制,仅用目标函数在概率引导下进行全局自适应搜索,能够处理传统优化方法难以解决的复杂问题,具有极高鲁棒性和广泛适用性,因而得到了广泛应用并成为跨学科研究的热点。但是,若选择、交叉、变异的方式不当,GA会表现出选代次数多、收敛速度慢、易陷入局部极值的现象。
量子计算中采用量子态作为基本的信息单元,利用量子态的叠加、纠缠和干涉等特性,通过量子并行计算可以解决经典计算中的NP问题NP问题。1994年Shor提出第一个量子算法,求解了大数质因子分解的经典计算难题,该算法可用于公开密钥系统RSA;1996年Grover提出随机数据库搜索的量子算法,在量子计算机上可实现对未加整理的数据库 N \sqrt{N} N 量级的加速搜索。量子计算正以其独特的计算性能迅速成为研究的热点。
量子遗传算法就是基于量子计算原理的一种遗传算法。将量子的态矢量表达引人遗传编码,利用量子逻辑门实现染色体的演化,达到了比常规遗传算法更好的效果。
量子遗传算法建立在量子的态矢量表示的基础之上,将量子比特的几率幅表示应用于染色体的编码,使得一条染色体可以表达多个态的叠加,并利用量子逻辑门实现染色体的更新操作,从而实现了目标的优化求解。
二、算法讲解
2.1 量子比特编码
在量子计算机中,充当信息存储单元的物理介质是一个双态量子系统,称为量子比特。量子比特与经典位不同就在于它可以同时处在两个量子态的叠加态中,比如:
∣ ϕ ) = α ∣ 0 ) β ∣ 1 ) | \phi ) = \alpha |0) \beta |1) ∣ϕ)=α∣0)β∣1)
( α , β ) (\alpha,\beta) (α,β)是两个幅常数,满足
∣ α ∣ 2 + ∣ β ∣ 2 = 1 |\alpha|^2 + |\beta|^2 = 1 ∣α∣2+∣β∣2=1
其中,|0)和|1)分别表示自旋向下和自旋向上态。所以一个量子比特可同时包含态|0)和|1)的信息。
在量子遗传算法中,采用量子比特存储和表达一个基因。该基因可以为"0”态或"1"态,或它们的任意叠加态。即该基因所表达的不再是某一确定的信息,而是包含所有可能的信息,对该基因的任一操作也会同时作用于所有可能的信息。
采用量子比特编码使得一个染色体可以同时表达多个态的叠加,使得量子遗传算法比经典遗传算法拥有更好的多样性特征。采用量子比特编码也可以获得较好的收敛性,随着 ∣ α ∣ 2 |\alpha|^2 ∣α∣2或 ∣ β ∣ 2 |\beta|^2 ∣β∣2趋于0或1,量子比特编码的染色体将收敛到一个单一态。
2.2 量子门更新
量子门作为演化操作的执行机构,可根据具体问题进行选择,目前已有的量子门有很多种,根据量子遗传算法的计算特点,选择量子旋转门较为合适。量子旋转门的调整操作为:
U ( θ i ) = [ cos ( θ i ) − sin ( θ i ) sin ( θ i ) c o s ( θ i ) ] (2.2.1) U(\theta_i) = \begin{bmatrix} \cos(\theta_i)&-\sin(\theta_i)\tag{2.2.1}\\ \sin(\theta_i)&cos(\theta_i)\\ \end{bmatrix} U(θi)=[cos(θi)sin(θi)−sin(θi)cos(θi)](2.2.1)
其更新过程如下:
[ α i ′ β i ′ ] = U ( θ i ) [ α i β i ] = [ cos ( θ i ) − sin ( θ i ) sin ( θ i ) c o s ( θ i ) ] [ α i β i ] (2.2.2) \begin{bmatrix} \alpha_i'\\ \beta_i' \end{bmatrix} =U(\theta_i) \begin{bmatrix} \alpha_i\\ \beta_i \end{bmatrix} =\begin{bmatrix} \cos(\theta_i)&-\sin(\theta_i)\\ \sin(\theta_i)&cos(\theta_i)\\ \end{bmatrix} \begin{bmatrix} \alpha_i\tag{2.2.2}\\ \beta_i \end{bmatrix} [αi′βi′]=U(θi)[αiβi]=[cos(θi)sin(θi)−sin(θi)cos(θi)][αiβi](2.2.2)
其中, ( α i , β i ) T (\alpha_i,\beta_i)^T (αi,βi)T和 ( α i ′ , β i ′ ) T (\alpha_i',\beta_i')^T (αi′,βi′)T代表染色体第 i i i个量子比特旋转门更新前后的概率幅; θ i \theta_i θi为旋转角,它的大小和符号由事先设计的调整策略确定。
由(2.2.2)可以得到 α i ′ 和 β i ′ \alpha_i'和\beta_i' αi′和βi′分别为:
{ α i ′ = α i cos ( θ i ) − β i sin ( θ i ) β i ′ = α i sin ( θ i ) + β i cos ( θ i ) \begin{cases} \alpha_i' = \alpha_i\cos(\theta_i)-\beta_i\sin(\theta_i)\\ \beta_i' = \alpha_i\sin(\theta_i)+\beta_i\cos(\theta_i)\\ \end{cases} {αi′=αicos(θi)−βisin(θi)βi′=αisin(θi)+βicos(θi)
所以
∣ α i ′ ∣ 2 + ∣ β i ′ ∣ 2 = [ α i cos ( θ i ) − β i sin ( θ i ) ] 2 + [ α i sin ( θ i ) + β i cos ( θ i ) ] 2 = ∣ α i ∣ 2 + ∣ β i ∣ 2 = 1 |\alpha_i'|^2 +|\beta_i'|^2 = [ \alpha_i\cos(\theta_i)-\beta_i\sin(\theta_i)]^2 + [ \alpha_i\sin(\theta_i)+\beta_i\cos(\theta_i)]^2=|\alpha_i|^2 +|\beta_i|^2 =1 ∣αi′∣2+∣βi′∣2=[αicos(θi)−βisin(θi)]2+[αisin(θi)+βicos(θi)]2=∣αi∣2+∣βi∣2=1
可以看出变换之后 ∣ α i ′ ∣ 2 + ∣ β i ′ ∣ 2 |\alpha_i'|^2 +|\beta_i'|^2 ∣αi′∣2+∣βi′∣2的值扔为1。
三、MATLAB实现
3.1 案例描述
复杂的二元函数求最值:
max f ( x , y ) = x s i n ( 4 π x ) + y s i n ( 20 π y ) { − 3.0 ≤ x ≤ 12.1 4.1 ≤ y ≤ 5.8 \max f(x,y)=xsin(4\pi x) + ysin(20\pi y) \\ \begin{cases} -3.0 \leq x \leq12.1\\ 4.1 \leq y \leq 5.8 \end{cases} maxf(x,y)=xsin(4πx)+ysin(20πy){−3.0≤x≤12.14.1≤y≤5.8
该函数的图形如下:
从图中可以看出,该非线性函数在给定范围内分布着许多局部极值,通常的寻优算法极易陷入局部极值或在各局部极值间振荡,比较适用于验证量子遗传算法的性能。
3.2 算法实现
3.2.1算法流程:
- 初始化种 Q ( t 0 ) Q(t_0) Q(t0),随机生成 n n n个以量子比特为编码的染色体;
- 对初始种群 Q ( t 0 ) Q(t_0) Q(t0)中的每个个体进行一次测量,得到对应的确定解 P ( t 0 ) P(t_0) P(t0);
- 对各确定解进行适应度评估;
- 记录最优个体和对应的适应度;
- 判断计算过程是否可以结束,若满足结束条件则退出,否则继续计算;
- 对种群 Q ( t ) Q(t) Q(t)中的每个个体实施一次测量,得到相应的确定解;
- 对各确定解进行适应度评估;
- 利用量子旋转门U(t)对个体实施调整,得到新的种群 Q ( t + 1 ) Q(t+1) Q(t+1);
- 记录最优个体和对应的适应度;
- 将选代次数t加1,返回步骤(5)。
对应的流程图如下:
算法步骤(1)是初始化种群 Q ( t 0 ) Q(t_0) Q(t0),种群中全部染色体的所有基因 ( α i t , β i t ) (\alpha_i^t,\beta_i^t) (αit,βit)都被初始化为 ( 1 2 , 1 2 ) (\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}}) (2 1,2 1),这意味着一个染色体所表达的是其全部可能状态的等概率叠加:
∣ ϕ q j t ) = ∑ k = 1 2 m 1 2 m ∣ S k ) |\phi_{q_j}^t) = \sum\limits_{k=1}^{2^m}\frac{1}{\sqrt{2}^m}|S_k) ∣ϕqjt)=k=1∑2m2 m1∣Sk)
其中, S k S_k Sk为该染色体的第k种状态,表现形式为一长度为m的二进制串 ( x 1 , x 2 , ⋅ ⋅ ⋅ , x m ) (x_1,x_2,···,x_m) (x1,x2,⋅⋅⋅,xm), x i x_i xi的值为0或者1。
算法的步骤(2)是对初始种群中的个体进行一次测量,以获得一组确定的解 P ( t ) P(t) P(t) = { p 1 t , p 2 t , ⋅ ⋅ ⋅ , p n t p_1^t,p_2^t,···,p_n^t p1t,p2t,⋅⋅⋅,pnt},其中 p j t p_j^t pjt为第 t t t代种群中第 j j j个解(第 j j j个个体的测量值),表现形式为长度为m的二进制串,其中每一位为0或1,是根据量子比特的概率 ( ∣ α i t ∣ 2 或 ∣ β i t ∣ 2 , i = 1 , 2 , ⋅ ⋅ ⋅ , m ) (|\alpha_i^t|^2或|\beta_i^t|^2,i=1,2,···,m) (∣αit∣2或∣βit∣2,i=1,2,⋅⋅⋅,m)选择得到的。测量过程为,随机产生一个[0,1]区间的数,若它大于概率幅的平方,则测量结果取值1,否则取值0。然后,对这一组解进行适应度评估,记录下最佳适应度个体作为下一步演化的目标值。
随后,算法进人循环选代阶段,随着迭代的进行,种群的解逐渐向最优解收敛。在每一次迭代中,首先对种群进行测量,以获得一组确定解 P ( t ) P(t) P(t),然后计算每个解的适应度值,再根据当前的演化目标和事先确定的调整策略,利用量子旋转门对种群中的个体进行调整,获得更新后的种群,记录下当前的最优解,并与当前的目标值进行比较,如果大于当前目标值,则以新的最优解作为下一次迭代的目标值,否则保持当前的目标值不变。
3.2.2算法实现:
(1)量子比特编码
采用遗传算法中的二进制编码,对存在多态的问题进行量子比特编码,如两态用一个量子比特进行编码,四态用两个量子比特进行编码。该方法的优点是通用性好,且实现简单。采用多量子比特编码m个参数的基因如下:
其中, q j t q_j^t qjt代表第 t t t代,第 j j j个个体的染色体; k k k为编码每一个基因的量子比特数; m m m为染色体的基因个数。
将种群各个个体的量子比特编码 ( α , β ) (\alpha,\beta) (α,β)都初始化为 ( 1 2 , 1 2 ) (\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}}) (2 1,2 1),这意味着一个染色体所表达的全部可能状态是等概率的。
(2)量子旋转门
量子遗传算法中,旋转门是最终实现演化操作的执行机构。这里使用一种通用的、与问题无关的调整策略,如下表所列。
其中, x i x_i xi为当前染色体的第 i i i位; b e s t i best_i besti为当前的最优染色体的第 i i i位; f ( x ) f(x) f(x)为适应度函数; s ( α i , β i ) s(\alpha_i,\beta_i) s(αi,βi)为旋转角方向; △ θ i \triangle\theta_i △θi为旋转角度大小,其值根据下表中所列的选择策略确定。该调整策略是将个体 q j t q_j^t qjt,当前的测量值的适应度 f ( x ) f(x) f(x)与该种群当前最优个体的适应度值 f ( b e s t i ) f(best_i) f(besti)进行比较,如果 f ( x ) > f ( b e s t ) f(x)>f(best) f(x)>f(best),则调整 q j t q_j^t qjt中相应位量子比特,使得几率幅对 ( α i , β i ) (\alpha_i,\beta_i) (αi,βi)向着有利于 x i x_i xi出现的方向演化;反之,如果 f ( x ) < f ( b e s t ) f(x)<f(best) f(x)<f(best),则调整 q j t q_j^t qjt中相应位量子比特,使得几率幅对 ( α i , β i ) (\alpha_i,\beta_i) (αi,βi)向着有利于 b e s t best best出现的方向演化。
x i x_i xi | b e s t i best_i besti | f ( x ) > f ( b e s t ) f(x)>f(best) f(x)>f(best) | △ θ i \triangle\theta_i △θi | s ( α i , β i ) α i β i > 0 s(\alpha_i,\beta_i) ~~~\alpha_i\beta_i>0 s(αi,βi) αiβi>0 | s ( α i , β i ) α i β i < 0 s(\alpha_i,\beta_i) ~~~\alpha_i\beta_i<0 s(αi,βi) αiβi<0 | s ( α i , β i ) α = 0 s(\alpha_i,\beta_i) ~~~\alpha=0 s(αi,βi) α=0 | s ( α i , β i ) β i = 0 s(\alpha_i,\beta_i) ~~~\beta_i=0 s(αi,βi) βi=0 |
---|---|---|---|---|---|---|---|
0 | 0 | false | 0 | 0 | 0 | 0 | 0 |
0 | 0 | true | 0 | 0 | 0 | 0 | 0 |
0 | 1 | false | 0.01 π \pi π | +1 | -1 | 0 | ± 1 \pm1 ±1 |
0 | 1 | true | 0.01 π \pi π | -1 | +1 | ± 1 \pm1 ±1 | 0 |
1 | 0 | false | 0.01 π \pi π | -1 | +1 | ± 1 \pm1 ±1 | 0 |
1 | 0 | true | 0.01 π \pi π | +1 | -1 | 0 | ± 1 \pm1 ±1 |
1 | 1 | false | 0 | 0 | 0 | 0 | 0 |
1 | 1 | true | 0 | 0 | 0 | 0 | 0 |
3.2.3MATLAB实现:
3.2.3.1种群初始化
种群初始化函数为InitPop,其作用是产生初始种群的量子比特编码矩阵chrom。
function chrom=InitPop(M,N)
%% 初始化种群-量子比特编码
% M:为种群大小×2,(α和β)
% N:为量子比特编码长度
for i=1:Mfor j=1:Nchrom(i,j)=1/sqrt(2);end
end
3.2.3.2测量函数
对种群实施一次测量,得到二进制编码,函数名为collapse。
function binary=collapse(chrom)
%% 对种群实施一次测量 得到二进制编码
% 输入chrom :为量子比特编码
% 输出binary:二进制编码
[M,N]=size(chrom); %得到种群大小 和编码长度
M=M/2; % 种群大小
binary=zeros(M,N); %二进制编码大小初始化
for i=1:Mfor j=1:Npick=rand; %产生【0,1】随机数if pick>(chrom(2.*i-1,j)^2) % 随机数大于α的平方binary(i,j)=1;elsebinary(i,j)=0;endend
end
3.2.3.3量子旋转门函数
旋转门是最终实现演化操作的执行机构,量子旋转门函数为Qgate,代码如下:
function chrom=Qgate(chrom,fitness,best,binary)
%% 量子旋转门调整策略
% 输入 chrom:更新前的量子比特编码
% fitness:适应度值
% best:当前种群中最优个体
% binary:二进制编码
% 输出 chrom:更新后的量子比特编码
sizepop=size(chrom,1)/2;
lenchrom=size(binary,2);
for i=1:sizepopfor j=1:lenchromA=chrom(2*i-1,j); % αB=chrom(2*i,j); % βx=binary(i,j);b=best.binary(j);if ((x==0)&(b==0))||((x==1)&(b==1))delta=0; % delta为旋转角的大小s=0; % s为旋转角的符号,即旋转方向elseif (x==0)&(b==1)&(fitness(i)<best.fitness)delta=0.01*pi;if A*B>0s=1;elseif A*B<0s=-1;elseif A==0s=0;elseif B==0s=sign(randn);endelseif (x==0)&(b==1)&(fitness(i)>=best.fitness)delta=0.01*pi;if A*B>0s=-1;elseif A*B<0s=1;elseif A==0s=sign(randn);elseif B==0s=0;endelseif (x==1)&(b==0)&(fitness(i)<best.fitness)delta=0.01*pi;if A*B>0s=-1;elseif A*B<0s=1;elseif A==0s=sign(randn);elseif B==0s=0;endelseif (x==1)&(b==0)&(fitness(i)>=best.fitness)delta=0.01*pi;if A*B>0s=1;elseif A*B<0s=-1;elseif A==0s=0;elseif B==0s=sign(randn);endende=s*delta; % e为旋转角U=[cos(e) -sin(e);sin(e) cos(e)]; % 量子旋转门y=U*[A B]'; % y为更新后的量子位chrom(2*i-1,j)=y(1);chrom(2*i,j)=y(2);end
end
3.2.3.4适应度函数
这里以求解最大值问题为例进行说明。如果是求解最小值问题,可以将之转变成求最大值问题(加个负号即可),目标值越大的个体,其适应度值也应该越大,所以可以直接将所优化的目标函数作为适应度函数。
适应度主函数FitnessFunction的代码如下:
function [fitness,X]=FitnessFunction(binary,lenchrom)
%% 适应度函数
% 输入 binary:二进制编码
% lenchrom:各变量的二进制位数
% 输出 fitness:适应度
% X:十进制数(待优化参数)
sizepop=size(binary,1);
fitness=zeros(1,sizepop);
num=size(lenchrom,2);
X=zeros(sizepop,num);
for i=1:sizepop[fitness(i),X(i,:)]=Objfunction(binary(i,:),lenchrom); % 使用目标函数计算适应度
end
其中,函数Objfunction是待优化的目标函数,这里以3.1节中的函数为例进行说明。
函数Objfunction的代码:
function [Y,X]=Objfunction(x,lenchrom)
%% 目标函数
% 输入 x:二进制编码
% lenchrom:各变量的二进制位数
% 输出 Y:目标值
% X:十进制数
bound=[-3.0 12.1;4.1 5.8]; % 函数自变量的范围
%% 将binary数组转化成十进制数组
X=bin2decFun(x,lenchrom,bound);
%% 计算适应度-函数值
Y=sin(4*pi*X(1))*X(1)+sin(20*pi*X(2))*X(2);
其中,函数bin2decFun是将二进制编码转换成十进制数,其代码如下:
function X=bin2decFun(x,lenchrom,bound)
%% 二进制转化成十进制
% 输入 x:二进制编码
% lenchrom:各变量的二进制位数
% bound:各变量的范围
% 输出 X:十进制数
M=length(lenchrom);
n=1;
X=zeros(1,M);
for i=1:Mfor j=lenchrom(i)-1:-1:0X(i)=X(i)+x(n).*2.^j;n=n+1;end
end
X=bound(:,1)'+X./(2.^lenchrom-1).*(bound(:,2)-bound(:,1))';
3.2.3.5量子遗传主函数
clc;
clear all;
close all;
%----------------参数设置-----------------------
MAXGEN=200; % 最大遗传代数
sizepop=40; % 种群大小
lenchrom=[20 20]; % 每个变量的二进制长度
trace=zeros(1,MAXGEN);
%--------------------------------------------------------------------------
% 最佳个体 记录其适应度值、十进制值、二进制编码、量子比特编码
best=struct('fitness',0,'X',[],'binary',[],'chrom',[]);
%% 初始化种群
chrom=InitPop(sizepop*2,sum(lenchrom));
%% 对种群实施一次测量 得到二进制编码
binary=collapse(chrom);
%% 求种群个体的适应度值,和对应的十进制值
[fitness,X]=FitnessFunction(binary,lenchrom); % 使用目标函数计算适应度
%% 记录最佳个体到best
[best.fitness bestindex]=max(fitness); % 找出最大值
best.binary=binary(bestindex,:);
best.chrom=chrom([2*bestindex-1:2*bestindex],:);
best.X=X(bestindex,:);
trace(1)=best.fitness;
fprintf('%d\n',1)
%% 进化
for gen=2:MAXGENfprintf('%d\n',gen) %提示进化代数%% 对种群实施一次测量binary=collapse(chrom);%% 计算适应度[fitness,X]=FitnessFunction(binary,lenchrom);%% 量子旋转门chrom=Qgate(chrom,fitness,best,binary);[newbestfitness,newbestindex]=max(fitness); % 找到最佳值% 记录最佳个体到bestif newbestfitness>best.fitnessbest.fitness=newbestfitness;best.binary=binary(newbestindex,:);best.chrom=chrom([2*newbestindex-1:2*newbestindex],:);best.X=X(newbestindex,:);endtrace(gen)=best.fitness;
end%% 画进化曲线
plot(1:MAXGEN,trace);
title('进化过程');
xlabel('进化代数');
ylabel('每代的最佳适应度');%% 显示优化结果
disp(['最优解X:',num2str(best.X)])
disp(['最大值Y:',num2str(best.fitness)]);
3.2结果分析
最优解X:11.6255 5.72504
最大值Y:17.3503
量子遗传算法优化200代得到的进化过程如下图所示。
喜欢的小伙伴麻烦点个赞奥,谢谢啦
基于量子遗传算法的函数寻优算法—MATLAB实现相关推荐
- 《MATLAB智能算法30个案例》:第8章 基于量子遗传算法的函数寻优算法
<MATLAB智能算法30个案例>:第8章 基于量子遗传算法的函数寻优算法 1. 前言 2. MATLAB 仿真示例 3. 小结 1. 前言 <MATLAB智能算法30个案例分析&g ...
- 《MATLAB智能算法30个案例》:第17章 基于PSO工具箱的函数寻优算法
<MATLAB智能算法30个案例>:第17章 基于PSO工具箱的函数寻优算法 1. 前言 2. MATLAB 仿真示例 3. 小结 1. 前言 <MATLAB智能算法30个案例分析& ...
- 基于PSO工具箱的函数寻优算法
文章目录 一.理论基础 1.工具箱介绍 2.工具箱函数解释 二.案例背景 1.问题描述 2.工具箱设置 三.MATLAB程序实现 1.适应度函数 2.主函数 3.仿真结果 四.延伸阅读 五.参考文献 ...
- (转载)基于鱼群算法的函数寻优算法(matlab实现)
1 理论基础 1.1 人工鱼群算法概述 人工鱼群算法是李晓磊等人于2002年提出的一类基于动物行为的群体智能优化算法.该算法是通过模拟鱼类的觅食.聚群.追尾.随机等行为在搜索域中进行寻 ...
- 基于豹子捕猎的函数寻优算法
引言 基于生物习性的优化算法成为近年来一种热门,如蚁群算法,蝙蝠算法.但是这些算法很难越出局部寻优(如果要越出局部寻优,就要在每一次迭代中采用聚类),但个体捕猎反而更好实现,因此,参考网上的鲸鱼算法, ...
- 基于原子轨道搜索算法的函数寻优算法
文章目录 一.理论基础 1.原子轨道搜索算法 2.AOS算法伪代码 二.仿真实验与结果分析 三.参考文献 一.理论基础 1.原子轨道搜索算法 在本文中,原子轨道搜索(Atomic orbital se ...
- 基于麻雀搜索算法的函数寻优算法
文章目录 一.理论基础 1.发现者位置更新 2.跟随者位置更新 3.警戒者位置更新 4.SSA算法伪代码 二.仿真实验与分析 三.参考文献 一.理论基础 麻雀搜索算法(Sparrow Search A ...
- 基于闪电搜索算法的函数寻优算法
文章目录 一.理论基础 1.闪电搜索算法 2.LSA算法流程图 二.仿真实验与结果分析 三.参考文献 一.理论基础 1.闪电搜索算法 闪电搜索算法(Lightning Search Algorithm ...
- 基于爬行动物搜索算法的函数寻优算法
文章目录 一.理论基础 1.爬行动物搜索算法 (1)初始化阶段 (2)包围阶段(探索) (3)狩猎阶段(开发) 2.RSA算法伪代码 二.仿真实验与结果分析 三.参考文献 一.理论基础 本文提出了一种 ...
最新文章
- 构建城市大脑的未来标准,9个值得探索的规范
- 非洲儿童(南阳oj1036)(馋)
- Matlab之while循环语句
- css selector的优先级
- hash表与系统顺序寻址
- php smtp验证,php通过smtp验证登陆
- Eclipse扩展的轻量级集成测试
- python循环指令_Python循环
- php获取表单ip,PHP获取用户IP代码实现
- React系列--jsx语法及虚拟dom,渲染
- iOS蓝牙开发总结-4
- java并发编程实践学习(二)由可重入锁想到的
- 适配ofd签章SES_Signature
- 网络空间测绘技术在网络安全中的应用
- import java util_java里面import java.util.*;是什么用处?
- 斗兽棋在线游戏HTML5小游戏,js --斗兽棋游戏
- 中药配方颗粒调剂设备解决方案!基于一体化步进电机,全闭环,集成原点回归算法,丰富的报警功能
- 【学习记录】Tpro遥控器_暂时取消Tpro的控制权(简易)
- 2021年茶艺师(中级)考试报名及茶艺师(中级)免费试题
- 漫画:博弈论系列 之 红眼睛和蓝眼睛(附:旅客的挽回)