基于量子遗传算法的函数寻优算法
- 格式:pdf
- 大小:294.41 KB
- 文档页数:2
基于遗传算法的函数寻优算法龙源期刊⽹ /doc/198723271.html基于遗传算法的函数寻优算法作者:沈晓芳来源:《课程教育研究·上》2015年第03期【摘要】遗传算法对问题的依赖性⼩,是⼀种全局优化算法,可⽤于函数寻优。
本⽂利⽤Maflab优化⼯具箱,有效地实现了⽤遗传算法求解函数优化问题,实验结果表明该算法收敛速度快,寻优性能良好。
【关键词】遗传算法函数寻优⽬标函数【中图分类号】G64 【⽂献标识码】A 【⽂章编号】2095-3089(2015)03-0152-01遗传算法(Genetic Algorithm,GA)起始于20世纪60年代,主要由美国密执根⼤学的John Holland与同事和学⽣研究形成了较为完整的理论和⽅法,是⼀种重要的现代优化算法。
遗传算法对问题的依赖性⼩,是⼀种全局优化算法,所以在很多领域获得了⼴泛的应⽤。
遗传算法基本思想:将“优胜劣汰,适者⽣存”的⽣物进化思想引⼊优化参数形成的编码串联群体中,按所选择的适配值函数并通过遗传中的选择、交叉及变异对个体进⾏筛选,使适配值⾼的个体被保留下来,组成新的群体,这样周⽽复始,群体中的个体适应度不断升⾼,直到满⾜⼀定的条件。
遗传算法的⼀个重要应⽤是函数寻优,该算法对于寻优的函数基本⽆限制,既不要求函数连续,更不要求函数可微;既可以是函数解析式所表达的显函数,⼜可以是映射矩阵等隐函数,应⽤范围很⼴。
⼀、遗传算法的实现1.遗传算法的应⽤步骤(1)确定决策变量及各种约束条件,即确定出个体的表现型和问题的解空间。
(2)建⽴优化模型,即确定出⽬标函数的类型及数学描述形式或量化⽅法。
(3)确定表⽰可⾏解的染⾊体编码⽅法,即确定出个体的基因型及遗传算法的搜索空间。
(4)确定解码⽅法,即确定出由个体基因型到个体表现型的对应关系或转化⽅法。
(5)确定个体适应度的量化评价⽅法,即确定出由⽬标函数值到个体适应度函数的转换规则。
(6)设计遗传算⼦,即确定选择运算、交叉运算、变异运算等算⼦的具体操作⽅法。
MATLAB 智能算法30个案例分析第1 章1、案例背景遗传算法(Genetic Algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则。
遗传算法的做法是把问题参数编码为染色体,再利用迭代的方式进行选择、交叉以及变异等运算来交换种群中染色体的信息,最终生成符合优化目标的染色体。
在遗传算法中,染色体对应的是数据或数组,通常是由一维的串结构数据来表示,串上各个位置对应基因的取值。
基因组成的串就是染色体,或者叫基因型个体( Individuals) 。
一定数量的个体组成了群体(Population)。
群体中个体的数目称为群体大小(Population Size),也叫群体规模。
而各个个体对环境的适应程度叫做适应度( Fitness) 。
2、案例目录:1.1 理论基础1.1.1 遗传算法概述1. 编码2. 初始群体的生成3. 适应度评估4. 选择5. 交叉6. 变异1.1.2 设菲尔德遗传算法工具箱1. 工具箱简介2. 工具箱添加1.2 案例背景1.2.1 问题描述1. 简单一元函数优化2. 多元函数优化1.2.2 解决思路及步骤1.3 MATLAB程序实现1.3.1 工具箱结构1.3.2 遗传算法中常用函数1. 创建种群函数—crtbp2. 适应度计算函数—ranking3. 选择函数—select4. 交叉算子函数—recombin5. 变异算子函数—mut6. 选择函数—reins7. 实用函数—bs2rv8. 实用函数—rep1.3.3 遗传算法工具箱应用举例1. 简单一元函数优化2. 多元函数优化1.4 延伸阅读1.5 参考文献3、主程序:1. 简单一元函数优化:clcclear allclose all%% 画出函数图figure(1);hold on;lb=1;ub=2; %函数自变量范围【1,2】ezplot('sin(10*pi*X)/X',[lb,ub]); %画出函数曲线xlabel('自变量/X')ylabel('函数值/Y')%% 定义遗传算法参数NIND=40; %个体数目MAXGEN=20; %最大遗传代数PRECI=20; %变量的二进制位数GGAP=0.95; %代沟px=0.7; %交叉概率pm=0.01; %变异概率trace=zeros(2,MAXGEN); %寻优结果的初始值FieldD=[PRECI;lb;ub;1;0;1;1]; %区域描述器Chrom=crtbp(NIND,PRECI); %初始种群%% 优化gen=0; %代计数器X=bs2rv(Chrom,FieldD); %计算初始种群的十进制转换ObjV=sin(10*pi*X)./X; %计算目标函数值while gen<MAXGENFitnV=ranking(ObjV); %分配适应度值SelCh=select('sus',Chrom,FitnV,GGAP); %选择SelCh=recombin('xovsp',SelCh,px); %重组SelCh=mut(SelCh,pm); %变异X=bs2rv(SelCh,FieldD); %子代个体的十进制转换ObjVSel=sin(10*pi*X)./X; %计算子代的目标函数值[Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入子代到父代,得到新种群X=bs2rv(Chrom,FieldD);gen=gen+1; %代计数器增加%获取每代的最优解及其序号,Y为最优解,I为个体的序号[Y,I]=min(ObjV);trace(1,gen)=X(I); %记下每代的最优值trace(2,gen)=Y; %记下每代的最优值endplot(trace(1,:),trace(2,:),'bo'); %画出每代的最优点grid on;plot(X,ObjV,'b*'); %画出最后一代的种群hold off%% 画进化图figure(2);plot(1:MAXGEN,trace(2,:));grid onxlabel('遗传代数')ylabel('解的变化')title('进化过程')bestY=trace(2,end);bestX=trace(1,end);fprintf(['最优解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\n'])2. 多元函数优化clcclear allclose all%% 画出函数图figure(1);lbx=-2;ubx=2; %函数自变量x范围【-2,2】lby=-2;uby=2; %函数自变量y范围【-2,2】ezmesh('y*sin(2*pi*x)+x*cos(2*pi*y)',[lbx,ubx,lby,uby],50); %画出函数曲线hold on;%% 定义遗传算法参数NIND=40; %个体数目MAXGEN=50; %最大遗传代数PRECI=20; %变量的二进制位数GGAP=0.95; %代沟px=0.7; %交叉概率pm=0.01; %变异概率trace=zeros(3,MAXGEN); %寻优结果的初始值FieldD=[PRECI PRECI;lbx lby;ubx uby;1 1;0 0;1 1;1 1]; %区域描述器Chrom=crtbp(NIND,PRECI*2); %初始种群%% 优化gen=0; %代计数器XY=bs2rv(Chrom,FieldD); %计算初始种群的十进制转换X=XY(:,1);Y=XY(:,2);ObjV=Y.*sin(2*pi*X)+X.*cos(2*pi*Y); %计算目标函数值while gen<MAXGENFitnV=ranking(-ObjV); %分配适应度值SelCh=select('sus',Chrom,FitnV,GGAP); %选择SelCh=recombin('xovsp',SelCh,px); %重组SelCh=mut(SelCh,pm); %变异XY=bs2rv(SelCh,FieldD); %子代个体的十进制转换X=XY(:,1);Y=XY(:,2);ObjVSel=Y.*sin(2*pi*X)+X.*cos(2*pi*Y); %计算子代的目标函数值[Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入子代到父代,得到新种群XY=bs2rv(Chrom,FieldD);gen=gen+1; %代计数器增加%获取每代的最优解及其序号,Y为最优解,I为个体的序号[Y,I]=max(ObjV);trace(1:2,gen)=XY(I,:); %记下每代的最优值trace(3,gen)=Y; %记下每代的最优值endplot3(trace(1,:),trace(2,:),trace(3,:),'bo'); %画出每代的最优点grid on;plot3(XY(:,1),XY(:,2),ObjV,'bo'); %画出最后一代的种群hold off%% 画进化图figure(2);plot(1:MAXGEN,trace(3,:));grid onxlabel('遗传代数')ylabel('解的变化')title('进化过程')bestZ=trace(3,end);bestX=trace(1,end);bestY=trace(2,end);fprintf(['最优解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\nZ=',num2str(bestZ), '\n']) 第2 章基于遗传算法和非线性规划的函数寻优算法1.1案例背景1.1.1 非线性规划方法非线性规划是20世纪50年代才开始形成的一门新兴学科。
量子遗传算法
量子遗传算法是一种新型的模仿生物进化的优化算法。
它是一种基于量子力学的遗传算法,它结合了量子力学和遗传算法的优势,从而实现了更快速、更有效的优化。
量子遗传算法的基本思想是将遗传算法中的“基因”变量替换为量子力学中的“波函数”变量,即用量子力学的概念来模拟遗传算法。
在这种算法中,波函数可以被用来表示变量的取值,因此可以实现多维变量的优化。
量子遗传算法的优势是它可以更快地收敛,优化更有效。
它的优点是它可以解决非凸优化问题,即存在多个最优解的问题,而传统的遗传算法只能解决凸优化问题。
此外,量子遗传算法还可以利用量子力学的概念,如量子干涉、量子相干等,使算法更加有效。
量子遗传算法一般用于优化非线性、非结构化、非凸优化问题,如多目标优化、非线性约束优化、最优控制、模糊优化等。
它对于解决复杂的优化问题具有重要的意义,因此被广泛应用于工程、物理、经济学等领域。
总之,量子遗传算法是一种新型的模仿生物进化的优化算法,它结合了量子力学和遗传算法的优势,实现了更快速、更有效的优化,可以解决复杂的优化问题,广泛应用于工程、物理、经济学等领域。
量子遗传算法
量子遗传算法(Quantum Genetic Algorithm,QGA)是基于量子计算原理的一种优化搜索方法,由物理学家David Deutsch提出。
它将遗传算法中的遗传变异运算与量子力学中的量子干涉运算相结合,将最优化问题转化为多重态的量子干涉实验,以此来寻找最优解。
在QGA中,通常使用一个二进制的比特序列作为代表染色体的编码,即使用0/1来表示个体的基因。
利用量子力学中的量子运算,可以把这些比特序列干涉起来,形成多重态。
每一个基因上的比特都可以在多重态中取不同的值,这样就能够把最优化问题转化为搜索多重态的问题。
在QGA中,运算过程包括三个步骤:1.量子遗传运算;2.量子测量;3.量子变异。
首先,量子遗传运算会生成一组多重态的比特序列,然后通过量子测量,可以得到一组有效的比特序列,接着,量子变异运算会对这些比特序列进行变异,最后,重复这些步骤,直到找到最优解。
综上所述,量子遗传算法是一种基于量子力学原理的优化搜索方法,可以有效解决复杂的优化问题。