面向TSP问题的免疫遗传算法研究

合集下载

用于求解TSP问题的遗传算法改进

用于求解TSP问题的遗传算法改进

用于求解TSP问题的遗传算法改进一、TSP问题简介TSP问题,全称Traveling Salesman Problem,即旅行商问题。

所谓TSP问题是指,给定一些点和每一对点之间的距离,求出一条遍历每个点恰好一次的最短路径,该问题的解决方法对实际问题中的路径规划和优化有着很大的参考价值。

二、遗传算法的基本思想遗传算法,是模拟自然界中生物遗传进化过程的一种演化计算方法。

它通过模拟生物的繁殖、变异、适应性等生命过程来寻找问题的最优解。

其基本的过程如下:1. 初始化:随机生成一个初始群体,每个个体表示一种可能的解决方案。

2. 选择:根据适应度函数,选择一定数量的优秀个体作为繁殖的父亲。

3. 交叉:将所选父亲进行交叉操作,生成新的子代个体。

4. 变异:对于一部分子代个体,进行变异操作。

5. 替换:用新的子代个体替换掉一部分原有的个体,形成新一代群体。

6. 结束条件:当某种条件达到时结束算法,否则返回步骤二。

在TSP问题中,遗传算法的基本实现方法如下:1.初始化:随机生成一个初始群体,每个个体表示一个解决方案,其中每个基因表示一个城市的编号。

例如,假设有10个城市,则每个个体就是由这10个城市编号随机排列组成的,例如:1-2-5-8-4-3-7-9-6-10等。

2.适应度函数:对于每个个体,计算其总路程,将总路程作为适应度函数的值。

4.交叉:将所选父亲进行交叉操作,生成新的子代个体,交叉方式一般有:顺序交叉法、部分映射交叉法、环形交叉法、边交叉法等。

5.变异:对于一部分子代个体,进行变异操作,变异的方式一般是:交换变异、倒位变异、随机抽样变异等。

7.结束条件:当达到一定条件时结束算法,比如迭代次数达到上限或者群体的适应度达到一定的水平。

传统的遗传算法在求解TSP问题时,存在一些问题:1.收敛速度慢:由于集合了交叉、变异等算子,每一代都要进行大量的计算,所以收敛速度慢。

2.易受陷入局部最优解:由于遗传算法采用的是局部搜索策略,所以可能会陷入到局部最优解中。

实验六:遗传算法求解TSP问题实验2篇

实验六:遗传算法求解TSP问题实验2篇

实验六:遗传算法求解TSP问题实验2篇第一篇:遗传算法的原理与实现1. 引言旅行商问题(TSP问题)是一个典型的组合优化问题,它要求在给定一组城市和每对城市之间的距离后,找到一条路径,使得旅行商能够在所有城市中恰好访问一次并回到起点,并且总旅行距离最短。

遗传算法作为一种生物启发式算法,在解决TSP问题中具有一定的优势。

本实验将运用遗传算法求解TSP问题,以此来探讨和研究遗传算法在优化问题上的应用。

2. 遗传算法的基本原理遗传算法是模拟自然界生物进化过程的一种优化算法。

其基本原理可以概括为:选择、交叉和变异。

(1)选择:根据问题的目标函数,以适应度函数来评估个体的优劣程度,并按照适应度值进行选择,优秀的个体被保留下来用于下一代。

(2)交叉:从选出的个体中随机选择两个个体,进行基因的交换,以产生新的个体。

交叉算子的选择及实现方式会对算法效果产生很大的影响。

(3)变异:对新生成的个体进行基因的变异操作,以保证算法的搜索能够足够广泛、全面。

通过选择、交叉和变异操作,不断迭代生成新一代的个体,遗传算法能够逐步优化解,并最终找到问题的全局最优解。

3. 实验设计与实施(1)问题定义:给定一组城市和每对城市之间的距离数据,要求找到一条路径,访问所有城市一次并回到起点,使得旅行距离最短。

(2)数据集准备:选择适当规模的城市数据集,包括城市坐标和每对城市之间的距离,用于验证遗传算法的性能。

(3)遗传算法的实现:根据遗传算法的基本原理,设计相应的选择、交叉和变异操作,确定适应度函数的定义,以及选择和优化参数的设置。

(4)实验流程:a. 初始化种群:随机生成初始种群,每个个体表示一种解(路径)。

b. 计算适应度:根据适应度函数,计算每个个体的适应度值。

