1、题目:用遗传算法求解中国 34 个省会 TSP 问题 源代码分享在本人博客:Bbingo.org2012-1-17智 能 控 制 技 术 及 其 应 用 大 作 业专业: 控制工程 学 号 : XXXXXX 姓名:XXXbbingo.org 版权所有1用遗传算法求解中国 34 个省会 TSP 问题一、 TSP 问题的描述旅行商问题(TSP)可以具体描述为:已知 n 个城市之间的相互距离,现有 一 个 推 销 员 从 某 一 个 城 市 出 发 , 必 须 遍 访 这 n 个 城 市 , 并 且 每 个 城 市 只 能 访 问 一 次 , 最 后 又 必 须 返 回 到 出 发 城 市 , 如
2、何 安 排 他 对 这 些 城 市 的 访 问 次 序 , 可 使 其 旅 行路线的总长度最短。现给出中国 34 个 省 会 数 据 , 要 求 基 于 此 数 据 使 用 遗 传 算 法 解 决 该 TSP 问题。city =图 1 中国 34 省会位置1.西藏 2.云南 3.四川 4.青海 5.宁夏 6.甘肃 7.内蒙古8.黑龙江 9.吉林10.辽宁 11.北 京 12 天津 13.河北 14.山 东 15.河 南 16.山西 17.陕西 18.安徽19.江苏 20.上海 21.浙江 22.江西 23.湖北 24.湖南 25,贵州 26.广西 27.广东28.福建 29.海 南 30.澳
3、门 31.香 港 32.台 湾 33.重 庆 34.新 疆 像素坐标如下:Columns 1 through 11100 187 201 187 221 202 258 352 346 336 290211 265 214 158 142 165 121 66 85 106 127Columns 12 through 22297 278 296 274 265 239 302 316 334 325 293135 147 158 177 148 182 203 199 206 215 233Columns 23 through 33280 271 221 233 275 322 250 277
4、 286 342 220216 238 253 287 285 254 315 293 290 263 226Column 34bbingo.org 版权所有210477二、 遗传算法的介绍2.1 遗传算法遗 传 算 法 的 基 本 原 理 是 通 过 作 用 于 染 色 体 上 的 基 因 寻 找 好 的 染 色 体 来 求 解 问 题 , 它 需 要 对 算 法 所 产 生 的 每 个 染 色 体 进 行 评 价 , 并 基 于 适 应 度 值 来 选 择 染 色 体 , 使 适 应 性 好 的 染 色 体 有 更 多 的 繁 殖 机 会 , 在 遗 传 算 法 中 , 通 过 随 机 方
5、 式 产 生 若 干 个 所 求 解 问 题 的 数 字 编 码 , 即 染 色 体 , 形 成 初 始 种 群 ; 通 过 适 应 度 函 数 给 每 个 个 体 一 个 数 值 评 价 , 淘 汰 低 适 应 度 的 个 体 , 选 择 高 适 应 度 的 个 体 参 加 遗 传 操 作 , 经 过 遗 产 操 作 后 的 个 体 集 合 形 成 下 一 代 新 的 种 群 , 对 这 个 新 的 种 群 进 行 下 一 轮 的 进化。2.2 遗传算法的过程遗传算法的基本过程是:1. 初始化群体。2. 计算群体上每个个体的适应度值3. 由个体适应度值所决定的某个规则选择将进入下一代个体。4
6、. 按概率 Pc 进行交叉操作。5. 按概率 Pm 进行变异操作。6. 没有满足某种停止条件,则转第 2 步,否则进入第 7 步。7. 输出种群中适应度值最优的染色体作为问题的满意解或最优界。 停 止 条 件 有 两 种 : 一 是 完 成 了 预 先 给 定 的 进 化 代 数 则 停 止 ; 二 是 种 群 中 的 最优个体在连续若干代没有改进或平均适应度在连续若干代基本没有改进时停止。 遗传算法过程图如图 2:bbingo.org 版权所有3图 2 遗传算法过程框图三、 遗 传 算 法 解 决 TSP 问题的 Matlab 程序实现3.1 程序初始化程序首先读入 34 个省会城市坐标,计
7、算任意两个城市的距离; 设置遗传算法控制参数。clear all;clc;clf; load(testdata.mat); nlen=length(x1); xy=x1;y1;n = 500; %种群数目C = 5000; %进化迭代次数m=2; %适 应 度 归 一 化 淘 汰 加 速 指 数 , 取 值 不 宜 太 大 alpha=0.8; %淘 汰 保 护 指 数 , 范 围 01, 为 1时 关 闭 保 护a = meshgrid(1:nlen); %生成 n x n矩阵dmat = reshape(sqrt(sum(xy(a,:)-xy(a,:).2,2),nlen,nlen); %
8、计算城市距离矩阵遗 传 算 法 对 求 解 问 题 本 身 是 一 无 所 知 的 , 这 里 采 用 随 机 生 成 初 始 化 种 群 , 如 下:bbingo.org 版权所有4N,NN=size(dmat);farm=zeros(n,N); %用 于 存 储 种 群 for i=1:nfarm(i,:)=randperm(N); %随机生成初始化种群end3.2 计算适应度本程序目标函数为经过 34 省会的总距离,适应度与目标函数的正相关,取 值范围 01,适应度计算公式为:fit (1 len min len )m max len min len 0.0001其中,len 为某组解的
9、总距离,minlen 为该次迭代中最短距离,maxlen 为该 次迭代中最长距离,m 为适应度归一化淘汰加速指数,源程序如下:function fitness=fit(len,m,maxlen,minlen) fitness=len;for i=1:length(len)fitness(i,1)=(1-(len(i,1)-minlen)/(maxlen-minlen+0.0001).m;end3.3 选择操作当 个 体 适 应 度 小 于 某 一 随 机 数 值 时 , 遭 到 淘 汰 , 保 留 优 秀 个 体 , 使 它 们 有 机 会作为父代产生后代个体,源程序如下:FARM=farm;
10、nn=0; % nn 为复制的个数for i=1:nif fitness(i,1)=alpha*rand %适 应 度 与 随 机 数 值 相 比 较 nn=nn+1;FARM(nn,:)=farm(i,:);endend FARM=FARM(1:nn,:);3.4 交叉操作许多生物的繁衍是通过染色体的交叉完成的,在遗传算法中使用这一概念, 并 把 交 叉 作 为 遗 传 算 法 的 一 个 操 作 算 子 , 其 实 现 过 程 是 对 选 中 用 于 繁 殖 下 一 代 的 个体,随机地选择两个个体的位置,按交叉概率 Pc,在选择的位置实行交换, 目的在于产生新的基因组合,即新的个体,源代
11、码如下:bbingo.org 版权所有5aa,bb=size(FARM);while aa nFARM=FARM(1:n,:); %保 持 种 群 规 模 为 nend farm=FARM; clear FARM;以下是交叉函数:%交叉算法采用的是由 Goldberg 和 Lingle 于 1985 年提出的 PMX(部分匹配交叉) function a,b=intercross(a,b)L=length(a);if L=randelseendW=floor(L/10)+8;Endp=unidrnd(L-W+1);%随 机 选 择 交 叉 范 围 , 从 p 到 p+W for i=1:W %
12、交叉x=find(a=b(1,p+i-1);y=find(b=a(1,p+i-1);a(1,p+i-1),b(1,p+i-1)=exchange(a(1,p+i-1),b(1,p+i-1);a(1,x),b(1,y)=exchange(a(1,x),b(1,y);%交换函数function x,y=exchange(x,y) temp=x;x=y; y=temp;bbingo.org 版权所有6本 遗 传 算 法 中 并 未 引 入 变 异 操 作 , 当 程 序 迭 代 次 数 满 足 设 定 条 件 时 , 程 序 得 出近似最优解。四、 程 序 结 果 分 析初始值种群数目设为 500,
13、进化迭代次数为 5000,归一化淘汰加速指数设为 2,淘汰保护指数设为 0.8 时,运行程序,得最短距离为 1489.3,结果如下:图 3 城市位置坐标(左)、初始解(中)、最终解(右)图 4 种群数为 500,进化数为 5000,TSP 问题最优路径bbingo.org 版权所有7图 5 种群数为 500,进化数为 5000,TSP 问题寻优历史从图 4 可以看出,迭代次数超过 500 次时,所得的解已接近近似最优解。只 改变种群数量,进行多次计算,可得下表:种群数量50最终解距离2679.7100 2053.0200 1747.6500 1489.31000 1499.82000 1624
14、.6表一 不同种群数量下最终解综 上 所 述 , 种 群 越 大 、 迭 代 越 多 求 解 的 结 果 越 优 化 , 但 是 需 要 花 费 大 量 的 运 算 时 间 ; 由 于 算 法 中 存 在 多 个 随 机 参 数 , 因 此 每 次 计 算 结 果 不 一 定 相 同 , 须 根 据 需要设定初值进行多次计算取多组中最优解。五、 另 一 种 的 遗 传 算 法 解 决 该 问 题上 述 算 法 中 , 只 采 用 了 遗 传 算 法 中 交 换 操 作 , 以 下 算 法 , 则 采 用 变 异 操 作 解 决 同 一 问 题 。 算 法 核 心 思 路 是 , 在 每 次 迭
15、 代 中 , 解 的 个 体 随 机 按 4 个为 1 组 , 每bbingo.org 版权所有8组 中 只 保 留 最 优 解 , 然 后 对 此 最 优 解 进 行 左 右 翻 转 、 交 换 、 向 前 移 位 三 种 变 异 操 作 , 生 成 三 个 新 个 体 , 再 参 与 下 次 迭 代 。 整 个 算 法 不 需 要 计 算 归 一 化 适 应 度 , 核 心源代码如下:for p = 4:4:pop_sizertes = pop(rand_pair(p-3:p),:);dists = total_dist(rand_pair(p-3:p); ignore,idx = min
16、(dists); best_of_4_rte = rtes(idx,:);ins_pts = sort(ceil(n*rand(1,2); %生成 1x2 每一列元素%按照升序排列矩阵I = ins_pts(1); J = ins_pts(2);for k = 1:4 %保留最佳个体,繁殖三个新个体tmp_pop(k,:) = best_of_4_rte; switch kcase 2 %左右翻转tmp_pop(k,I:J) = fliplr(tmp_pop(k,I:J); case 3 %交换tmp_pop(k,I J) = tmp_pop(k,J I);case 4 %向前移动一位tmp_
17、pop(k,I:J) = tmp_pop(k,I+1:J I); otherwiseendendendnew_pop(p-3:p,:) = tmp_pop;pop = new_pop;在此算法中,每次迭代淘汰率固定为 75%,三种变异操作覆盖面比较广,直 接以最短距离为适应函数,省去每次适应度的计算。初始值种群数目设为 500, 进化迭代次数为 5000,寻得最优解为 1295.72,如下:bbingo.org 版权所有9图 5 省 会 位 置 ( 左 上 ) 、 各 省 会 距 离 分 布 ( 右 上 ) 、 最 优 路 径 ( 左 下 ) 、 寻 优 历 史 ( 右 下 )由 上 图 及
18、最 终 结 果 可 以 看 出 , 该 算 法 比 上 一 算 法 所 得 结 果 更 优 化 , 从 寻 优 历 史可见,迭代次数在接近 1000 次才能得到近似最优解(见表二),总体而言, 该算法相对上一算法收敛性更好,但计算量稍大。种群数量50最终解距离1304.7587100 1302.0629200 1298.1412500 1295.72481000 1295.72482000 1299.9698表二 不同种群数量下最终解bbingo.org 版权所有10图 6 种群数为 500,进化数为 5000,TSP 问题最优路径六、 总结本文采用 MATLAB 实现遗传算法求解 TSP 问
19、题,对结果进行了分析,并对 比 了 两 种 不 同 思 路 的 遗 传 算 法 。 遗 传 算 法 是 一 种 智 能 优 化 算 法 , 它 的 实 现 有 些 关 键 点 , 一 是 串 的 编 码 方 式 , 本 质 就 是 问 题 编 码 , 串 长 度 及 编 码 形 式 对 算 法 收 敛 影 响 极 大 ; 二 是 适 应 函 数 的 确 定 , 这 是 选 择 的 基 础 ; 三 是 自 身 参 数 的 设 定 , 其 中 重 要 的 是 群 体 大 小 , 最 大 迭 代 次 数 , 通 过 计 算 我 们 可 以 看 到 最 大 迭 代 次 数 、 种 群 数 目 对 问 题 求 解 的 精 度 、 最 优 解 都 有 影 响 , ; 四 是 交 叉 和 变 异 算 子 的 设 计 , 这 决 定 了 整 个 算 法 的 收 敛 速 度 。 目 前 很 多 研 究 都 是 根 据 具 体 的 领 域 问 题 , 改 进 交 叉 算 子 , 变 异 算 子 , 寻 找 最 优 的 参 数 设 定 来 提 高 算 法 收 敛 速 度 和 保 证 最 优 解 的 得 到 , 对 算 子的改进和参数值的设定这是将来的研究工作。