文章目录
1、遗传算法的基本内容
1.1 发展概况
- 1962年,Holland提出了关于遗传算法的基本思想。
- 1967年,Holland的学生Bagley在他的博士论文中第一次采用了“遗传算法”这个术语。
- 20世纪70年代初期,遗传算法的数学框架和理论基础形成。
- 1975年,Holland发表《自然系统和人工系统的自适应性》(“Adaptation in Nature and Artificial Systems”),对遗传算法进行了系统且详细的论述。
- 20世纪80年代以来是遗传算法快速发展的上升期。
1.2 基本概念
- 种群(Population):种群是指用遗传算法求解问题时, 初始给定的多个解的集合。遗传算法的求解过程是从这个子集开始的。
- 个体(Individual):个体是指种群中的单个元素,它通常由一个用于描述其基本遗传结构的数据结构来表示。例如,可以用0、1组成的长度为l的串来表示个体。
- 染色体(Chromosome):染色体是指对个体进行编码后所得到的编码串。染色体中的每1位称为基因,染色体上由若干个基因构成的一个有效信息段称为基因组。
- 适应度(Fitness)函数:适应度函数是一种用来对种群中各个个体的环境适应性进行度量的函数。其函数值是遗传算法实现优胜劣汰的主要依据。
- 遗传操作(Genetic Operator):遗传操作是指作用于种群而产生新的种群的操作。标准的遗传操作包括以下3种基本形式:选择(Selection) 、杂交(Crosssover) 、变异(Mutation)。
遗传算法通过在计算机上模拟生物的进化过程和基因的操作(选择、 交叉、变异)进行实现。
1.3 步骤
1.4 特点
- 不论待求解问题是求最大值问题还是求最小值问题,我们可将待求解的问题一律看成求解最大值问题。转化方法如下:如果优化问题是求函数 f 的最小值,它等同与求函数 g 的最大值,其中 g = - f,即 min f(x) = max g(x) = max{ -f(x) }。
- 目标函数 f 在其值域里只取正值,若为负,可通过加入某个正数 C 使之为正,即 max g(x) -> max{ g(x) + C }。
2、遗传算法代码分析
2.1 函数分析
2.1.1 Rastrigrin()函数
数学表达式:
代码:
function y = Rastrigrin(x)
% Rastrigrin函数
% 输入x,给出相应的y值,在x = ( 0 , 0 ,…, 0 )处有全局极小点0
[row,col] = size(x);
if row > 1
error( ' 输入的参数错误 ' );
end
y = sum(x.^2-10*cos(2*pi*x)+10);
%y = -y;
2.1.2 Schaffer()函数
数学表达式:
代码:
function y = Schaffer(x)
%Schaffer函数
%输入x,给出相应的y值,在x=(0,0,…,0)处有全局极大点1
[row,col] = size(x);
if row > 1
error('输入的参数错误');
end
y1 = x(1,1);
y2 = x(1,2);
temp = y1^2 + y2^2;
y = 0.5 - (sin(sqrt(temp))^2-0.5)/(1+0.001*temp)^2;
y = -y;
2.1.3 Griewank()函数
数学表达式:
代码:
functi