MATLAB关于旅行商问题遗传算法的研究

基于遗传算法对TSP问题的研究

摘要:作为一种模拟生物自然遗传与进化过程的优化方法,遗传算法(GA)因其具有隐并行性、不需目标函数可微等特点,常被用于解决一些传统优化方法难以解决的问题。旅行商问题(TSP)是典型的NP难题组合优化问题之一,且被广泛应用于许多领域,所以研究遗传算法求解TSP具有重要的理论意义和应用价值。

关键字:遗传算法旅行商问题

Abstract:Genetic algorithm(GA) which has the characteristic of latent parallelism, non-differentiability of objective function and so on, as a optimization method of simulating the process of natural biotic inherit and evolution, is used to solve some problems which are difficult to solve by the traditional optimization method. Travel salesman problem(TSP) is a typical NF s combination and optimization problem, and is widely used in many fields. So the genetic algorithm to solve TSP has important theoretical significance and application value.

Keywords:genetic algorithm TSP

一、引言

在过去,人们往往只能够处理一些简单的问题,对于大型复杂系统的优化和自适应仍然无能为力。但是在自然界中,生物在这方面表现出了其优异的能力,他们能够通过优胜劣汰、适者生存的自然进化规则进行生存和繁衍,并且慢慢的产生对其生存环境适应性越来越高的优良物种。遗传算法就是模拟自然进化的一种高效的算法。其基本思想就是模拟自然界进化机制和生物进化论而形成的一种过程搜索最优解得算法。

遗传算法是一门新的学科,各种理论、方法都尚未成熟,有待于进一步地发展和完善,但它却让我们看到了解决许多复杂问题的希望。尽管在遗传算法的研究和应用过程中出现过许多难题,同时也会产生许多不同的算法设计,但是,目前遗传算法的运用过程中已经展现出了其优异的性能和巨大的发展前景。我们相信,随着研究工作的进一步深入和发展,遗传算法一定能够在智能计算领域中起到关键性作用。

巡回旅行商问题(Traveling Salesman Problem, TSP),是一个著名的组合优化问题[1],该类问题具有很强的运用背景。如数控机床上的最优钻孔路线的选取、电路板的焊接、物流的调度问题都属于旅行商问题。因此旅行商问题受到了各方面的关注。目前解决TSP问题的主要方法有启发式搜索法、模拟退火算法、遗传算法、Hopfield神经网络算法、二叉树描

述算法。有效解决TSP问题在计算理论和实际应用上都有很高的价值。本文主要介绍了运用遗传算法来解决TSP问题。

二、研究背景

路径的选择目标是要求得的路径路程为所有路径之中的最小值

旅行推销员问题是数图论中最著名的问题之一,即“已给一个n个点的完全图,每条边都有一个长度,求总长度最短的经过每个顶点正好一次的封闭回路”。Edmonds,Cook和Karp 等人发现,这批难题有一个值得注意的性质,对其中一个问题存在有效算法时,每个问题都会有有效算法。

迄今为止,这类问题中没有一个找到有效算法。倾向于接受NP完全问题(NP-Complete 或NPC)和NP难题(NP-Hard或NPH)不存在有效算法这一猜想,认为这类问题的大型实例不能用精确算法求解,必须寻求这类问题的有效的近似算法

旅行商问题在很多领域中都可以应用,例如:

3、在互联网环境中如何更好地设置节点,以更好地让信息流动等。

三、解决TSP问题所使用的方法

旅行商问题是一个典型的NP完全问题,遗传算法是解决这类问题一个比较理想的算法。遗传算法是近年来迅速发展起来的一种全新的随机搜索与优化方法。它的基本思想来自于Darwin的进化论和Mendel的遗传学。

遗传算法是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法,它借鉴了达尔文的进化论和孟德尔的遗传学说。其本质是一种高效、并行、全局搜索的方法,它能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应的控制搜索过程以求得最优解。遗传算法操作使用适者生存的原则,在潜在的解决方案种群中逐次产生一个近似最优解的方案,在遗传算法的每一代中,根据个体在问题域中的适应度值和从自然遗传学中借鉴来的再

造方法进行个体选择,产生一个新的近似解。这个过程导致种群中个体的进化,得到的新个体比原来个体更能适应环境,就像自然界中的改造一样。

遗传算法是计算机科学人工智能领域中用于解决最优化的一种搜索启发式算法,是进化算法的一种。这种启发式通常用来生成有用的解决方案来优化和搜索问题。进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择以及杂交等。

遗传算法广泛应用在生物信息学、系统发生学、计算科学、工程学、经济学、化学、制造、数学、物理、药物测量学和其他领域之中。

遗传算法通常实现方式为一种计算机模拟。对于一个最优化问题,一定数量的候选解(称为个体)的抽象表示(称为染色体)的种群向更好的解进化。传统上,解用二进制表示(即0和1的串),但也可以用其他表示方法。进化从完全随机个体的种群开始,之后一代一代发生。在每一代中,整个种群的适应度被评价,从当前种群中随机地选择多个个体(基于它们的适应度),通过自然选择产生新的生命种群,该种群在算法的下一次迭代中成为当前种群。

遗传算法在解决TSP问题的流程图如图 1 所示。

图1 遗传算法在解决TSP问题的流程图

实例:假设有一个旅行商人要拜访30个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值

基于遗传算法解决TSP问题的程序如下:

clear;

CityNum=30;

[dislist,Clist]=tsp(CityNum);

Tlist=zeros(CityNum);

cl=100;

bsf=Inf;

tl=50;

l1=200;

S0=randperm(CityNum);

S=S0;

BSF=S0;

Si=zeros(l1,CityNum);

StopL=2000;

p=1;

clf;

figure(1);

while (p

if l1>CityNum*(CityNum)/2

disp('候选解个数,不大于n*(n-1)/2(全部领域解个数)!系统自动退出!'); l1=(CityNum*(CityNum)/2)^.5;

break;

end

ArrS(p)=CalDist(islist,S);

i=1;

A=zeros(l1,2);

while i<=l1

M=CityNum*rand(1,2);

M=ceil(M);

if M(1)~=M(2)

m1=max(M(1),M(2));m2=min(M(1),M(2));

A(i,1)=m1;A(i,2)=m2;

if i==1

isdel=0;

else

for j=1:i-1

相关文档
最新文档