c. 选择操作:根据适应度值选择一定数量的个体,作为下一代的父代。

d. 交叉操作:对父代进行交叉操作,生成新的个体。

e. 变异操作:对新生成的个体进行变异操作,以增加搜索的多样性。

实验六:遗传算法求解TSP问题实验3篇

实验六:遗传算法求解TSP问题实验3篇

实验六:遗传算法求解TSP问题实验3篇以下是关于遗传算法求解TSP问题的实验报告,分为三个部分,总计超过3000字。

一、实验背景与原理1.1 实验背景旅行商问题(Traveling Salesman Problem,TSP)是组合优化中的经典问题。

给定一组城市和每两个城市之间的距离,求解访问每个城市一次并返回出发城市的最短路径。

TSP 问题具有很高的研究价值,广泛应用于物流、交通运输、路径规划等领域。

1.2 遗传算法原理遗传算法(Genetic Algorithm,GA)是一种模拟自然选择和遗传机制的搜索算法。

它通过选择、交叉和变异操作生成新一代解,逐步优化问题的解。

遗传算法具有全局搜索能力强、适用于多种优化问题等优点。

二、实验设计与实现2.1 实验设计本实验使用遗传算法求解TSP问题,主要包括以下步骤:(1)初始化种群:随机生成一定数量的个体(路径),每个个体代表一条访问城市的路径。

(2)计算适应度:根据路径长度计算每个个体的适应度,适应度越高,路径越短。

(3)选择操作:根据适应度选择优秀的个体进入下一代。

(4)交叉操作:随机选择两个个体进行交叉,生成新的个体。

(5)变异操作:对交叉后的个体进行变异,增加解的多样性。

(6)更新种群:将新生成的个体替换掉上一代适应度较低的个体。

(7)迭代:重复步骤(2)至(6),直至满足终止条件。

2.2 实验实现本实验使用Python语言实现遗传算法求解TSP问题。

以下为实现过程中的关键代码:(1)初始化种群```pythondef initialize_population(city_num, population_size): population = []for _ in range(population_size):individual = list(range(city_num))random.shuffle(individual)population.append(individual)return population```(2)计算适应度```pythondef calculate_fitness(population, distance_matrix): fitness = []for individual in population:path_length =sum([distance_matrix[individual[i]][individual[i+1]] for i in range(len(individual) 1)])fitness.append(1 / path_length)return fitness```(3)选择操作```pythondef selection(population, fitness, population_size): selected_population = []fitness_sum = sum(fitness)fitness_probability = [f / fitness_sum for f in fitness]for _ in range(population_size):individual = random.choices(population, fitness_probability)[0]selected_population.append(individual)return selected_population```(4)交叉操作```pythondef crossover(parent1, parent2):index1 = random.randint(0, len(parent1) 2)index2 = random.randint(index1 + 1, len(parent1) 1)child1 = parent1[:index1] +parent2[index1:index2] + parent1[index2:]child2 = parent2[:index1] +parent1[index1:index2] + parent2[index2:]return child1, child2```(5)变异操作```pythondef mutation(individual, mutation_rate):for i in range(len(individual)):if random.random() < mutation_rate:j = random.randint(0, len(individual) 1) individual[i], individual[j] = individual[j], individual[i]return individual```(6)更新种群```pythondef update_population(parent_population, child_population, fitness):fitness_sum = sum(fitness)fitness_probability = [f / fitness_sum for f in fitness]new_population =random.choices(parent_population + child_population, fitness_probability, k=len(parent_population)) return new_population```(7)迭代```pythondef genetic_algorithm(city_num, population_size, crossover_rate, mutation_rate, max_iterations): distance_matrix =create_distance_matrix(city_num)population = initialize_population(city_num, population_size)for _ in range(max_iterations):fitness = calculate_fitness(population, distance_matrix)selected_population = selection(population, fitness, population_size)parent_population = []child_population = []for i in range(0, population_size, 2):parent1, parent2 = selected_population[i], selected_population[i+1]child1, child2 = crossover(parent1, parent2)child1 = mutation(child1, mutation_rate)child2 = mutation(child2, mutation_rate)parent_population.extend([parent1, parent2]) child_population.extend([child1, child2])population =update_population(parent_population, child_population, fitness)best_individual =population[fitness.index(max(fitness))]best_path_length =sum([distance_matrix[best_individual[i]][best_individual[i +1]] for i in range(len(best_individual) 1)])return best_individual, best_path_length```三、实验结果与分析3.1 实验结果本实验选取了10个城市进行测试,遗传算法参数设置如下:种群大小:50交叉率:0.8变异率:0.1最大迭代次数:100实验得到的最佳路径长度为:1953.53.2 实验分析(1)参数设置对算法性能的影响种群大小:种群大小会影响算法的搜索能力和收敛速度。

