bitsll matlab,遗传算法(Genetic Algorithm, GA)及MATLAB实现

遗传算法概述:

• 遗传算法(Genetic Algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法

则,它最初由美国Michigan大学的J. Holland教授于1967年提出。

• 遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一

定数目的个体(individual)组成。因此,第一步需要实现从表现型到基因型的映射即编码工作。初代种群产生之后,按照

适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度

(fitness)大小选择个体,并借助于自然遗传学的遗传算子(genetic operators)进行组合交叉和变异,产生出代表新

的解集的种群。这个过程将导致种群像自然进化一样,后生代种群比前代更加适应于环境,末代种群中的最优个体经过解

码(decoding),可以作为问题近似最优解。

• 遗传算法有三个基本操作:选择(Selection)、交叉(Crossover)和变异(Mutation)。

• (1)选择。选择的目的是为了从当前群体中选出优良的个体,使它们有机会作为父代为下一代繁衍子孙。根据各个个体的

适应度值,按照一定的规则或方法从上一代群体中选择出一些优良的个体遗传到下一代种群中。选择的依据是适应性强的

个体为下一代贡献一个或多个后代的概率大。

• (2)交叉。通过交叉操作可以得到新一代个体,新个体组合了父辈个体的特性。将群体中的各个个体随机搭配成对,对每

一个个体,以交叉概率交换它们之间的部分染色体。

• (3)变异。对种群中的每一个个体,以变异概率改变某一个或多个基因座上的基因值为其他的等位基因。同生物界中一样,

变异发生的概率很低,变异为新个体的产生提供了机会。

遗传算法的基本步骤:

1)编码:GA在进行搜索之前先将解空间的解数据表示成遗传空间的基因型串结构数据,

这些串结构数据的丌同组合便构成了丌同的点。

2)初始群体的生成:随机产生N个初始串结构数据,每个串结构数据称为一个个体,N个

个体构成了一个群体。GA以这N个串结构数据作为初始点开始进化。

3)适应度评估:适应度表明个体或解的优劣性。丌同的问题,适应性函数的定义方式也丌

同。

4)选择:选择的目的是为了从当前群体中选出优良的个体,使它们有机会作为父代为下一

代繁殖子孙。遗传算法通过选择过程体现这一思想,进行选择的原则是适应性强的个体为

下一代贡献一个或多个后代的概率大。选择体现了达尔文的适者生存原则。

5)交叉:交叉操作是遗传算法中最主要的遗传操作。通过交叉操作可以得到新一代个体,

新个体组合了其父辈个体的特性。交叉体现了信息交换的思想。

6)变异:变异首先在群体中随机选择一个个体,对于选中的个体以一定的概率随机地改变

串结构数据中某个串的值。同生物界一样, GA中变异发生的概率很低,通常取值很小。

cc37d38cbf79783b386ca6f1d5682a00.png

遗传算法工具箱:

• MATLAB内嵌遗传算法工具箱: gadst

• Sheffield大学遗传算法工具箱: gatbx

• 北卡罗来纳大学遗传算法工具箱: gaot

initializega函数:

70472f4f6842ae20f986f1a2758ebc9e.png

ga函数:

b510bd242299a194991943ef1256b130.png

659daaaf8cb066d498d3d5f21acbd266.png

遗传算法优化BP神经网络初始权值与阈值:

a1b0256085080b7571df515be3660088.png

Demo1(一元函数优化MATLAB实现):

main.m

1 %%I. 清空环境变量2 clear all3 clc4

5 %%II. 绘制函数曲线6 x = 0:0.01:9;7 y = x + 10*sin(5*x)+7*cos(4*x);8

9 figure10 plot(x, y)11 xlabel(‘自变量‘)12 ylabel(‘因变量‘)13 title(‘y = x + 10*sin(5*x) + 7*cos(4*x)‘)14

15

16 %%III. 初始化种群17 initPop = initializega(50,[0 9],‘fitness‘);18

19 %%IV. 遗传算法优化20 [x endPop bpop trace] = ga([0 9],‘fitness‘,[],initPop,[1e-6 1 1],‘maxGenTerm‘,25,...21 ‘normGeomSelect‘,0.08,‘arithXover‘,2,‘nonUnifMutation‘,[2 25 3]);22

23

24 %%V. 输出最优解并绘制最优点25 x26 hold on27 plot (endPop(:,1),endPop(:,2),‘ro‘)28

29 %%VI. 绘制迭代进化曲线30 figure(2)31 plot(trace(:,1),trace(:,3),‘b:‘)32 hold on33 plot(trace(:,1),trace(:,2),‘r-‘)34 xlabel(‘Generation‘); ylabel(‘Fittness‘);35 legend(‘Mean Fitness‘, ‘Best Fitness‘)

initializega.m

1 function [pop] =initializega(num, bounds, evalFN,evalOps,options)2

3 if nargin<5

4 options=[1e-6 1];5 end6 if nargin<4

7 evalOps=[];8 end9

10 if any(evalFN<48) %Not a .m file11 if options(2)==1 %Float GA12 estr=[‘x=pop(i,1); pop(i,xZomeLength)=‘, evalFN ‘;‘];13 else %Binary GA14 estr=[‘x=b2f(pop(i,:),bounds,bits); pop(i,xZomeLength)=‘, evalFN ‘;‘];15 end16 else %A .m file17 if options(2)==1 %Float GA18 estr=[‘[ pop(i,:) pop(i,xZomeLength)]=‘ evalFN ‘(pop(i,:),[0 evalOps]);‘];19 else %Binary GA20 estr=[‘x=b2f(pop(i,:),bounds,bits);[x v]=‘evalFN ...21 ‘(x,[0 evalOps]); pop(i,:)=[f2b(x,bounds,bits) v];‘];22 end23 end24

25

26 numVars = size(bounds,1); %Number of variables27 rng = (bounds(:,2)-bounds(:,1))‘; %The variable ranges‘

28

29 if options(2)==1 %Float GA30 xZomeLength = numVars+1; %Length of string is numVar +fit31 pop = zeros(num,xZomeLength); %Allocate the new population32 pop(:,1:numVars)=(ones(num,1)*rng).*(rand(num,numVars))+...33 (ones(num,1)*bounds(:,1)‘);

34 else %Binary GA35 bits=calcbits(bounds,options(1));36 xZomeLength = sum(bits)+1; %Length of string is numVar +fit37 pop = round(rand(num,sum(bits)+1));38 end39

40 for i=1:num41 eval(estr);42 end

fitness.m

1 function [sol, fitnessVal] =fitness(sol, options)2

3 x = sol(1);4

5 fitnessVal = x + 10*sin(5*x)+7*cos(4*x);6

7 end

原始函数图像:

71c39729f1e8003e67f4ed6694c63711.png

标记出最大值:

bfee07564dcc8cad564c76959c1eac7d.png

绘制迭代进化曲线:

e8ae0d1fb773fa95059808055674ed0f.png

注:运行以上程序,需要下载gaot的工具箱并添加到运行路径里才能运行,否则会报错。

原文:https://www.cnblogs.com/shixinzei/p/10776641.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值