遗传算法GA求解函数极值

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

主程序

%% GA

clc % 清屏

clear all; % 删除workplace变量

close all; % 关掉显示图形窗口

warning off

%% 参数初始化

popsize=100; %种群规模

lenchrom=7; %变量字串长度

pc=0.7; %设置交叉概率,本例中交叉概率是定值,若想设置变化的交叉概率可用表达式表示,或从写一个交叉概率函数,例如用神经网络训练得到的值作为交叉概率

pm=0.3; %设置变异概率,同理也可设置为变化的

maxgen=100; % 进化次数

%种群

popmax=50;

popmin=0;

bound=[popminpopmax;popminpopmax;popminpopmax;popminpopmax;popminpopmax;popminpopmax;popm inpopmax]; %变量范围

%% 产生初始粒子和速度

fori=1:popsize

%随机产生一个种群

GApop(i,:)=Code(lenchrom,bound); %随机产生个体

%计算适应度

fitness(i)=fun(GApop(i,:)); %染色体的适应度

end

%找最好的染色体

[bestfitnessbestindex]=min(fitness);

zbest=GApop(bestindex,:); %全局最佳

gbest=GApop; %个体最佳

fitnessgbest=fitness; %个体最佳适应度值

fitnesszbest=bestfitness; %全局最佳适应度值

%% 迭代寻优

fori=1:maxgen

i

%种群更新GA选择更新

GApop=Select2(GApop,fitness,popsize);

% 交叉操作GA

GApop=Cross(pc,lenchrom,GApop,popsize,bound);

% 变异操作GA变异

GApop=Mutation(pm,lenchrom,GApop,popsize,[imaxgen],bound);

pop=GApop;

for j=1:popsize

%适应度值

if

0.072*pop(j,1)+0.063*pop(j,2)+0.057*pop(j,3)+0.05*pop(j,4)+0.032*pop(j,5)+0.0442*pop(j,6)+0.0675*pop(j,7) <=264.4

if

128*pop(j,1)+78.1*pop(j,2)+64.1*pop(j,3)+43*pop(j,4)+58.1*pop(j,5)+36.9*pop(j,6)+50.5*pop(j,7)<=69719 fitness(j)=fun(pop(j,:));

end

end

%个体最优更新

if fitness(j)

gbest(j,:) = pop(j,:);

fitnessgbest(j) = fitness(j);

end

%群体最优更新

if fitness(j)

zbest = pop(j,:);

fitnesszbest = fitness(j);

end

end

yy(i)=fitnesszbest;

end

%% 结果

disp '*************best particle number****************'

zbest

%%

plot(yy,'linewidth',2);

title(['适应度曲线' '终止代数=' num2str(maxgen)]);

xlabel('进化代数');ylabel('适应度');

grid on

子程序

fun

function y = fun(x)

y=0.072*x(1)+0.063*x(2)+0.057*x(3)+0.05*x(4)+0.032*x(5)+0.0442*x(6)+0.0675*x(7);

Mutation

function ret=Mutation(pmutation,lenchrom,chrom,sizepop,pop,bound)

% 本函数完成变异操作

% pcorss input : 变异概率

% lenchrom input : 染色体长度

% chrom input : 染色体群

% sizepop input : 种群规模

% pop input : 当前种群的进化代数和最大的进化代数信息

% ret output : 变异后的染色体

fori=1:sizepop

% 随机选择一个染色体进行变异

pick=rand;

while pick==0

pick=rand;

end

index=ceil(pick*sizepop);

% 变异概率决定该轮循环是否进行变异

pick=rand;

if pick>pmutation

continue;

end

flag=0;

while flag==0

% 变异位置

pick=rand;

while pick==0

pick=rand;

end

pos=ceil(pick*sum(lenchrom)); %随机选择了染色体变异的位置,即选择了第pos个变量进行变异v=chrom(i,pos);

v1=v-bound(pos,1);

v2=bound(pos,2)-v;

pick=rand; %变异开始

if pick>0.5

delta=v2*(1-pick^((1-pop(1)/pop(2))^2));

chrom(i,pos)=v+delta;

else

相关文档
最新文档