毕业论文--基于遗传算法的tsp问题研究

毕业论文--基于遗传算法的tsp问题研究

目录摘要 (I)Abstract (II)第1章绪论............................................................... - 1 -1.1旅行商问题......................................................... - 1 -1.2研究意义........................................................... - 1 -1.3 论文的组织结构..................................................... - 1 - 第2章遗传算法理论概述................................................... - 2 -2.1遗传算法的起源和发展............................................... - 2 -2.2遗传算法基本原理................................................... - 3 -2.3遗传算法的基本步骤................................................. - 4 -2.4 遗传算法的流程图................................................... - 4 -2.5遗传算法的特点..................................................... - 5 -2.6遗传算法的应用..................................................... - 6 - 第3章 TSP问题及研究的基本方法............................................ - 8 -3.1 TSP问题概述....................................................... - 8 -3.2 TSP的应用与价值................................................... - 8 -3.3 TSP问题的数学模型................................................. - 9 -3.4 TSP 问题的分类..................................................... - 9 -3.5 现有的求解TSP问题的几种算法...................................... - 10 - 第4章遗传算法在TSP的应用.............................................. - 12 -4.1遗传算法在TSP上的应用............................................ - 12 -4.2算法的实现........................................................ - 12 -4.3编码.............................................................. - 12 -4.4初始化种群........................................................ - 13 -4.5适应度函数........................................................ - 13 -4.6选择操作.......................................................... - 13 -4.7交叉操作.......................................................... - 15 -4.8变异操作.......................................................... - 17 -4.9实验结果.......................................................... - 18 - 结论................................................................... - 20 - 展望..................................................................... - 20 - 参考文献.............................................................. - 21 - 致谢................................................................... - 22 - 附录程序................................................................. - 23 -摘要TSP问题(Traveling Salesman Problem)是已知有n个城市,现有一推销员必须遍访这n个城市,且每个城市只能访问一次,最后又必须返回出发城市。

TSP问题的遗传算法实验报告

TSP问题的遗传算法实验报告

TSP问题的遗传算法实验报告一实验题目TSP问题的遗传算法实现二实验目的1熟悉和掌握遗传算法的基本概念和基本思想;2加深对遗传算法的理解,理解和掌握遗传算法的各个操作算子;3理解和掌握利用遗传算法进行问题求解的基本技能。

三实验要求1 以10/30个结点的TSP问题为例,用遗传算法加以求解;2 掌握遗传算法的基本原理、各个遗传操作和算法步骤;3 能求出问题最优解,若得不出最优解,请分析原因;4 要求界面显示每次迭代求出的局部最优解和最终求出的全局最优解。

四数据结构请说明染色体个体和群体的定义方法。

