网易首页 > 网易号 > 正文 申请入驻

速成 | 遗传算法详解及其MATLAB实现

0
分享至

1、遗传算法流程

遗传算法的运算流程如下图所示:

具体步骤如下:

(1)初始化。设置进化代数计数器 ,设置最大进化代数 ,随机生成 个个体作为初始群体 。

(2)个体评价。计算群体中各个个体的适应度。

(3)选择运算。将选择算子作用于群体,根据个体的适应度,按照一定的规则或方法,选择一些优良个体遗传到下一代群体。(4)交叉运算。将交叉算子作用于群体,对选中的成对个体,以某一概率交换它们之间的部分染色体,产生新的个体。

(5)变异运算。将变异算子作用于群体,对选中的个体,以某一概率改变某 一个或某一些基因值为其他的等位基因。群体 经过选择、交叉和变异运算之 后得到下一代群体 。计算其适应度值,并根据适应度值进行排序,准备进 行下一次遗传操作。

(6)终止条件判断:若 ,则 ,转到步骤(2);若 ,则此 进化过程中所得到的具有最大适应度的个体作为最优解输出,终止计算。

2、关键参数说明

(1)群体规模群体规模将影响遗传优化的最终结果以及遗传算法的执行效率。当群体规模 太小时,遗传优化性能一般不会太好。采用较大的群体规模可以减小遗传算法陷入局部最优解的机会,但较大的群体规模意味着计算复杂度较高。一般 取 。

(2)交叉概率交叉概率 控制着交叉操作被使用的频度。较大的交叉概率可以增强遗传算法开辟新的搜索区域的能力,但高性能的模式遭到破坏的可能性增大;若交叉概率太低,遗传算法搜索可能陷入迟钝状态。一般 取 。

(3)变异概率变异在遗传算法中属于辅助性的搜索操作,它的主要目的是保持群体的多样性。一般低频度的变异可防止群体中重要基因的可能丢失,高频度的变异将使遗传算法趋于纯粹的随机搜索。通常 取 。

(4)进化代数终止进化代数 是表示遗传算法运行结束条件的一个参数,它表示遗传算法运行到指定的进化代数之后就停止运行,并将当前群体中的最佳个体作为所求问题的最优解输出。一般视具体问题而定, 的取值可在 之间。

3、MATLAB仿真实例

3.1 遗传算法求解一元函数的极值
例 2.1 用标准遗传算法求函数 的最大值,其中 的取值范围为。这是一个有多个局部极值的函数,其函数值图形如下图所示。

解:仿真过程如下:

(1)初始化种群数目为 ,染色体二进制编码长度为 ,最大进化代数为 ,交叉概率 ,变异概率 。

(2)产生初始种群,将二进制编码转换成十进制,计算个体适应度值,并进行归一化;采用基于轮盘赌的选择操作、基于概率的交叉和变异操作,产生新的种群,并把历代的最优个体保留在新种群中,进行下一步遗传操作。

(3)判断是否满足终止条件:若满足,则结束搜索过程,输出优化值;若不满足,则继续进行迭代优化。优化结束后,其适应度进化曲线如下图所示,优化结果为 ,函数 的最大值为 。

MATLAB 源程序如下:

