九大智能优化算法复习(2):遗传算法
智能家居系统可通过AI算法优化能源使用效率 #生活知识# #家居生活# #智能家居系统#
一、了解遗传算法:
遗传算法借鉴了达尔文和孟德尔的遗传学说。它的运行本质也就是模拟了物种在繁衍过程中,染色体通过一系列的步骤,将优质的遗传基因保存下来,而将大部分的劣质因子淘汰掉的过程。总得来说,遗传算法核心一般有:编码、选择、交叉、变异。当然对于具体问题,可能还有特殊的算子和参数设定。
二、理解遗传算法:
染色体:它代表了一个个体的几乎所有的性状表现,因此可以用染色体来代表一个个体,或者说问题的一个解。
基因:基因是组成染色体的基本单位,它构成了一个个染色体。于是我们将问题的解的因变量,作为其一个基因或基因组。
种群:种群由许多的个体组成,它能够更准确的反映出一个物种的优胜劣汰过程。若将时间定义的足够长,那么物种的基因的优势就趋近于最优,我们将物种的这种优势,定义为环境的适应度。就像字面意思,它表示了物种的个体,能够适应当前环境的程度,越大则生存能力越强,越趋近于最优解。
适应度:根据所需的因变量与自变量之间的关系,得到的一个函数值。也可以认为是函数fitness(x)=f(x),其一个个体x对于的函数值。
选择:从物种中筛选出较优的个体作为下一次遗传的种群。常用轮盘赌模型来选择。
交叉:通过等位基因的交叉互换能够,可能产生出新的更优个体与劣势个体。这里目的就是为了产生更优的个体。比如上面就是发生交叉的一种情形。
变异:就是某一基因发生突变,由原来的性状变成了其他的性状。例如,采用二进制的编码,某一段基因序列为:”101011”,经过基因突变,变成了序列:”100001”。
各种各样的物种稳定且互相兼容的共同生活,才有了我们日益精彩的世界。而追溯其本质,其实就是基因与自然界的“智能”筛选所导致的。
补充轮盘赌:在选择优质的染色体时,常常采用轮盘赌的模式。这里就是一个积累概率模式,以下面例子来说明:
假如上面就是一个轮盘,现在将一个筛子扔到轮盘中5次,结果:
2次扔到D区、2次扔到B区、1次扔到C区。
以区域占比作为扔中概率,则4个区域概率如图所示,那么怎么将四个区域在一个维度上来表示呢?
于是就想到了积累概率来达到这一个目的:
这样,点落在上面线段的4个部分的概率就是轮盘中各个区域的概率了。
分别为:在下列区间,
(0.03, 0.395)扔中2次
(0.395, 0.599)扔中1次
(0.599, 1)扔中2次
三、运用遗传算法:
接下来,谈谈为什么和怎么运用这种生命之美。首先,我们得知道遗传算法的特点,通俗点理解:
编码,使问题有一个通用性的解决办法。不管求解的是一个数字,还是一组数字,还是其他的形式。都可以运用这种模板化的解题思路。直接使用目标函数,不像我们一般求解最优,需要求导并讨论,找到极点的最值。多点搜索,相对比从一个点出发的搜索,有一种并行的优势。运用遗传算法理论,求一个函数在其定义域内的最大值。例子:f(x) = x + 10sin(5x) + 7cos(4x) 定义域:[0, 10]
matlab实现:
clear all;
clc;
x=0:0.01:10
y=x+10*sin(5*x)+7*cos(4x)
plot(x,y)
xlabel('x')
ylabel('y')
title('f(x)=x+10sin(5x)+7cos(4x)')
%% 以上为作图象 %%
clear all;
close all;
clc;
NP = 50;%种群中个体数量
L = 20;%染色体基因个数
Pc = 0.8;%交叉率
Pm = 0.1;%变异率
G = 100;%最大遗传代数
Xs = 10;%自变量x上界
Xx = 0;%自变量x下界
f = randint(NP, L);%产生NP个长度为L的01序列,以此作为种群的个体
for k = 1:G:
%遗传G次
for i = 1:NP
U = f(i,:)%第i个个体的基因序列
m = 0;%将个体01序列转换为十进制数
for j = 1:L
m = U(j)*2^(j-1)+m;
end
x(i) = Xx+m*(Xs-Xx)/(2^L-1);%将个体序列的十进制数,规格化成定义域内的点
Fit(i) = func(x(i))%对应此点(个体)的适应度值
end
maxFit = max(Fit);%最大适应度值
minFit = min(Fit);%最小适应度值
rr = find(Fit == maxFit) %最大适应度值对应的个体在种群中的位置
fBest = f(rr(1,1),:);%最优个体,因为后面将每一代的最优个体都放在第1个位置
xBest = x(rr(1,1),:);%最优适应度
%接下来是轮盘赌复制染色体:
sum_Fit = sum(Fit);
fitvalue = Fit./sum_Fit;%因为要选择适应度尽可能大的个体
%那么将适应度值占种群总适应度的比例,就能表示这个个体被选择的概率
%概率与适应度值成正比
fitvalue = cumsum(fitvalue);%对fitvalue求积累概率,为后面轮盘选择做铺垫
ms = sort(rand(NP,1));%用随机概率来决定是否选择此个体
fiti = 1;%表示第fiti个个体
newi = 1;%表示第newi个概率
%轮盘赌确定是否选择此个体
while newi <= Np
if (ms(newi)) < fitvalue(fiti)
nf(newi, ;) = f(fiti,:);
newi = newi + 1;
else
fiti = fiti + 1;
end
end
for i = 1:2:NP%交叉是两相邻染色体的动作
p = rand();%产生随机数,决定是否发生交叉
if p < pc
q = randint(1,L);%随机决定一对等位基因发生交叉
for j = 1:L
if q(j) == 1;
temp = nf(i+1, j);
nf(i+1, j) = temp;
nd(i, j) = temp;
end
end
end
end
%接下来是变异操作
i = l
while i <= round(NP*Pm)%计算发生变异的个体数量
h = randint(1,1,[1,NP]);%随机选取一个需要变异的染色体
for j = 1:randint(L*Pm) %计算发生变异的基因数量
g = randin(1,1,[1,L]);%随机选取一个需要变异的基因
nf(h,g) = ~nf(h,g);
end
i = i+1
end
f = nf;%将新的种群准备开始下一次遗传
f(1,:) = fBest; %将当前最优个体加入此种群,保留局部最优解,fBest就是最终的解
trace(k) = maxFit;%保留当前最优适应度,最后一代最优结果就是trace(G)
end
xBest;
figure;标出最优点
plot(trace)
xlabel('迭代次数')
ylabel('目标函数值')
title('适应度进化曲线')
%%适应度函数%%
function result = func(x)
fit = x+10*sin(5*x) + 7*cos(4*x);
result = fit;
网址:九大智能优化算法复习(2):遗传算法 https://www.yuejiaxmz.com/news/view/102475
相关内容
APS智能排产+运筹优化算法=?强化学习中的策略迭代算法优化研究
算法人生(15):从“智能任务调度算法”到“15
算法在身边——学习算法从妈妈的菜谱开始
【深度学习】深度学习语音识别算法的详细解析
揭秘AutoML:智能推荐算法如何改变你的生活?
离散化算法
干货!学霸们总结分享的九大学习方法,早看早进步
一文看懂机器学习「3 种学习方法 + 7 个实操步骤 + 15 种常见算法」
揭秘生活小窍门:这些常用算法,让你生活更智能!