遗传算法及其matlab实现(工具箱及非工具箱)

您所在的位置:网站首页 优化算法及应用 遗传算法及其matlab实现(工具箱及非工具箱)

遗传算法及其matlab实现(工具箱及非工具箱)

2023-10-05 00:59| 来源: 网络整理| 查看: 265

本文将简单叙述遗传算法的原理及实现过程,并通过采用工具箱和非工具箱两种方法解决一个在约束条件下求解函数最小值的问题。

前言

遗传算法是1962年Holland教授基于进化机制和自然遗传学提出的一种启发式,并行,随机优化算法。它将待优化问题的求解过程表示成个体“适者生存”的进化过程。将问题的解表示成“染色体”(个体),由多个个体组成的群体经过数次选择,交叉,变异三个进化过程,最终得到最适应环境的个体,即待优化问题的最优解。

一、遗传算法实现过程

在遗传算法中,n维向量X = [x1,x2,…,xn]T可以看作由n个遗传基因组成的一个染色体。染色体X又叫做个体,对于每个个体,要按照一定规矩确定出其适应度。个体适应度与目标函数相关联,个体越接近于目标函数,其适应度越大。通过搜索染色体来解决问题的最优解。 进化过程是以集群为主体。由M个个体组成的群体作为遗传算法的运算对象。遗传算法的运算过程是一个反复迭代的过程。遗传算法包括选择,交叉,变异三个操作。 (1)选择:根据每一个个体的适应度,按照“进化”规则,从群体中选择优良的个体遗传到下一代。 (2)交叉:在群体中按照指定的交叉概率交换随机配对的个体的部分染色体。 (3)变异:在群体中按照指定的变异概率改变个体基因中的一个或者多个 在这里插入图片描述

二、matlab实现 1.工具箱实现

代码如下:

[x,fval]=ga(@fitnessfun,n,A,b,Aeq,beq,lb,ub,@nonlcon,options)

其中: fitnessfun是求最小值的适应度函数; n:问题待求变量的个数; A,b分别是是不等式约束AXpmutation continue; end flag=0; num = 0; chrom1 = chrom(i,:); while flag==0&&num0.5 chrom(i,pos)=chrom(i,pos)+(bound(pos,2)-chrom(i,pos))*fg; else chrom(i,pos)=chrom(i,pos)+(chrom(i,pos)-bound(pos,1))*fg; end %变异结束 flag=test(lenchrom,bound,chrom(i,:)); %检验染色体的可行性 num = num+1; % 检验次数设置 end if num>20 % 如果大于20次,则不变异 chrom(i,:) = chrom1; end end ret=chrom;

编码:

function ret=Code(lenchrom,bound) %本函数将变量编码成染色体,用于随机初始化一个种群 % lenchrom input : 染色体长度 % bound input : 变量的取值范围 % ret output: 染色体的编码值 flag=0; while flag==0 pick=rand(1,length(lenchrom)); ret=bound(:,1)'+(bound(:,2)-bound(:,1))'.*pick; %线性插值,编码结果以实数向量存入ret中 flag=test(lenchrom,bound,ret); %检验染色体的可行性 end

测试函数:

function flag=test(lenchrom,bound,code) % lenchrom input : 染色体长度 % bound input : 变量的取值范围 % code output: 染色体的编码值 t=code; %先解码 t3 =18-t(1)-t(2); flag=1; if (t(1)bound(2,2))||t310 flag=0; end

主函数:

clc,clear,close all % 遗传算法参数初始化 maxgen = 50; % 进化代数,即迭代次数 sizepop = 50; % 种群规模 pcross = [0.7]; % 交叉概率选择,0和1之间 pmutation = [0.01]; % 变异概率选择,0和1之间 %染色体设置 lenchrom=ones(1,2); % t1、t2 bound=[-10,10;-10,10;]; % 数据范围 %---------------------------种群初始化------------------------------------ individuals=struct('fitness',zeros(1,sizepop), 'chrom',[]); %将种群信息定义为一个结构体 avgfitness = []; %每一代种群的平均适应度 bestfitness = []; %每一代种群的最佳适应度 bestchrom = []; %适应度最好的染色体 % 初始化种群 for i=1:sizepop % 随机产生一个种群 individuals.chrom(i,:)=Code(lenchrom,bound); % 编码(binary和grey的编码结果为一个实数,float的编码结果为一个实数向量) x=individuals.chrom(i,:); % 计算适应度 individuals.fitness(i)=fun(x); % 染色体的适应度 end % 找最好的染色体 [bestfitness bestindex] = min(individuals.fitness); bestchrom = individuals.chrom(bestindex,:); % 最好的染色体 % 记录每一代进化中最好的适应度和平均适应度 trace = [bestfitness]; % 迭代求解最佳初始阀值和权值 % 进化开始 for i=1:maxgen disp(['迭代次数: ',num2str(i)]) % 选择 individuals=Select(individuals,sizepop); % 交叉 individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,sizepop,bound); % 变异 individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,sizepop,i,maxgen,bound); % 计算适应度 for j=1:sizepop x=individuals.chrom(j,:); % 解码 individuals.fitness(j)=fun(x); % 染色体的适应度 end % 找到最小和最大适应度的染色体及它们在种群中的位置 [newbestfitness,newbestindex]=min(individuals.fitness); [worestfitness,worestindex]=max(individuals.fitness); % 代替上一次进化中最好的染色体 if bestfitness>newbestfitness bestfitness=newbestfitness; bestchrom=individuals.chrom(newbestindex,:); end individuals.chrom(worestindex,:)=bestchrom; % 剔除最差个体 trace=[trace;bestfitness]; %记录每一代进化中最好的适应度 end x = [bestchrom, 20-sum(sum(bestchrom))]; % 最佳个体值 x bestfitness

仿真结果: 在这里插入图片描述

总结

本文简述了遗传算法的原理及通过工具箱和非工具箱两种方法仿真实例。 遗传算法是一种自适应全局随机优化算法,是群体搜索策略和群体中个体之间的信息交换,搜索不依赖于梯度信息,搜索不依赖于初始点,基本上不用搜索空间的知识或其它辅助信息,不与求解空间有紧密关系。 关于算法的具体细节推荐: MATLAB优化算法案例分析与应用 MATLAB优化算法案例分析与应用(进阶版)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3