%%%%%%%%%%%%%%%标准遗传算法求函数极值%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%初始化参数%%%%%%%%%%%%%%%%%%
clear all; %清除所有变量
close all; %清图
clc; %清屏
NP = 50; %种群数量
L = 20; %二进制位串长度
Pc = 0.8; %交叉率
Pm = 0.1; %变异率
G = 100; %最大遗传代数
Xs = 10; %上限
Xx = 0; %下限
f = rand(NP,L); %随机获得初始种群
%%%%%%%%%%%%%%%%%%遗传算法循环%%%%%%%%%%%%%%%%
for k = 1:G
%%%%%%%%%%将二进制解码为定义域范围内十进制%%%%%%%%%%
for i = 1:NP
U = f(i,:);
m = 0;
for j = 1:L
m = U(j)*2^(j-1)+m;
end
x(i) = Xx+m*(Xs-Xx)/(2^L-1);
Fit(i) = func1(x(i));
end
maxFit = max(Fit); %最大值
minFit = min(Fit); %最小值
rr = find(Fit==maxFit);
fBest = f(rr(1,1),:); %历代最优个体
xBest = x(rr(1,1));
Fit = (Fit-minFit)/(maxFit-minFit); %归一化适应度值
%%%%%%%%%%%%%%基于轮盘赌的复制操作%%%%%%%%%%%%%
sum_Fit = sum(Fit);
fitvalue = Fit./sum_Fit;
fitvalue = cumsum(fitvalue);
ms = sort(rand(NP,1));
fiti = 1;
newi = 1;
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 = rand(1,L);
for j = 1:L
if q(j)==1;
temp = nf(i+1,j);
nf(i+1,j) = nf(i,j);
nf(i,j) = temp;
end
end
end
end
%%%%%%%%%%%%%基于概率的变异操作%%%%%%%%%%%%%%
i = 1;
while i <= round(NP*Pc)
h = randi([1,NP],1,1); %随机选取一个需要变异的染色体
for j = 1:round(L*Pc)
g = randi([1,L],1,1); %随机选取需要变异的基因数
nf(h,g) =~ nf(h,g);
end
i = i+1;
end
f = nf;
f(1,:) = fBest; %保留最优个体在新种群中
trace(k) = maxFit; %历代最优适应度
end
xBest; %最优个体
figure
plot(trace)
xlabel('迭代次数')
ylabel('目标函数值')
title('适应度进化曲线')
%%%%%%%%%%%%%%%%%%适应度函数%%%%%%%%%%%%%%%%%
function result = func1(x)
fit = x+10*sin(5*x)+7*cos(4*x);
result = fit;
end

3.2 遗传算法求解旅行商问题(TSP)

例 2.3

旅行商问题(TSP 问题)。假设有一个旅行商人要拜访全国 31 个省会城市,他需要选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。对路径选择的要求是:所选路径的路程为所有路径 之中的最小值。

全国 31 个省会城市的坐标为 [1304 2312; 3639 1315; 4177 2244; 3712 1399; 3488 1535; 3326 1556; 3238 1229; 4196 1004; 4312 790; 4386 570; 3007 1970; 2562 1756; 2788 1491; 2381 1676; 1332 695; 3715 1678; 3918 2179; 4061 2370; 3780 2212; 3676 2578; 4029 2838; 4263 2931; 3429 1908; 3507 2367; 3394 2643; 3439 3201; 2935 3240; 3140 3550; 2545 2357; 2778 2826; 2370 2975]。

解:仿真过程如下:

(1)初始化种群数目为 ,染色体基因维数为 ,最大进化代数 为 。

(2)产生初始种群,计算个体适应度值,即路径长度;采用基于概率的方式选择进行操作的个体;对选中的成对个体,随机交叉所选中的成对城市坐标,以确保交叉后路径每个城市只到访一次;对选中的单个个体,随机交换其一对城市坐标作为变异操作,产生新的种群,进行下一次遗传操作。

(3)判断是否满足终止条件:若满足,则结束搜索过程,输出优化值;若不满足,则继续进行迭代优化。优化后的路径以及其适应度进化曲线如下图所示:

MATLAB 源程序如下:

%%%%%%%%%%%%%%%遗传算法解决 TSP 问题%%%%%%%%%%%%%%%
clear all; %清除所有变量
close all; %清图
clc; %清屏
C = [1304 2312;3639 1315;4177 2244;3712 1399;3488 1535;3326 1556;...
3238 1229;4196 1044;4312 790;4386 570;3007 1970;2562 1756;...
2788 1491;2381 1676;1332 695;3715 1678;3918 2179;4061 2370;...
3780 2212;3676 2578;4029 2838;4263 2931;3429 1908;3507 2376;...
3394 2643;3439 3201;2935 3240;3140 3550;2545 2357;2778 2826;...
2370 2975]; %31 个省会城市坐标
N = size(C,1); %TSP 问题的规模,即城市数目
D = zeros(N); %任意两个城市距离间隔矩阵
%%%%%%%%%%%%求任意两个城市距离间隔矩阵%%%%%%%%%%%%%%
for i = 1:N
for j = 1:N
D(i,j) = ((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5;
end
end
NP = 200; %种群规模
G = 2000; %最大遗传代数
f = zeros(NP,N); %用于存储种群
F = []; %种群更新中间存储
for i = 1:NP
f(i,:) = randperm(N); %随机生成初始种群
end
R = f(1,:); %存储最优种群
len = zeros(NP,1); %存储路径长度
fitness = zeros(NP,1); %存储归一化适应值
gen = 0;
%%%%%%%%%%%%%%%%%遗传算法循环%%%%%%%%%%%%%%%%
while gen < G
%%%%%%%%%%%%%%%计算路径长度%%%%%%%%%%%%%%%%
for i = 1:NP
len(i,1) = D(f(i,N),f(i,1));
for j = 1:(N-1)
len(i,1) = len(i,1)+D(f(i,j),f(i,j+1));
end
end
maxlen = max(len); %最长路径
minlen = min(len); %最短路径
%%%%%%%%%%%%%%%更新最短路径%%%%%%%%%%%%%%%
rr = find(len==minlen);
R = f(rr(1,1),:);
%%%%%%%%%%%%%%计算归一化适应值%%%%%%%%%%%%%%
for i = 1:length(len)
fitness(i,1) = (1-((len(i,1)-minlen)/(maxlen-minlen+0.001)));
end
%%%%%%%%%%%%%%%%%选择操作%%%%%%%%%%%%%%%%
nn = 0;
for i = 1:NP
if fitness(i,1) >= rand
nn = nn+1;
F(nn,:) = f(i,:);
end
end
[aa,bb] = size(F);
while aa < NP
nnper = randperm(nn);
A = F(nnper(1),:);
B = F(nnper(2),:);
%%%%%%%%%%%%%%%交叉操作%%%%%%%%%%%%%%%
W = ceil(N/10); %交叉点个数
p = unidrnd(N-W+1); %随机选择交叉范围,从 p 到 p+W
for i = 1:W
x = find(A==B(1,p+i-1));
y = find(B==A(1,p+i-1));
temp = A(1,p+i-1);
A(1,p+i-1) = B(1,p+i-1);
B(1,p+i-1) = temp;
temp = A(1,x);
A(1,x) = B(1,y);
B(1,y) = temp;
end
%%%%%%%%%%%%%%%%%变异操作%%%%%%%%%%%%%
p1 = floor(1+N*rand());
p2 = floor(1+N*rand());
while p1==p2
p1 = floor(1+N*rand());
p2 = floor(1+N*rand());
end
tmp = A(p1);
A(p1) = A(p2);
A(p2) = tmp;
tmp = B(p1);
B(p1) = B(p2);
B(p2) = tmp;
F = [F;A;B];
[aa,bb] = size(F);
end
if aa > NP
F = F(1:NP,:); %保持种群规模为 NP
end
f = F; %更新种群
f(1,:) = R; %保留每代最优个体
clear F;
gen = gen+1;
Rlength(gen) = minlen;
end
figure
for i = 1:N-1
plot([C(R(i),1),C(R(i+1),1)],[C(R(i),2),C(R(i+1),2)],'bo-');
hold on;
end
plot([C(R(N),1),C(R(1),1)],[C(R(N),2),C(R(1),2)],'ro-');
title(['优化最短距离:',num2str(minlen)]);
figure
plot(Rlength)
xlabel('迭代次数')
ylabel('目标函数值')
title('适应度进化曲线')

4、遗传算法的特点

遗传算法是模拟生物在自然环境中的遗传和进化的过程而形成的一种并行、高效、全局搜索的方法,它主要有以下特点:

(1)遗传算法以决策变量的编码作为运算对象。这种对决策变量的编码处理方式,使得在优化计算过程中可以借鉴生物学中染色体和基因等概念,模仿自然界中生物的遗传和进化等的机理,方便地应用遗传操作算子。特别是对一些只有代码概念而无数值概念或很难有数值概念的优化问题,编码处理方式更显示出了其独特的优越性。

(2)遗传算法直接以目标函数值作为搜索信息。它仅使用由目标函数值变换来的适应度函数值,就可确定进一步的搜索方向和搜索范围,而不需要目标函数的导数值等其他一些辅助信息。实际应用中很多函数无法或很难求导,甚至根本不存在导数,对于这类目标函数的优化和组合优化问题,遗传算法就显示了其高度的优越性,因为它避开了函数求导这个障碍。

(3)遗传算法同时使用多个搜索点的搜索信息。遗传算法对最优解的搜索过程,是从一个由很多个体所组成的初始群体开始的,而不是从单一的个体开始的。对这个群体所进行的选择、交叉、变异等运算,产生出新一代的群体,其中包括了很多群体信息。这些信息可以避免搜索一些不必搜索的点,相当于搜索了更多的点,这是遗传算法所特有的一种隐含并行性。

(4)遗传算法是一种基于概率的搜索技术。遗传算法属于自适应概率搜索技术,其选择、交叉、变异等运算都是以一种概率的方式来进行的,从而增加了其搜索过程的灵活性。虽然这种概率特性也会使群体中产生一些适应度不高的个体,但随着进化过程的进行,新的群体中总会更多地产生出优良的个体。与其他一些算法相比,遗传算法的鲁棒性使得参数对其搜索效果的影响尽可能小。

(5)遗传算法具有自组织、自适应和自学习等特性。当遗传算法利用进化过程获得信息自行组织搜索时,适应度大的个体具有较高的生存概率,并获得更适应环境的基因结构。同时,遗传算法具有可扩展性,易于同别的算法相结合,生成综合双方优势的混合算法。

文章来源:csdn-LXzerorb

数模拿奖别走开

面对即将来临的数模国赛你是否还未经过正统的系统培训?

不知道该从什么方面入手,具体从哪些方面准备?

学习了相关模型却仍然不知道什么场合进行使用?

拿到题目之后不知应该如何下手,没有清晰的解题思路?

针对同学们备战国赛重重困难,数模乐园联合成都信息工程大学应用数学学院举办《2023年第八届数维杯数学建模夏令营》,本届夏令营将于8月9日-17日在成都信息工程大学航空港校区隆重举行,夏令营历时9天,分为线下授课、实训指导、答疑交流、作业跟踪、分组项目实践和效果评价教学工作、户外拓展等环节。夏令营自创立以来屡传捷报,成果卓著。累计指导学生近1800余队(5000余人次),国赛荣获1300余项省级以上数模奖项,参培学员获奖率超过80%,实现了在该项赛事的历史性突破。仅限150人,国赛专家亲自上系统性阵授课,实操性强,打破线上碎片化学习数模思维,助力国赛保驾护航。

或复制下方链接报名:

报名官网:http://www.nmmcm.org.cn/activity_detail/34

进群查看数维杯夏令营具体事宜

↓详情加入2023数模国赛备战群,并领取国赛最新学习资料↓

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
中超最新积分战报:津门虎创造奇迹,上海海港倒下,北京国安绝杀

中超最新积分战报:津门虎创造奇迹,上海海港倒下,北京国安绝杀

足球狗说
2026-08-01 22:17:44
莫斯科地标建筑内餐厅爆炸3死21伤,携弹女子疑不知情遭远程引爆

莫斯科地标建筑内餐厅爆炸3死21伤,携弹女子疑不知情遭远程引爆

观察者网
2026-08-02 07:58:35
22岁女孩独自爬山失联!长得很漂亮,最后行踪诡异,家长再曝猛料

22岁女孩独自爬山失联!长得很漂亮,最后行踪诡异,家长再曝猛料

天天热点见闻
2026-08-01 08:08:16
快讯!郭正亮发出重要提醒!

快讯!郭正亮发出重要提醒!

故事终将光明磊落
2026-08-02 10:03:10
1994年,大话西游拍摄期,周星驰单车往返片场的照片

1994年,大话西游拍摄期,周星驰单车往返片场的照片

娱你同欢
2026-08-01 15:58:45
上海大师赛中国选手奖金分配,吴宜泽赵心童最多,肖国栋独享第三

上海大师赛中国选手奖金分配,吴宜泽赵心童最多,肖国栋独享第三

南海浪花
2026-08-02 04:28:36
福特CEO发出内部警告:中国车企或将在五到十年内进入美国市场

福特CEO发出内部警告:中国车企或将在五到十年内进入美国市场

绿茵狂热者
2026-08-01 00:08:06
中纪委2026年“放大招”!严查四类人!伸过手的一个都跑不了!

中纪委2026年“放大招”!严查四类人!伸过手的一个都跑不了!

细说职场
2026-08-01 10:21:51
养老金调待机制迎来优化,8月到账变化,关乎每一位退休人员

养老金调待机制迎来优化,8月到账变化,关乎每一位退休人员

白昼说故事
2026-08-02 09:23:54
官宣后48小时突然反悔!40岁世界杯门神放鸽子,智利豪门脸都绿了

官宣后48小时突然反悔!40岁世界杯门神放鸽子,智利豪门脸都绿了

凡人说体育
2026-08-01 20:35:58
WOC!606万美元!一降再降,爱签不签...

WOC!606万美元!一降再降,爱签不签...

左右为篮
2026-08-01 12:07:34
美国突然反应过来,中国航天的最终答案,和西方想的完全不一样

美国突然反应过来,中国航天的最终答案,和西方想的完全不一样

世界军事格局
2026-08-02 10:11:53
9胜2负!国乒19岁黑马新星崛起:连赢林诗栋林高远,王楚钦也称赞

9胜2负!国乒19岁黑马新星崛起:连赢林诗栋林高远,王楚钦也称赞

李喜林篮球绝杀
2026-08-01 10:10:50
10岁泰国天才7场24球!董路:天赋让努力贬值 徐亮:肯定改年龄了

10岁泰国天才7场24球!董路:天赋让努力贬值 徐亮:肯定改年龄了

风过乡
2026-08-02 10:04:34
沉默45年,中国第二轮"严打"终于来了!目标改变总体战正式打响

沉默45年,中国第二轮"严打"终于来了!目标改变总体战正式打响

细说职场
2026-07-30 16:31:15
中国存款大势已定?若一切正常,明后年,居民储蓄或要变天了!

中国存款大势已定?若一切正常,明后年,居民储蓄或要变天了!

小兰聊历史
2026-08-02 05:06:11
95年我娶了没人敢娶的女村霸,新婚夜她说:你今晚敢碰我下试试

95年我娶了没人敢娶的女村霸,新婚夜她说:你今晚敢碰我下试试

千秋文化
2026-08-01 20:47:43
iPhone 18 Pro Max定档,苹果节奏真变了

iPhone 18 Pro Max定档,苹果节奏真变了

小柱解说游戏
2026-08-01 16:40:52
37岁闺蜜说老公老实不近女色,我晨跑撞见他给少妇系第4颗衣扣

37岁闺蜜说老公老实不近女色,我晨跑撞见他给少妇系第4颗衣扣

真实人物采访
2026-08-02 06:20:12
罕见!国安球员主场被嘘,社媒发文5字回应,下赛季能否留队?

罕见!国安球员主场被嘘,社媒发文5字回应,下赛季能否留队?

体坛鉴春秋
2026-08-02 10:26:48
2026-08-02 12:28:49
数模乐园官方
数模乐园官方
专注于数学建模,分享干货知识
1262文章数 814关注度
往期回顾 全部

科技要闻

零跑月销10万破纪录!比亚迪奇瑞海外卖爆

头条要闻

上海男子打开炒股软件后呆了 短短1个月亏光336万元

头条要闻

上海男子打开炒股软件后呆了 短短1个月亏光336万元

体育要闻

1米76的他,为什么是史上最强中卫之一?

娱乐要闻

一天5瓜!“做头发”事件另有玄机?

财经要闻

长鑫科技四万亿市值背后的资本与周期

汽车要闻

历史性里程碑时刻 零跑7月交付达101267台

态度原创

游戏
本地
时尚
手机
公开课

成人除灵游戏被卡审核!开发者做打屁股小游戏"赎罪"

本地新闻

神仙也“蓉”漂,哪吒与八仙,皆是成都出品!

真爱大牌|| 捡到大漏了!近两年用得最勤的好物居然只要这个价

手机要闻

Pixel 11全系规格与美欧售价曝光 四款新品8月12日登场

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版