遗传算法的特性以及在具体算法应用中的应用

遗传算法的特性以及在具体算法应用中的应用

1 引言

​ 近些年以来,随着人工智能领域的不断发展,数据处理和分析的量变得越来越大,随之而来的考验便是如何解决大量数据的处理和算法优化。而面对大规模的集成优化问题,先贤们发表了各种自己的高谈阔论,并有了许多种行之有效的解决方案。这些方案更是被广泛地运用在诸如:图像处理、任务分配、信号处理等方面。而在其中,如何更加高效得取得在可接受范围内的最优解,便成为了学者们研究的重点和难点。

​ 遗传算法(Genetic Algorithm)是近50年来,人们借助自然界中的遗传规律与进化思想来解决问题总结而成的一种系统性算法,而这样的系统通过生成一系列具有若干特性的个体,再利用遗传算子选择模仿生物演化策略,并不断迭代来找到相对最优解或规定阈值。

​ 而在这类问题中,其演化策略所提炼出的演化程序(Evolution Programs——EP),通常以以下程序的形式进行结构化演示。

procedure evolution program`
begin
	t⬅0
	initialize P(t)	//数据初始化
	evaluate P(t)	//对个体进行评估
	while( not termination condition )do	//迭代结束条件
	begin
		t⬅t+1
		select P(t) from P(t+1)	//选择符合要求的优秀个体
		alter P(t)	//对某些个体进行杂交(np概率)/变异(mp概率)
		evaluate P(t)	//重新评估是否达标
	end
end

//同时其结束的情况分为以下三种:
//1.已完成了指定的最高迭代代数,强制停止
//2.某一代已经达到相对最优解(达到满意的阈值)
//3.迭代了若干代后都未有所改变

​ 这种古典的演化程序已经出现了许多版本,但是以下举例的版本是对染色体表达使用适当的可能是复杂的数据编码结构以及相应的遗传算子集,所以将使用经典的定长度二进制串来作为染色体的数据结构编码来表示个体,并仅使用变异与杂交这两个遗传算子。同时它也遵循自然选择的共同规律:即在进化迭代的过程之中,个体将会为生存而竞争(被筛选)。

​ 在人工智能(AI)研究的早期,通用问题解决器(General Problem Solvers,GPS)被设计成解决复杂化问题的工具。但是由于这些系统必须具备与问题有关的知识,同时又由于太过于复杂变得无法管理。而选择,遗传算法仍然被当成解决优化问题的标准工具,但是又由于其太具有独立性而不适于诸多应用。所以这些研究将导致新的编程方法论被称作为演化程序设计(EVA——Evolution ProgrAmming)。也就是说,我们不仅仅需要选择合适的数据编码结构及遗传算子,同时还需要选择评价函数和初始化群体。

​ 但是我们在此只研究只研究其特性和其在具体算法中的应用。

2 通过与差分进化算法(Differential Evolution,DE)的比较总结出GA遗传算法的特点

​ 我们选择以

2.1 研究问题

​ 对于研究DE和PSO与GA的算法问题,我们不妨以优化的三个要求来评价他们的区别。

​ 1.公平性(迭代次数、计算量)

​ 2.单次测试,多次测试产生的(最优、最差、平均值、标准差)

​ 3.是否找到满足精度的函数解(成果次数)

2.2 差分进化算法简介

​ 差分进化算法是一种基于群体差异的启发式随机搜索算法,而该算法也是一种只智能优化算法。它的流程也是分为以下几步:

​ Step 1.初始化种群 //控制参数并随机产生初始种群同时产生评价

​ Step 2.变异 //进行差分变异,即由个体Xi和变异个体Vi进行交叉操作生成一个新的实验个体Ui

​ Step 3.交叉

​ Step 4.选择 //通过选择操作确定下一代的新种群

2.3 粒子群算法介绍

​ 粒子群算法是近些年较为流行的进化算法,其核心内容也采用了"群体"和“进化”的概念来描述算法来表示[1]。

​ 其流程也分为以下几步:

​ Step 1.初始化种群,并在空间中随机初始化一群粒子,让每一个粒子都位优化问题对应一个可行解

​ Step 2.评估 //评估每个粒子并得到全局最优

​ Step 3.更新 //将每个粒子将在空间中进行运动,用速度向量来描述其方向和距离

​ Step 4.更新最优 //粒子会追随其当前最优粒子而运动,并进行搜索得到最优解,每一代都会找两个极值,一个是粒子本身迄今为止找到的最优解,一个是全种群迄今为止找到的最优解

​ Step 5.若满足某种条件则执行否则退出

2.4 GA算法介绍

​ 遗传算法起源于对生物系统所进行的计算机模拟研究。它是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法,借鉴了达尔文的进化论和孟德尔的遗传学说。其本质是一种高效、并行、全局搜索的方法,能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制搜索过程以求得最佳解。

​ 其演化流程也分为 以下几个步骤;

​ Step 1.初始化目标群体

​ Step 2.评估 //计算群体上每个个体的适应度

​ Step 3.按照由个体适应性值所决定的某个规则进入下一代的个体

​ Step 4.按照概率np进行杂交操作

​ Step 5.按照概率mp进行变异操作

​ Step 6.若满足某种条件泽执行否则退出

​ 退出条件:

​ 1.已完成了指定的最高迭代代数,强制停止

​ 2.某一代已经达到相对最优解(达到满意的阈值)

​ 3.迭代了若干代后都未有所改变

​ Step 7.输出种群中适应度最优染色体问题作为问题的解

2.5 比较程序

​ 以下为评估DE算法所产生的matlab最优解代码:

global fes          %fes统计函数计算次数
MAXRUN = 10;        %独立测试次数
for run = 1:MAXRUN
       ......		%省略掉评估生成部分代码      
       fprintf('第%d次运行\t第%d代\t%f\n',run,0,trace(1));
       onerunfile = fopen([‘F1_run’ num2str(run) ‘.txt’],‘w’);   %建立第run次运行的记录文档
       fprintf(onerunfile,‘%d\t%d\t%g\r\n’,0,fes,trace(1));       %写入第0代种群结果
       for gen=1:G       %差分进化循环
		......		%....忽略差分过程代码…      
        fprintf(onerunfile,‘%d\t%d\t%g\r\n’,gen,fes,trace(gen+1)); %写入第gen代结果
		%输出格式为:【第几代,对应函数评价次数,对应获得的最优函数值】
       end
       fclose(onerunfile); 
end

​ 以下为评估DE算法公平性及用时的matlab最优解代码:

global fes          %fes统计函数计算次数
MAXRUN = 10;        %独立测试次数
funfile = fopen(‘F1total.txt’,‘a’);          %w 改为a表示添加(w表示覆盖原有内容,a为在最后添加)
for run = 1:MAXRUN
       ......		%省略掉评估生成部分代码   
       t0 = clock;	 %记录当前时刻
       tall = 0;	 %统计计算总用时(排除写文件用时)
       for gen=1:G       %差分进化循环
		......		%....忽略差分过程代码…     
                tall = tall + etime(clock,t0);      %累加计算用时(单位秒,排除写文件用时)
                fprintf(onerunfile,'%d\t%d\t%g\r\n',gen,fes,trace(gen+1)); %写入第gen代结果
                t0 = clock;      %记录当前时刻
       end
       fclose(onerunfile); 
       fprintf(funfile,‘%d\t%g\t%g\r\n’,run,trace(gen+1),tall); %输出第run次运行最优值和用时
End
fclose(funfile);

​ 以下为评估DE算法所产生的matlab最优、最差、平均值、标准差代码:

tallrecord = [];		      %用于记录每次独立测试的运行用时
bestfrecord = [];                             %用于记录每次独立测试得到的最优函数值
allfile = fopen(‘total.txt’,‘a’);            %w 改为a表示添加(w表示覆盖原有内容)
for run = 1:MAXRUN
      ......		%省略掉评估生成部分代码 
       t0 = clock;	 %记录当前时刻
       tall = 0;	 %统计计算总用时(排除写文件用时)
       for gen=1:G       %差分进化循环
		......		%....忽略差分过程代码… 
       end
       fclose(onerunfile); 
       tallrecord = [tallrecord,tall];     %添加第run次独立测试的运行用时
       bestfrecord = [bestfrecord, trace(gen+1)]; %添加第run次独立测试得到的最优函数值
       fprintf(funfile,‘%d\t%g\t%g\r\n’,run,trace(gen+1),tall); %输出第几次运行最优值和用时
End
fclose(funfile);
fprintf(allfile,'%s\t%g\t%g\t%g\r\n','F1',min(bestfrecord),mean(bestfrecord),mean(tallrecord));
%输出汇总信息:【函数名,多次运行最优值,平均值,平均用时】

[2]

procedure PSO
		for each particle i
			Initialize velocity Vi and position Xi for particle i
			Evaluate particle i and set pBesti = Xi
		end for
		gBest = min {pBesti}
		while not stop
			for i=1 to N
				Update the velocity and position of particle i
				Evaluate particle i 
				if fit(Xi) < fit(pBesti)
					pBesti = Xi
				if fit(pBesti) < fit(gBest)
					gBest = pBesti
			end for
		end while
		print gBest
	end procedure 

[3]

2.6 比较结果

*GADEPSO
是否需要对可行解排序需要不需要不需要
种群规模运行对运行时间的影响指数级线性线性
是否会产生过早收敛的情况有可能出现不太可能出现很可能
在搜索空间中是否具有连续性一般是离散出现连续连续

2.7 差异性分析

初始化

​ 可行解一般需要经过一定地初始化得到最初的种群与测定属性。而在施行初始化的时候,考研使用随机数来实现,使用[0,1]内的随机数产生,然后将这个随机生成的值映射至可行范围内比如就可以形成类似:


x = λ ∗ ( x ( m a x ) − x ( m i n ) ) + x ( m i n ) x = λ*(x_(max)-x_(min))+x_(min) x=λ(x(max)x(min))+x(min)
​ 这样就可以将随机生成的数字λ映射到取值范围为
[ x ( m a x ) , x ( m i n ) ] [x_(max),x_(min)] [x(max),x(min)]
​ 的实际值中来。

迭代

​ GA算法中,会对最好的k个相对最优解进行提取,并将他们进行杂交和遗传变异,产生若干组新的解;

​ 而在DE算法中,则是随机选择了n个与自己属性不同的个体进行影响,从而差分地形成新的若干的组。

​ 而这样的差别导致了GA算法中必须将得到的迭代结果进行一轮可行解排序,从而更方便地找到那k个相对最优解法,同时对于差分法来说因为不需要判定其是否为最好的相对最优解所以也不必进行排序。而这样的差别也显示出来了这两种算法的时间复杂度上的区别,仅仅在需要对每一代进行排列这一项,便将GA算法的时间复杂度提升到了指数级别。

选择

​ 演化程序在不断地演化中,会在每一代都淘汰掉一些不合格的解,即优胜劣汰。而通过这样的淘汰我们不难理解,种群的个体所需要的适应度会变得越来越接近相对最优解,相较于前解而言,它们可能会出现提升,但是为了避免陷入局部最优的“陷阱”中,遗传算法和差分进化算法都会采用,遗传杂交和变异算子来对数据进行处理以此来减缓局部最优解循环的出现。

​ 但是在这个方面中GA算法与DE算法并没有出现太大的差异,都会在每一代挑选一定小概率的个体,对其进行杂交、变异操作用于避免出现前文所提到过的“迭代了若干代后都未有所改变解的适应度”的情况,导致提前结束迭代。

2.8 结论

​ 而通过以上的研究我们大致以及可以归纳出遗传算法与差分进化算法的一些分析归纳:

编码标准

​ 由学者莫鸿强的研究[4]和我们前面的论述,我们可以知道GA算法,是采用了二进制编码,从而被大规模运用于0-1非线性优化问题、整数规划问题、混合整数规划问题中;而与此相对,DE和PSO算法采用实数编码,其中PSO算法应用于求解离散型问题,而DE算法对其离散化的研究较少,因为它对于种群规模化运行是线性的。

参数设置问题

​ 我们可以通过前面的代码以及金群、李欣然在遗传算法参数设置及在负荷建模中的应用[5]中提到过的GA算法与DE算法在参数设置难度上可以了解到,GA算法类似于PSO粒子群算法,需要设置许多参数来修正结果,其中不同参数的设置也对最终结果的影响较大,需要不断调整参数,有着较大的使用难度。同时GA算法在高维问题中,面对极高的向量维数也是显得有些复杂。而对比DE算法来说,DE算法主要仅由两个主要参数需要调整,且参数不同的设置对于结果的影响也不算十分明显,所以其使用难度较于GA算法来说更加容易。

高维问题

​ 通过前面对参数的设置和调整难度,我们不难可以看出面对高维问题上,GA算法的性能还需要进一步的优化其使用难度与处理时间,而DE算法和PSO算法则可以很好的解决其收敛速度过慢和结果模糊的问题。

收敛性能

​ 由前面的表格即运行结果我们不难看出,面对优化问题GA算法和DE算法的收敛速度都比较快,且不会出现不稳定的情况。但是PSO容易陷入局部最优解中,导致算法不稳定。

应用广泛性

​ 对于GA算法而言,其发明的时间远远早于DE算法,其应用的领域也是比较广泛,但是由于它所面对的问题也依旧存在,例如:对高维问题的处理速度过慢,参数调整设置过于复杂等问题。而PSO算法和DE算法的在近十年才被广泛研究,但是由于它具有的性能极其优秀,它的应用领域也会被逐渐拓宽。

3 爬山法、退火法、遗传算法的简单优化实例

​ 我们在讨论遗传算法在具体简单函数优化中的特性时,常常将其与其他算法问题相结合比较。而相较于从遗传算法观点出发的囚徒困境问题和旅行商复杂问题等,我们选择采用更加直观的简单函数优化来阐述其特性。

​ 而针对简单函数的优化问题我们就需要假设出来一个简单的目标函数对其进行具体优化。在这里我们选择采用米凯利维茨先生在《演化程序》一书中假设的例子来简单阐述其特性[6]。

​ 假设搜索空间是以长度为30的二进制串:
v v v
​ 目标函数:
f f f
​ 来求取:
f ( v ) = ∣ 11 ∗ o n e ( v ) − 150 ∣ f(v)=|11*one(v)-150| f(v)=11one(v)150
​ 的最大值。

​ 举个例子:
在 下 列 子 串 中 v 1 = ( 110110101110101111111011011011 ) 在下列子串中 v_1=(110110101110101111111011011011) v1=(110110101110101111111011011011)

v 2 = ( 111000100100110111001010100011 ) v_2=(111000100100110111001010100011) v2=(111000100100110111001010100011)

v 3 = ( 000010000011001000000010001000 ) v_3=(000010000011001000000010001000) v3=(000010000011001000000010001000)

由 于 : o n e ( v 1 ) = 22 , o n e ( v 2 ) = 15 , o n e ( v 3 ) = 6 由于:one(v_1)=22,one(v_2)=15,one(v_3)=6 one(v1)=22,one(v2)=15,one(v3)=6

与 之 对 应 的 就 是 f ( v 1 ) = ∣ 11 ∗ 22 − 150 ∣ = 92 与之对应的就是f(v_1)=|11*22-150|=92 f(v1)=1122150=92

f ( v 2 ) = ∣ 11 ∗ 15 − 150 ∣ = 15 f(v_2)=|11*15-150|=15 f(v2)=1115150=15

f ( v 3 ) = ∣ 11 ∗ 6 − 150 ∣ = 84 f(v_3)=|11*6-150|=84 f(v3)=116150=84

​ 由于函数是线性的,而且优化起来比较容易我们在此就也只是简述其大致思想。

​ 已知函数 f 的特征便是它拥有一个全局最优解,即:
v g = ( 111111111111111111111111111111 ) v_g = (111111111111111111111111111111) vg=(111111111111111111111111111111)

f ( v g ) = ∣ 11 ∗ 30 − 150 ∣ = 180 f(v_g) = |11*30-150| = 180 f(vg)=1130150=180

​ 而且已知有局部最大值:
v 1 = ( 00000000000000000000000000000 ) v_1=(00000000000000000000000000000) v1=(00000000000000000000000000000)

易 得 可 知 f ( v 1 ) = 150 易得可知f(v_1)=150 f(v1)=150

3.1爬山法

3.11 最速上升爬山法

​ 由于不同的爬山法,对于新子串的选择是不尽相同的,所以在这里为了演示其特点,我们选择了最简单的迭代怕还是你算法(最速上升爬山法),经历MAX次迭代所得:

	procedure iterated hillclimber
	begin
		t←0
		repeat
			local←FALSE		//为了随机选择当前子串v_c;
			evaluate v_c
			repeat		//通过翻转(flipping)单个字节选择附近的子串;比较新子串和原来子串;
				if	f(v_c)<f(v_n)
					then v_c ← v_n
					else local ← TRUE 
			until local
			t ← t+1
		until t = MAX
	end
				
3.12 评估

​ 在最初,所有的相邻子串都被考虑,然后选择其中最大的和当前串比较,取更大的那个作为当前串。这样寻找到所有比较的最优,达到局部最优的作用。

​ 但是我们可以从上面的伪代码可知,这种爬山算法一次迭代是否生效是由随机产生的初始子串决定的。如果随机子串中,它的值如果小于7(即v子串中只有13个甚至更少1)那么迭代就会朝着错误的方向进行。因为假设其增加一个“1“,令v子串的值增加到14个“1”,由于其算式中绝对值的影响,它的返回值反而会减少到4;反之,如果减少v子串中“1”的数量就会增大最终的值。这样迭代下去,极可能引导搜索向错误的方向进行寻找,导致最后极可能停留在局部最优解而并不是全局最优解。

​ 而我们发现,在这个函数中,它停留在局部最优解的概率接近一半,找到全局最优解的机会十分渺茫。

3.2 模拟退火法

3.21 用热平衡的思想描述模拟退火算法

	procedure simulated amnealing
	begin
		t ← 0
		initialize temperature T		//创建一个随机子串v_c,同时对其进行一个评估
		repeat
			repeat		//选择v_c子串和与v_c相邻的子串进行翻转(flipping)产生新的v_n
			if f(v_c)<f(v_n)
				then v_c ← v_n
				else if random[0,1) < exp(f(v_n)-f(v_c)/T)
					then v_c ← v_n
			until (termination-condition)
			T ← g(T,t)
			t ← t+1
		until (stop-criterion)
	end

​ 在此图中random函数返回的是区间[0,1)中的一个随机数,而在下面的termination-condition中反应的是为了检查是否达到了“热平衡”的条件,即是否选择新子串的概率接近Boltzmann分布(描述热平衡状态下的气体分子分布)。

​ 而在关于温度的调整中,温度T将在g(T,t)<T的情况下降温,而在stop-criterion中将会对温度进行判断,令系统判断是否以及被冻结(不再变化)。

3.22 评估

​ 而正是因为这样的原因,在面对值为18时(由至少12个“1“组成的v子串),它获得的值为18(避开了局部最优)而对于爬山法所返回的局部最大值(v子串全部为0)而言,退火法对于此子串的判读则是:将有13个”1“组成的子串评价为7。

​ 虽然这个评价仍然小于18,但是模拟退火算法仍然将这个新的子串作为当前串的概率为:
p = e x p ( f ( v n ) − f ( v c ) ) / T = e x p ( 7 − 18 ) / T p=exp{(f(v_n)-f(v_c))/T} = exp{(7-18)/T} p=exp(f(vn)f(vc))/T=exp(718)/T
​ 而对于当前的串来说,假设温度T为20,可得:
p = e − 11 20 ≈ 0.57695 p=e^\frac{-11}{20}≈0.57695 p=e20110.57695
​ 其采取此子串为新子串的概率大于50%,所有相较于爬山法而言,模拟退火法想要获得全局最优解的可能性会大得多。

3.3 遗传算法

3.31 表达

​ 在遗传算法中,我们也使用一个二进制向量来作为一个染色体来表示变量的真值,而对于数据的精度,我们也不妨将其设为小数点后5位。其中30位的染色体在我们生成的随机子串中不妨用[0,1)来映射,这个操作我们可以用两步来完成:

​ 1.将二进制串从二进制转换为十进制
( v ) 2 = ( ∑ i = 1 30 v i ∗ 2 i ) 10 (v)_2=(\sum_{i=1}^{30}{v^i*2^i})_{10} (v)2=(i=130vi2i)10
​ 2.找到对应的实数令
f ( v ) = ∣ 11 ∗ o n e ( v ) − 150 ∣ f(v)=|11*one(v)-150| f(v)=11one(v)150
​ step.1:创建初始群体

​ step.2:创建评价函数

​ step.3:创建变异与杂交算子

​ 例如:随机选择染色体上的第5位进行变异,同样以评价18的值为例。
原 v = ( 000000000000000000111111111111 ) 变 为 v n = ( 000000000000000000111111101111 ) 原v=(000000000000000000111111111111)变为v_n=(000000000000000000111111101111) v=(000000000000000000111111111111)vn=(000000000000000000111111101111)
​ 随机对表现优异的子代进行变异操作并将其视为本代中的其他子串,而变异后的子代也大概率会因为比父代的评价好,而被保留,通过这样的方式取保证足以找到更优的解,且不会陷入局部最优解的”错误路线“

​ 同理我们也可以根据这类逻辑创建杂交算子,例如将第五位与第20位进行交换:
原 v = ( 000000000000000000111111111111 ) 变 为 v n = ( 000000000100000000111111101111 ) 原v=(000000000000000000111111111111)变为v_n=(000000000100000000111111101111) v=(000000000000000000111111111111)vn=(000000000100000000111111101111)
​ 随机对表现优异的子代进行杂交操作并将其视为本代中的其他子串,而杂交后的子代也大概率会因为比父代的评价好,而被保留,通过这样的方式取保证足以找到更优的解,且不会陷入局部最优解的”错误路线“

3.33 遗传算法
	procedure genetic algorithm
	begin
		initialize a group and evaluate the fitness value 
		while not convergent 
			begin
				select
				if random[0,1]<pc 
					then	crossover
				if random (0,1)<pm 
					then	mutation 
			end
	end
3.32 评估

​ 正如我们所设想的那样,遗传算法陷入局部最优解的概率是三种算法中最低的。

​ 而在实际运行后的遗传算法在面对实际值等于18这个”陷阱“时具有更好的规避行为,因为即使是处于18时,也可以通过随机到的变异、杂交子串,创建出新的子代,然后这些子代中总能带领着接下来的子代们原理”“陷阱”

​ 而其实在针对这个问题上,还有着更深的讨论[7],也可以构造爬山法和遗传算法的混合变种——动态爬山法[8]。

3.4 比较

​ 以一种比较直观形象的比较则是,假设,我们拥有一个袋鼠,将其放置于各种方法中,令它去寻找不同的山峰,来获取最高点的方位。

爬山法:

​ 我们随机在一个地点放置一个袋鼠,去命令它找到距离自己最近的山峰,但是,我们并不能保证它能找到的山峰就是我们所需要的“喜马拉雅山”。它确实是每次都在寻找更高的山峰,但是我们并不能保证它没有陷入局部最高的陷阱中,毕竟袋鼠并不能一眼望尽世界上所有的山峰,它也只会受限于视野,落入局部最优解中。

模拟退火法:

​ 我们将一群袋鼠注射兴奋剂,让他们不满足于眼前的最高峰,而忽略当前的视野,认为还存在更高的山峰,但是兴奋剂的功效总有一天会消失,失去刺激的袋鼠们,会寻找自己视野范围内的最高山峰当成任务目标。所有我们也不能认定袋鼠一定可以找到最高峰,但是相对于爬山法来说它们找到最高峰的概率确实大幅上升了,但是仍然和我们的期望有所区别。

遗传算法:

​ 我们通过一架超大的飞机,里面装满了袋鼠,随机将袋鼠放置在各个山随机部位,但是我们可以不告诉袋鼠们他们需要找到“珠穆朗玛峰”。但是每过几年,我们就将射杀相对处于低洼地势的袋鼠,并且让活下来的袋鼠多产,于是在若干年之后,我们就会射杀完所有不处于“珠穆朗玛峰”的袋鼠,并且可以确保有一大群袋鼠处于“珠穆朗玛峰”处。

4.展望总结

​ 为时一个月的论文撰写,而这篇极其不成熟的文字更像是一篇我的学习笔记,亦或者是我对感兴趣方向的学习缩影,回顾论文撰写的准备阶段,亦或者是撰写文字中经历的各种各样的事情,让我明白了,一切都需要自己去动手,去探索才会觉得之前的东西并非是无字天书一般令人望而生畏。

​ 当然这篇文字,也不说,我就只学习了这么多,而是说在学习“遗传算法“这一概念时,最令我感触深刻的两个方面,或许我现在掌握的部分甚至只是入门知识,但是当我面对着《演化程序》这本书,从看序言花费了接近半学期,再到断断续续看了又看,不断从头开始,终于还是选择提起劲来开始动手学习。

​ 而为什么要选择这个方向上开始学习呢?其实我首先去系统学习的是目前正火的机器学习部分,但是在对周志华教授所著的《机器学习》进行研读时,我认识到了自己数学水平的极度贫瘠,真正有了一个公式看一天的实际后,我开始对这个方向感到了一些迷茫,而当我在学习完支持向量机后,我又一次对这个方向产生了怀疑,因为我甚至无法依靠它做出任何一个实例,于是我决定将其稍微放置以下,等到我数学水平稍微高一些后再来学习。

​ 而在这时我又想起了,智能优化算法的方向,又经由一段时间的学习后,才发现,原来我之前对于这个方向的前景的理解出现了不小的偏差。等到再次较为全面地了解了这个方向后,才恍然大悟,重新燃起来了对这个方向的兴趣。而且说来有些不相干的内容,便是我从初中正式开始学习生物以来,便对其有着强烈的兴趣,虽然智能优化算法和生物知识的联系也不算是特别紧密,但是它在实例的应用上,也是让我久违的感受到了对生物的那种热情。而在众包计算和交通物流的应用方面也让我对这个方面产生了一定的兴趣,与学好它的欲望。

​ 而这种大规模的群体验算,通过对参数的控制变动,不断的迭代变异,也为我开启了一扇,以前从来没有接触过的,对复杂问题的计算解法。而对于遗传算法而言,它也并非是一成不变的,它对于不同场景的化归问题,也令我十分感兴趣,就正如那句话所说”既然山不能到穆罕默德那里去,那么穆罕默德就到山那里去”。

​ 回到这篇文章的本身来讲,它所涉及的GA算法于DE算法的比较(其实还有两者于PSO算法和ACO算法的比较,但是限于篇幅就不再赘述)是我准备的时候最为头疼的点,因为我从这里深刻地理解到,经典,虽然是经典,但是其中经典所涉及到的局限性也是很难跨越,无论如何它的时间复杂度与成本总是十分受参数限制,同时,在老大难问题:高维的问题求解上,也有着避不开的缺陷。而与之相比更加年轻的DE算法则是在某些具体问题上,有着显著的优点(见2.5和2.6),同时它的时间成本也显得更加低廉,也能较好地解决过早收敛问题和线性处理问题。

​ 但是另一方面来说,较之于爬山法和模拟退火算法在优化问题上来说,遗传算法却有着二者无法比拟的优势,同时遗传算子的加入,又进一步提高了程序优化趋向全局最优解的能力。当然希望在此之后的学习中,能够有效解决遗传算法所涉及到的:

​ 1.面对高维问题的局部最优解急剧增多问题

​ 2.解决面对高维问题时,其时间复杂度和空间指数急剧扩张的问题

​ 3.在静态环节的优秀性能在动态环境中有明显下降问题

​ 在提升效率的同时,也要同时保证程序的有效性。

5. 参考文献

​ [1]LIU ChenLIN Ying and HU Xiaomin Analyses and Comparisons of Different Update Strategies for Differential Evolution[J].Journal of Frontiers of Computer Science and Technology 2013.7(11):983-993

​ [2]Hu Xiaomin Intelligent Optimization Algorithm - Differential Evolutionary Algorithm [R]

​ [3] Chen Liangbo and Zheng Yaqing Application of Particle Swarm Algorithm in Multi-Peak Function Optimization [J]. Journal of Guizhou Normal University 2012

​ [4]Mo Hongqiang, Mo Hongqiang: A study on the search capability and encoding method of genetic algorithm [D]. South China University of Technology 2001

​ [5]Jin Qun and Li Xinran Genetic algorithm parameter setting and its application in load modeling [J]. Electrical Automation Equipment 2006, Issue 05

​ [6]Zbigniew Michalewicz Evolutionary procedures - a combination of genetic algorithms and data coding[M] pp 20-22

​ [7]Ackley.D.H An Empirical Study of Bit Vector Function Optimization[J].Genetic algorithms in multimodal. pp 170-204

​ [8]Dixmier.G.bahler.D and Yuret.D Dynamic Hill Climbing. AI Expert[J]. march 1994 . pp 26-31

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值