标准遗传算法的MATLAB实现

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

%标准遗传算法

%优化函数为f=-(x-1)^2+4,其中,0<=x<=3

%编码长度为10位,编码精度为0.0029

%种群规模设为40,遗传算子分别为比例选择,单点交叉和单点变异。交叉概率0.7,变异概率0.1 %最大进化代数为200代,保优操作。

main.m

initial;

global G;

for G=1:200

crossover;

mutation;

adapting;

keepbest;

selection;

end

result;

%初始化函数,随机形成规模为40初始种群

initial.m

pop(40,10)=0;

best_individual(10)=0; %最优个体

adapt_ave(200)=0; %种群平均适应值

for i=1:40

for j=1:10

if rand>0.5

pop(i,j)=1;

else

pop(i,j)=0;

end

end

end

% pop

clear i;

clear j;

%交叉操作,概率为0.7,单点交叉

crossover.m

for i=1:2:39

cross_P=rand; %随机产生一个数,以比较交叉概率

if cross_P<0.9 %交叉概率为0.9

cross_pos=round(10*rand); %交叉位置为0~9,若位置为0或9,则不进行交叉操作if or(cross_pos==0,cross_pos==9)

continue;

end

for j=cross_pos:10

temp=pop(i,j);

pop(i,j)=pop(i+1,j);

pop(i+1,j)=temp;

end

end

end

clear i;

clear j;

clear temp;

clear cross_P;

clear cross_pos;

%变异操作,单点变异,变异概率为0.1 mutation.m

for i=1:40

if rand<0.1 %通过变异概率

M_pos=round(10*rand);

if M_pos~=0 %若变异位为0则无意义 pop(i,M_pos)=1-pop(i,M_pos);

end

end

end

clear M_pos;

clear i;

%计算适应值

adapting.m

for i=1:40

adapt(i)=0;

end

for i=1:40

for j=1:10

if pop(i,j)==1

adapt(i)=adapt(i)+2^(10-j);

end

end

adapt(i)=adapt(i)*0.0029;

adapt(i)=-(adapt(i)-1).^2+4;

end

global adapt_best;

global best_pos;

adapt_best=0; %最佳个体

best_pos=0; %最佳个体在种群中的位置

end

% 最优解复制

for i=1:10

new_pop(40,i)=best_individual(i); end

%将选择产生的新群体复制给pop种群

for i=1:40

for j=1:10

pop(i,j)=new_pop(i,j);

end

end

clear i;

clear j;

clear k;

clear r;

clear ada_temp;

%结果统计函数

result.m

plot(adapt_ave);

best=0;

for j=1:10

if best_individual(j)==1

best=best+2^(10-j);

end

end

best=best*0.0029;

'最优个体为'

best

'最优解为'

best=-(best-1).^2+4;

best

相关文档
最新文档