智能控制大作业 智能控制和智能系统作业一:遗传算法

导读:爱华网网友为您分享以下“智能控制和智能系统作业一:遗传算法”的资讯,希望对您有所帮助,感谢您对aIhUaU.com的支持!

for i=1:N

if(mask(i)<=bitnum) t=unit1(i); unit1(i)=unit2(i); unit2(i)=t; end end end

%交叉操作

% pregen:交叉操作前种群 % unitnum:进行交叉操作的个体数 % bitnum:交叉的位数 % nextgen:交叉操作后的种群

function nextgen=crossover(pregen,unitnum,bitnum) %种群个体数目 row=size(pregen,1); cross=randperm(row); i=1; %交叉操作 while i*2<=unitnum row1=find(cross==i); unit1=pregen(row1,:); row2=find(cross==(row-i));

unit2=pregen(row2,:); if(numel(unit1)*numel(unit2)~=0) [unit1,unit2]=crossoverunit(unit1, unit2,bitnum); end

pregen(row1,:)=unit1; pregen(row2,:)=unit2; i=i+1; end %更新种群 nextgen=pregen; end

%变异操作

% pregen:进行变异操作前种群 % unitnum:进行变异的个体数 % bitnum:变异的位数

% nextgen:进行变异操作后的种群

function nextgen=mutation(pregen,unitnum,bitnum)

% row:种群个体数 column:个体的位数

[row,column]=size(pregen); needmutation=randperm(row); for i=1:row

%判断该个体是否需要变异 if needmutation(i)<=unitnum %取出该个体进行变异操作 unit=pregen(i,:);

%随机生成一个 1xN 的0-1数组bitseq,其中1的个数为 bitnum

bitseq=randperm(column); for j=1:column

if(bitseq(j)<=bitnum) bitseq(j)=0; else bitseq(j)=1; end end

%对 bitseq中的0对应的unit位进行变异操作

for k=1:column if(bitseq(k)==0) %变异:0变1,1变0 unit(k)=1-unit(k); end end

pregen(i,:)=unit; end end

%更新种群 nextgen=pregen; end

%计算适应值数组

function fitness=computefitness(population) fitness=[];

count=size(population,1); for i=1:count

[x1,x2]=codemap(population(i,:),

16,-10,10);

fitness(i)=destfun(x1,x2); end end

%计算实际复制数

function virtualcopy=computecopy(fitness) copy=[];

-5-

count=numel(fitness); meanvalue=mean(fitness); for i=1:count

copy(i)=fitness(i)/meanvalue; if(copy(i)<0) copy(i)=0; end end

virtualcopy=round(copy); end

%选择和复制操作

% pregen:复制前种群 nextgen:复制后种群 % maxfitness:最大适应度 function

[nextgen,max_x,max_y,maxfitness]=selection(pregen) nextgen=[];

fitness=computefitness(pregen); %适应值函数 maxposition=

find(fitness==max(fitness)); [max_x,max_y]=

codemap(pregen(maxposition(1),:), 16,-10,10);

maxfitness=max(fitness);

virtualcopy=computecopy(fitness); %个体期望的复制数 count=numel(fitness);

%如果 virtualcopy 总和个数小于原种群个体数,全部复制

if(sum(virtualcopy)<count) nextgen=pregen; return; end

%如果 virtualcopy 总和个数大于原种群个体数,优先复制适应值较大的个体 if(sum(virtualcopy)>count)

%还可以复制的个体数目 rest=count;

while rest>0

maxnum=max(virtualcopy);

if maxnum<rest

for i=1:maxnum

nextgen=[nextgen; pregen(maxindex(1),:)]; end virtualcopy(maxindex(1))=0; rest=rest-maxnum; else

for j=1:rest

nextgen=[nextgen; pregen(maxindex(1),:)];

end rest=0; end end return; end

if(sum(virtualcopy)==count)

for k=1:count if virtualcopy(k)>0

for l=1:virtualcopy(k) nextgen=[nextgen;pregen(k,:)]; end end end end

end

%最大适应值个体应该复制的个数 maxindex=find(virtualcopy==maxnum); %最大适应值个体的位置

-6-

遗传算法求解函数最值

——by 孤鸿原野

摘要:遗传算法是一种十分常见的智能算法,它通过模拟生物进化过程,来求解最优化问题。本文主要介绍如何利用遗传算法求解函数的极值问题,并通过MATLAB编程,实现了对两个二元函数的最值的求解。

智能控制大作业 智能控制和智能系统作业一:遗传算法

关键字:遗传算法 MATLAB编程 函数最值

1 引言

遗传算法(Genetic Algorith,GA)最先是由美国Michgan大学的John Holland于1975年提出的。遗传算法是模拟达尔文的遗传选择和自然淘汰的生物进化过程的一种计算模型,常被用来求解最优化问题。遗传算法从一组随机产生的称之为“种群(Population)”的初始解开始搜索过程。根据问题的性质,对种群的每个个体进行适应性评价,得到适应值(fitness),适应值代表着该个体是问题解的适合程度。同时对该种群中好的个体进行复制和选择,并随机交叉(crossover)和变异(mutation),从而得到下一代种群。如此往复,经过一代代的选择和淘汰,最终得到问题的最优解或次优解。

3 遗传算法MATLAB程序实现

根据遗传算法的操作步骤,得到MATLAB实现遗传算法的程序流程图,如图1所示。

  

爱华网本文地址 » http://www.aihuau.com/a/318651/998801283988.html

更多阅读

阿朗掌门韦华恩:领导力不再是控制和命令

阿尔卡特朗讯CEO韦华恩(Ben J.Verwaayen)的观点总能让人眼前一亮,信心、快速决策、透明度是其应对新挑战的三大关键词。他反复强调全球化2.0时代,CEO的角色必须发生转变,要“赋能”给别人,而不是简单地控制和命令。关于创新机制,他认为判

声明:《智能控制大作业 智能控制和智能系统作业一:遗传算法》为网友帅气潮男分享!如侵犯到您的合法权益请联系我们删除