typedef struct{int colony[POPSIZE][CITY_NUM+1];//城市种群,默认出发城市编号为0,则城市编号的最后一个城市还应该为0 每CITY_NUM个城市的排列组合为一个染色体double fitness[POPSIZE];// 路径适应值double Distance[POPSIZE];//路径实际长度int BestRooting[CITY_NUM+1];//最优城市路径序列double BestFitness;//最优路径适应值double BestValue;//最优路径长度}TSP,*PTSP;五实验算法1 说明算法中对染色体的编码方法,适应度函数定义方法;染色体的编码方法:0~9一个排列组合为一条染色体。

适应度函数的定义方法:取路径长度的倒数。

void CalFitness(PTSP city,int m){int i,j,t=0;int start,end;for(i=0;i<POPSIZE;i++){//求适应值city->Distance[i]=0;for(j=1;j<=CITY_NUM;j++){start=city->colony[i][j-1];end=city->colony[i][j];city->Distance[i]=city->Distance[i]+CityDistance[start][end];}city->fitness[i]=N/(city->Distance[i]);}}2 采用的选择、交叉、变异操作算子的具体操作;void Select(PTSP city){//选择算子int i,j;double sum=0,r,t;double p[POPSIZE],q[POPSIZE+1];int copey[POPSIZE][CITY_NUM+1];q[0] = 0;for (i=0;i<POPSIZE;i++)sum+=city->fitness[i];for (i=0;i<POPSIZE;i++){p[i] = city->fitness[i]/sum;q[i+1] = q[i]+p[i];}for (i=0;i<POPSIZE;i++){t = rand()%(10000);r = t/10000;for (j=0;j<POPSIZE;j++)if (r<=q[j+1]){*copey[i] = *city->colony[j];break;}}for (i=0;i<POPSIZE;i++)*city->colony[i] = *copey[i];}void AOX(PTSP city,int n,int m)//改进启发式算法{int A[CITY_NUM-1],B[CITY_NUM-1];int i,j;int k=1+CROSS_NUM,t=1+CROSS_NUM;for (i=0;i<CITY_NUM-1;i++){A[i] = city->colony[n][i+1];B[i] = city->colony[m][i+1];}for (i=3;i<CROSS_NUM+3;i++){city->colony[n][i-2] = B[i];city->colony[m][i-2] = A[i];}for (i=0;i<CITY_NUM-1;i++){for (j=0;j<CROSS_NUM;j++)if (A[i] == B[j+3])break;if (j == CROSS_NUM)city->colony[n][k++] = A[i];for (j=0;j<CROSS_NUM;j++)if (B[i] == A[j+3])break;if (j == CROSS_NUM)city->colony[m][t++] = B[i];}}int check1(int r[],int n)//判重{int i;for (i=0;i<n;i++)if (r[i] == r[n]){return true;}return false;}void Cross(PTSP city,double pc){//交叉概率是pint i;int r[20];for (i=0; i<POPSIZE*pc;i++){r[i] = rand()%(POPSIZE);while (check1(r,i))r[i] = rand()%(POPSIZE);}for (i=0;i<POPSIZE*pc;i=i+2)AOX(city,r[i],r[i+1]);}void XCH(PTSP city,int n)//对换变异{int r,t;int c;r = rand()%(CITY_NUM-1)+1;t = rand()%(CITY_NUM-1)+1;while (r==t)t = rand()%(CITY_NUM-1)+1;c = city->colony[n][r];city->colony[n][r] = city->colony[n][t];city->colony[n][t] = c;}void Mutation(PTSP city,double pm){//变异概率是pmint i;int r[20];for (i=0; i<POPSIZE*pm;i++){r[i] = rand()%(POPSIZE);while (check1(r,i))r[i] = rand()%(POPSIZE);XCH(city,r[i]);}}3 实验中采用的算法参数的最佳选择值是多少。

遗传算法(GA)解决TSP问题

遗传算法(GA)解决TSP问题

遗传算法(GA)解决TSP问题 遗传算法解决TSP问题遗传算法遗传算法的基本原理是通过作⽤于染⾊体上的基因寻找好的染⾊体来求解问题,它需要对算法所产⽣的每个染⾊体进⾏评价,并基于适应度值来选择染⾊体,使适应性好的染⾊体有更多的繁殖机会,在遗传算法中,通过随机⽅式产⽣若⼲个所求解问题的数字编码,即染⾊体,形成初始种群;通过适应度函数给每个个体⼀个数值评价,淘汰低适应度的个体,选择⾼适应度的个体参加遗传操作,经过遗产操作后的个体集合形成下⼀代新的种群,对这个新的种群进⾏下⼀轮的进化。

TSP问题TSP问题即旅⾏商问题,经典的TSP可以描述为:⼀个商品推销员要去若⼲个城市推销商品,该推销员从⼀个城市出发,需要经过所有城市后,回到出发地。

应如何选择⾏进路线,以使总的⾏程最短。

从图论的⾓度来看,该问题实质是在⼀个带权完全⽆向图中,找⼀个权值最⼩的哈密尔顿回路。

遗传算法解决TSP问题概念介绍:种群 ==> 可⾏解集个体 ==> 可⾏解染⾊体 ==> 可⾏解的编码基因 ==> 可⾏解编码的分量基因形式 ==> 遗传编码适应度 ==> 评价的函数值(适应度函数)选择 ==> 选择操作交叉 ==> 编码的交叉操作变异 ==> 可⾏解编码的变异遗传操作:就包括优选适应性强的个体的“选择”;个体间交换基因产⽣新个体的“交叉”;个体间的基因突变⽽产⽣新个体的“变异”。

其中遗传算法是运⽤遗传算⼦来进⾏遗传操作的。

即:选择算⼦、变异算⼦、交叉算⼦。

遗传算法的基本运算过程(1)种群初始化:个体编码⽅法有⼆进制编码和实数编码,在解决TSP问题过程中个体编码⽅法为实数编码。

对于TSP问题,实数编码为1-n的实数的随机排列,初始化的参数有种群个数M、染⾊体基因个数N(即城市的个数)、迭代次数C、交叉概率Pc、变异概率Pmutation。

(2)适应度函数:在TSP问题中,对于任意两个城市之间的距离D(i,j)已知,每个染⾊体(即n个城市的随机排列)可计算出总距离,因此可将⼀个随机全排列的总距离的倒数作为适应度函数,即距离越短,适应度函数越好,满⾜TSP要求。

遗传算法解决TSP问题【精品毕业设计】(完整版)

2.2遗传算法原型:
GA(Fitness,Fitness_threshold,p,r,m)
Fitness:适应度评分函数,为给定假设赋予一个评估分数
Fitness_threshold:指定终止判据的阈值
p:群体中包含的假设数量
r:每一步中通过交叉取代群体成员的比例
m:变异率
初始化群体:P←随机产生的p个假设
在本程序的TSP问题中一共有20个城市,也就是在图模型中有20个顶点,因此一个染色体的长度为20。
3.3适应函数f(i)
对具有n个顶点的图,已知各顶点之间( , )的边长度d( , ),把 到 间的一条通路的路径长度定义为适应函数:
对该最优化问题,就是要寻找解 ,使f( )值最小。
3.4选择操作
选择作为交叉的双亲,是根据前代染色体的适应函数值所确定的,质量好的个体,即从起点到终点路径长度短的个体被选中的概率较大。
(2)交叉(Crossover):对于选中进行繁殖的两个染色体X,Y,以X,Y为双亲作交叉操作,从而产生两个后代X1,Y1.
(3)变异(Mutation):对于选中的群体中的个体(染色体),随机选取某一位进行取反运算,即将该染色体码翻转。
用遗传算法求解的过程是根据待解决问题的参数集进行编码,随机产生一个种群,计算适应函数和选择率,进行选择、交叉、变异操作。如果满足收敛条件,此种群为最好个体,否则,对产生的新一代群体重新进行选择、交叉、变异操作,循环往复直到满足条件。
3.变异:使用均匀的概率从Ps中选择m%的成员.对于选出的每个成员,在它表示中随机选择一个为取反
4.更新:P←Ps
5.评估:对于P中的每个h计算Fitness(h)
从P中返回适应度最高的假设
3.
3.1 TSP问题的图论描述

面向TSP问题的免疫遗传算法研究


1 T P问题 的 几 类 求 解 方 法 S
由 于 TS P是 一 个 NP难 题 , 内外 许 多研 究 人 员 尝试 国
2 免疫 遗 传 算 法原 理
免疫 遗 传 算 法 模 拟 生 物 抗 体 浓 度 自适 应 调 节 过 程 , 将 最优 化解 的 目标 函 数 对 应 为 人 侵 生 命 体 的 抗 原 ,而 解 X i 的适 应 度 fX ) 应 为 免 疫 系 统 产 生 的 抗 体 , 根 据 抗 体 (i 对 并
化 过 程 中不 能 很 好 地 利 用 系 统 信 息 , 化 后 期 易 出 现 振 荡 进
高 算 法 克 服 局 容 包 括 :
① 定 义 抗 原 : 需 要 解 决 的 问题 抽象 成 符 合 免 疫 系统 处 理 将
现象等 , 因此 不 能 保 证 以最 大 概 率 收 敛 到 全 局 最 优 解 。
更 迅 速 , 现 了免 疫 系 统 的记 忆 功 能 。同 时 ,抗 体 与 抗 体 体 之 间 也相 互 促 进 和 抑 制 ,以 维 持 抗 体 的 多 样 性 及 免 疫 平
衡 , 现 了 免 疫 系 统 的 自我 调 节 功 能 。 免 疫 遗 传 算 法 保 体
抗 体 群 体 即为 问题 的最 佳 解 ; 用 标 准 的 遗 传 算 法 进 化 抗 ⑥ 体 : 行 交叉 和 变异 操 作 。 进 这 个 模 型 使 免疫 系 统 可 以 通过 学 习 , 确定 哪些 抗 体 对
性, 在优 化 过 程 中 , 吸取 了 已有 优 化 算 法 的有 益 思 想 , 随 将 机搜 索 和确 定 性 的变 化 结 合 在 一 起 , 小 了 随机 因素 对 算 减
法 本 身 的 影 响 , 较好 地 消 除不 成熟 收 敛及 振 荡 现 象 。 因 能 此 在 TS P问 题 的 求 解 中 得 到 广 泛 应 用 。

遗传算法求解TSP的研究

建。 所以, 由M i c h a l e w i c z 和郭涛根据以上两类算子的优缺
最原始的遗传算法中, 仅仅包含三种最基本 的遗传算
点进行了结合, 得到了 一种比较适合 的算子, 这种算子叫做 子, 也就是选择算子、 交叉算子和变异算子, 这种最原始的 I n v e r — O v e r , 这种算子能够容易获取, 查找领域宽, 它的基 遗传算法工作的过程是非常简单的, 并且较为人们学习, 它 本思路 是 : 旅行 商问题的核心 参数是城市之间的边, 却不 也是其他的后来发展的遗传算法 的祖辈。 是这些城市的具地理位 置。 ( 1 ) 最原始的遗传算法的组成部分。 遗传算法中最基本
个体与一组向量对应 , 而此 向量又与一条可行路径 一一对 个体 的适应性的得分为0 或者是大于0 的数。 所 以, 我们必
应。 这样的编码方式不仅缩小了 种群规模 , 占用较 少内存,
须确定自适应性与遗传的概率的之间的正确规则。
作者简介: 周敏 ( 1 9 9 1 -) , 男, 湖南醴 陵人 , 研 究方向: 计算机 自 动化与智能传感器。
只有那些 能适应环 境的变 异类 型才 能生存下来 , 产生后
代, 而那些与环境不相适应 的变异类型将可能被淘汰。 在
它的工作效率比较高, 但也有 自身的缺点, 就是具有一定的 自然环 境中, 每种 生物都有 自己的适 应能力, 适应能力的
随机性 , 从而实现不 了对 团体中的个别的消息进行再次构 不同揭示了不同生物 的繁衍能力。
最优解。
3 算法理论分析
2 国内外研 究现状
达 尔文著名 的自然 选择 学说 , 是遗传 算法 的来 源理
目 前对遗传算法 的研究大部分是从算子 出发, 提 出各 论 , 该算法是一种迭代搜索算法。 达尔文的自然选择学说 生物 的变 异一般不是定向的, 而自然选择是定向的, 种杂交算子, 但这些算子一般在实际使用中需要花费较 大 认为: 的工作量, 比如 已有 的O X , P M X , S S X , E R X , C S E X 和D P X 等。 还有其他一种变异算子, 这种变异算子 以颠倒作为基 石,

遗传算法求解TSP问题

遗传算法求解TSP问题实验六遗传算法求解TSP问题⼀、实验⽬的熟悉和掌握遗传算法的原理、流程和编码策略,并利⽤遗传求解函数优化问题,理解求解TSP问题的流程并测试主要参数对结果的影响。

⼆、实验内容1、参考实验系统给出的遗传算法核⼼代码,⽤遗传算法求解TSP的优化问题,分析遗传算法求解不同规模TSP问题的算法性能。

2、对于同⼀个TSP问题,分析种群规模、交叉概率和变异概率对算法结果的影响。

3、增加1种变异策略和1种个体选择概率分配策略,⽐较求解同⼀TSP问题时不同变异策略及不同个体选择分配策略对算法结果的影响。

4、上交源代码。

三、遗传算法求解TSP问题的流程图四、遗传算法求解不同规模的TSP问题的算法性能(1)遗传算法执⾏⽅式说明:适应度值计算⽅法:当前路线的路径长度●个体选择概率分配⽅法:适应度⽐例⽅法●选择个体⽅法:轮盘赌选择●交叉类型:PMX交叉●变异类型: 两点互换变异(2)实验模拟结果:图1-1(3)分析由图1-1可知,遗传算法执⾏时间随着TSP问题规模的增⼤⽽增⼤,并且⼤致为线性增长。

五、不同参数下的计算结果对⽐最⼤迭代步数:100交叉概率:0.85变异概率:0.15如表1-1或3-1-0-9-2-4-8-5-7-6,注意到这是⼀圈,顺时针或者逆时针都可以。

当种群规模为10,20时,并没有找到最优解。

(2)交叉概率对算法结果的影响实验次数:15种群规模:25最⼤迭代步数:100变异概率:0.15实验结果:在该情况下,交叉概率过低将使搜索陷⼊迟钝状态,得不到最优解。

种群规模:25最⼤迭代步数:100交叉概率:0.85实验结果:⼜表1-3可知,当变异概率过⼤或过低都将导致⽆法得到最优解。

注:(2)(3)的实验数据与(1)的实验数据不同,详见附录。

六、不同变异策略和个体选择概率分配策略对算法结果的影响(1)两点互换变异与插⼊变异的⽐较:●试验次数(CASNUM):10●城市数(POINTCNT):10●种群规模(POPSIZE):100●最⼤迭代步数(GENERATIONS):100●交叉概率(PC):0.85●变异概率(PM):0.15●选择个体⽅法:轮盘赌选择●交叉类型:PMX交叉●个体选择概率分配⽅法:适应度⽐例⽅法a.变异类型: 两点互换变异b.变异类型: 插⼊变异分析:两点互换变异20次模拟中,4次得到⾮最优解;⽽插⼊变异只有2次;插⼊变异的最好适应度平均值⽐两点互换变异⼩0.14755,最差适应度平均值和总的适应度平均值都⽐两点互换下,并且在Release下,运⾏时间前者⽐后者快218.3ms。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

面向TSP问题的免疫遗传算法研究
作者:谢旻
来源:《软件导刊》2011年第06期
摘要:TSP问题作为NP 难题的典型代表,计算机算法理论研究的热点,各种针对该问题的算法层出不穷。

对近期出现的面向TSP问题的免疫遗传算法进行了介绍与总结,在分析了算法特点之后,提出了算法的改进方向,对TSP问题的研究进行了展望。

关键词:TSP问题;NP 难题;免疫遗传算法
中图分类号:TP301.6 文献标识码:A 文章编号:1672-7800(2011)06-0050-02
1 TSP问题的几类求解方法
由于TSP是一个NP难题,国内外许多研究人员尝试用各种算法来求解TSP问题。

其中,遗传算法以其良好的鲁棒性、灵活性、通用性,以及特别适合于求解大规模组合优化问题等特点,得到了应用。

但由于算法本身还存在着一些缺陷 ,如易出现未成熟收敛,局部搜索能力差,进化过程中不能很好地利用系统信息,进化后期易出现振荡现象等,因此不能保证以最大概率收敛到全局最优解。

此外,近年来出现的免疫算法借鉴生物免疫机理,能充分利用最优个体及系统的信息,且能有效保持种群多样性,在优化过程中,吸取了已有优化算法的有益思想,将随机搜索和确定性的变化结合在一起,减小了随机因素对算法本身的影响,能较好地消除不成熟收敛及振荡现象。

因此在TSP问题的求解中得到广泛应用。

免疫遗传算法是基于生物免疫机制提出的一类改进的遗传算法。

生物免疫系统在免疫应答过程中, 部分抗体作为记忆细胞保存下来, 当同类抗原再次侵入时, 记忆细胞被激活并产生大量抗体, 使再次应答比初次应答更迅速,体现了免疫系统的记忆功能。

同时, 抗体与抗体之间也相互促进和抑制, 以维持抗体的多样性及免疫平衡, 体现了免疫系统的自我调节功能。

免疫遗传算法保留了遗传算法的强大的全局随机搜索能力,提高了算法的搜索进度和速度。

2 免疫遗传算法原理
免疫遗传算法模拟生物抗体浓度自适应调节过程,将最优化解的目标函数对应为入侵生命体的抗原, 而解Xi的适应度f(Xi)对应为免疫系统产生的抗体,并根据抗体的浓度自适应的调
节搜索方向和解群的分布,从而大大提高算法克服局部收敛的能力。

免疫遗传算法的内容包括:①定义抗原:将需要解决的问题抽象成符合免疫系统处理的抗原形式,抗原识别则对应为问题的求解;②产生初始抗体群体:将抗体的群体定义为问题的解,抗体与抗原之间的亲和力对应问题解的评估:亲和力越高,说明解越好;③计算亲和力:计算抗原与抗体之间的亲和力;④进行各种免疫操作:这些免疫操作主要包括选择、克隆变异、自体耐受、抗体补充等。

这些免疫操作通常要考虑抗体的的亲和力和多样性等指标,作为其行动的指导。

其中,选择操作通常是指从群体中选出一些抗体进入下一步的免疫操作或进入下一代的抗体群体。

克隆变异通常是人工免疫算法产生新抗体的主要方式。

自体耐受则是对抗体的存在合理性进行判断的过程。

抗体补充则是补充群体模式的辅助手段;⑤评估新的抗体群体:若不能满足终止条件,则重新计算亲和力,重新开始;若满足终止条件则当前的抗体群体即为问题的最佳解;⑥用标准的遗传算法进化抗体:进行交叉和变异操作。

这个模型使免疫系统可以通过学习,确定哪些抗体对抗原的识别有帮助。

引入适应度来进一步完善免疫特性,目的是保证在遗传算法中抗体群体的多样性。

免疫遗传算法通过引入“免疫算子”,接种疫苗和疫苗选择,在算法中模拟了人体免疫系统所特有的自适应性和人工免疫这一加强人体免疫系统的手段,使构造出的算法具有快速全局收敛的良好性能。

免疫遗传算法的优越性在于:①采用接种疫苗,加入先验知识,可有效地加快算法的收敛速度和提高解的质量;②采用基于浓度的免疫选择方式,可防止“早熟”现象,又可保证寻优过程朝着全局最优的方向进行。

其缺点是:疫苗的选取和接种方式要求具体问题具体分析。

3 改进的免疫遗传算法
为了提高免疫遗传算法的性能,一类基于信息熵的改进算法被广泛使用。

这类算法通过每两个抗体相互比较来计算信息熵,最终可以评价出整个种群信息熵。

一般的,其选择策略包括3个步骤:①在免疫选择阶段通过计算抗体的信息熵来评价解的多样性;②引入阈值,计算种群中抗体的浓度;③计算抗体的选择率。

基于信息熵的免疫遗传算法的优点在于:①采用信息熵作为评价群体中解的相似度的指标比采用海明距离等指标更能客观地反映其含义;②采用基于浓度的选择机制,既鼓励适应度高的解,又抑制了浓度高的解,从而保证了算法的收敛及解群体的多样性,适合多峰值的寻优;
③引入阈值函数,可以进一步的提高算法性能。

但是,基于信息熵的算法也有其缺点:①算法设计过程复杂,求解公式中的常数因子需要凭先验知识确定,这些因子选择的好坏会直接影响到算法的收敛性能;②根据抗体之间信息熵的定义和亲和度计算等式可知,基于信息熵的免疫算法更适合采用二进制编码求解模式匹配问题,而不适合采用实数编码求解优化问题。

4 结束语
旅行商问题一直都是业界研究的热点,其应用广泛,在很多领域都有指导意义。

免疫遗传算法融合了人工免疫系统和遗传算法的优点,保留了遗传算法的强大全局随机搜索能力, 给出了接种疫苗,提高了遗传算法的收敛速度及精度, 在解决旅行商问题上有更优越的表现。

广泛使用的基于信息熵的改进免疫遗传算法借鉴人工免疫系统的抗体多样性来保证算法的群体多样性,从而避免了遗传算法的过早收敛和局部搜索能力差的缺点,提高了算法的搜索效率。

但同时免疫遗传算法有其固有的缺陷,其算法设计过程复杂,疫苗的选取需要先验知识,算法不合适采用实数编码求解优化问题。

笔者认为,基于TSP的免疫遗传算法研究可以从以下两个方面进行:①继续在已有TSP 算法上进行优化;②集合其它非免疫遗传算法的优点,进行混合TSP 算法的研究。

目前这些相关方向业界人士都有所涉及,也都取得了一定成效,相信随着研究的深入,TSP 问题会有更有效的解决方案。

参考文献:
\[1\] JINGUI LU, NING FANG, DINGHONG SHAO, CONGYAN LIU. An Improved Immune-Genetic Algorithm for the Traveling Salesman Problem\[C\] .Third International Conference on Natural Computation (ICNC 2007),2007.
\[2\] 红毛宗源.免疫算法的改进\[J\].计算机工程与应用,2002(10).
\[3\] LU G, TAN D J, ZHAO H M. Improvement on Regulating Definition of Antibody Density of immune algorithm.In:The 9th International Conference on Neural Information
Processing\[C\].NTU,Singapore,2002.
\[4\] 吕岗,陈小平,谭得健.免疫算法抗体浓度调节定义的改进\[J\].数据采集与处
理,2003(1).
(责任编辑:周晓辉)。

相关文档
最新文档