Matlab实现遗传算法在二值图像重建问题中的应用
Posted 这是一个很随便的名字
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matlab实现遗传算法在二值图像重建问题中的应用相关的知识,希望对你有一定的参考价值。
遗传算法
GA 算法的灵感来自查尔斯·达尔维 (Charles Darwi) 提出的生物进化理论。实际上,GA中模拟的主要机制是适者生存。在自然界中,更健康的生物体生存的可能性更高。这有助于他们将基因转移到下一代。随着时间的推移,让物种更好地适应环境(避开敌人并寻找食物)的良好基因在后代中占据主导地位。受自然界中染色体和基因的启发,GA 算法将优化问题表示为一组变量。优化问题的每个解对应一个染色体,每个基因对应问题的一个变量。
进化计算
进化计算是一系列受生物进化启发的全局优化算法,是研究这些算法的人工智能和软计算的子领域。从技术上讲,它们是一系列具有元启发式或随机优化特征的基于群体的试错问题求解器。
本文是将遗传算法用于图像重建
代码:
function [BestChrom] = GeneticAlgorithm (M , N, MaxGen , Pc, Pm , Er , obj, visuailzation)
load IMG_REF_BINARY;
cgcurve = zeros(1 , MaxGen);
%% Initialization
[ population ] = initialization(M, N);
for i = 1 : M
population.Chromosomes(i).fitness = obj( population.Chromosomes(i).Gene(:), IMG_REF_BINARY);
end
g = 1;
disp(['Generation #' , num2str(g)]);
[max_val , indx] = sort([ population.Chromosomes(:).fitness ] , 'descend');
cgcurve(g) = population.Chromosomes(indx(1)).fitness;
subplot(1,2,2)
%% Main loop
for g = 2 : MaxGen
disp(['Generation #' , num2str(g)]);
for k = 1: 2: M
% Selection
[ parent1, parent2] = selection(population);
% Crossover
[child1 , child2] = crossover(parent1 , parent2, Pc, 'double');
% Mutation
[child1] = mutation(child1, Pm);
[child2] = mutation(child2, Pm);
newPopulation.Chromosomes(k).Gene = child1.Gene;
newPopulation.Chromosomes(k+1).Gene = child2.Gene;
end
% Calcualte the fitness values
for i = 1 : M
newPopulation.Chromosomes(i).fitness = obj( newPopulation.Chromosomes(i).Gene(:), IMG_REF_BINARY);
end
% Elitism
[ newPopulation ] = elitism(population, newPopulation, Er);
cgcurve(g) = newPopulation.Chromosomes(1).fitness;
population = newPopulation; % Replace the previous population with the newly made
BestChrom.Gene = population.Chromosomes(1).Gene;
BestChrom.Fitness = population.Chromosomes(1).fitness;
col_no = size(IMG_REF_BINARY,2);
Recons_IMG = vec2mat(BestChrom.Gene , col_no);
Recons_IMG = Recons_IMG .* 255;
% if rem(g , 100) == 0
subplot(1,2,2)
imshow(Recons_IMG);
title(['Generation #' , num2str(g), ' Error = ' , num2str(-BestChrom.Fitness)])
drawnow
% end
end
if visuailzation == 1
figure
plot( 1 : MaxGen , cgcurve);
xlabel('Generation');
ylabel('Fitness of the best elite')
end
end
运行结果:
以上是关于Matlab实现遗传算法在二值图像重建问题中的应用的主要内容,如果未能解决你的问题,请参考以下文章