基于遗传算法的TSP问题解决

实验题目:的遗传算法解决TSP 问题

姓名:谢稳文

班级:智能1001

学号 :[1**********]

一:问题描述 旅行商问题,即TSP 问题(Travelling Salesman Problem)又译为旅行商问题, 货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n 个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。TSP 问题是一个组合优化问题。该问题可以被证明具有NPC 计算复杂性。因此,任何能使该问题的求解得以简化的方法,都将受到高度的评价和关注。

二:遗传算法的基本原理

遗传算法是由美国J. Holland 教授于1975 年在他的专著《自然界和人工系统的适应性》中首先提出的,它是一类借鉴生物界自然选择和自然遗传机制的随机化搜索算法。遗传算法模拟自然选择和自然遗传过程中发生的繁殖、交叉和基因突变现象,在每次迭代中都保留一组候选解,并按某种指标从解群中选取较优的个体,利用遗传算子(选择、交叉和变异) 对这些个体进行组合,产生新一代的候选解群,重复此过程,直到满足某种收敛指标为止。遗传算法,在本质上是一种不依赖具体问题的直接搜索方法,是一种求解问题的高效并行全局搜索方法。遗传算法在模式识别、神经网络、图像处理、机器

学习、工业优化控制、自适应控制、负载平衡、电磁系统设计、生物科学、社会科学等方面都得到了应用。在人工智能研究中,现在人们认为“遗传算法、自适应系统、细胞自动控制、混沌理论与人工智一样,都是对今后十年的计算技术有重大影响的关键技术”。 基本步骤为:

标准的遗传算法包括群体的初始化,选择,交叉,变异操作。所示,其主要步骤可描述如下:

(1)随机产生一组初始个体构成的初始种群,并评价每一个个体的适配值。

(2)判断算法的收敛准则是否满足。若满足输出搜索结果;否则执行以下步骤。

(3)根据适配值大小以一定方式执行选择操作。

(4)按交叉概率Pc 执行交叉操作。

(5)按变异概率Pm 执行变异操作。

(6)返回步骤(2)

算法流程图为

:

三:TSP问题的遗传算法设计

初始种群:对于n 个城市的问题,每个个体即每个解的长度为n ,用s 行, t 列的pop 矩阵表示初始群体,s 表示初始群体的个数,t 为n +1,矩阵的每一行的前n 个元素表示城市编码,最后一个元素表示这一路径的长度。这一算法通过start .m 程序实现。

适应度:在TSP 的求解中,可以直接用距离总和作为适应度函数。个体的路径长度越小,所得个体优越,以pop 矩阵的每一行最后一个元素作为个体适应值。

选择:选择就是从群体中选择优胜个体、淘汰劣质个体的操作,它是建立在群体中个体适应度评估基础上。这里采用方法是最优保存方法。算法就是首先将群体中适应度最大的k 个个体直接替换适应度最小的k 个体。

交叉:受贪婪算法的启发, 本文设计一种有目的使适应值上升的交叉算子。已知两a1(m11,m12,m13,...,m1n),a2(m21,m22,m23,...,m2n),算法产生后代a1’和a2’的过程如下:

(1) 随机产生一个城市d 作为交叉起点, 把d 作为a1’和a2’的起始点

(2) 分别从a1和a2中找出d 的右城市dr1和dr2, 并计算(d,dr1)和(d,dr2)的距离j1和j2。

(3) 如果j1

(4) 如果j1>j2,则把dr2作为a1' 的第二个点,从a1和a2中删除d ,并且把当前点改为dr2。

(5) 若此时p1和p2的个数为1,结束,否则回到第二步继续执行。 同理,把第二步中的右城市改成左城市dle1和dle2,通过计算(d,d1e1)和(d,d1e2) 的距离并比较大小来确定子代a2' 。

变异:变异操作是以变异概率Pm 对群体中个体串某些基因位上的基因值作变动,若变异后子代的适应度值更加优异,则保留子代染色体,否则,仍保留父代染色体。这里采用的方法是倒置变异法。假设当前个体X 为(1 3 7 4 8 0 5 9 6 2)。如果Pm>rand,那么随机选择 来自同一个体的两个点mutatepoint(1)和mutatepoint(2),比如说3和7,倒置P1和P 之间的部分,产生下面的子体X' 为(1 3 7 5 0 8 4 9 6 2)。

四:实验代码

1主函数部分

clc;

clear all ;

close all ;

global x y

cityfile = fopen( 'city30.txt' , 'rt' ); %取30个城市的样本

cities = fscanf( cityfile, '%f %f',[ 2,inf] );

fclose(cityfile);

t=30+1; %城市的数目是30个

s=1500; %样本的数目是1400个

G=300; %运算的代数

c=25; %选择算子中每次替代的样本的数量

x=cities(1,:);

y=cities(2,:);

pc=0.10; %交叉的概率

pm=0.8; %变异的概率

pop=zeros(s,t); %得初始的pop 矩阵,矩阵的最后一列表示所在行的样本的路径距离 for i=1:s

pop(i,1:t-1)=randperm(t-1); %随机产生1—(t-1)的t-1个数

end

for k=1:1:G %GA开始

if mod(k,50)==1

k

end

pop=distance(pop); %调用距离函数求距离

pop=select(pop,c); %调用选择函数

p1=rand;

if p1>=pc

pop=cross(pop); %调用交叉函数

end

p2=rand;

if p2>=pm

pop=mutate(pop); %调用变异函数

end

end %GA结束

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

bestL=min(pop(:,t))

J=pop(:,t);

fi=1./J;

[Oderfi,Indexfi]=sort(fi); %对于fi 进行排序

BestS=pop(Indexfi(s),:); %得到最短路

I=BestS;

for i=1:1:t-1

x1(i)=x(I(i));

y1(i)=y(I(i));

end

x1(t)=x(I(1));

y1(t)=y(I(1));

cities_new=[x1;y1];

disp('Best Route is:');disp(cities_new);

pos=[cities_new cities_new(:,1)];

lentemp=0;

for i=1:1:t-1

temp=sqrt((pos(1,i)-pos(1,i+1))^2+(pos(2,i)-pos(2,i+1))^2); lentemp=lentemp+temp;

end

disp('Shortest Length is:');disp(lentemp);

figure(1);

subplot(1,2,1); %窗口分割的左边部分

x(t)=x(1);y(t)=y(1);

plot(x,y,'-or' );

xlabel('X axis'), ylabel('Y axis'), title(' 原始路径' );

axis([0,1,0,1]);

axis([0,100,0,100]);

axis on

hold on ;

subplot(1,2,2); %窗口分割的右边部分

plot(x1,y1,'-or' );

xlabel('X axis'), ylabel('Y axis'), title(' 最新的路径' );

axis([0,1,0,1]);

axis([0,100,0,100]);

axis on

2距离函数

function [pop]=distance(pop)

global x y

[s,t]=size(pop);

for i=1:1:s

dd=0;

pos=pop(i,1:t-1);

pos=[pos pos(:,1)];

for j=1:1:t-1

m=pos(j);

n=pos(j+1);

dd=dd+sqrt((x(m)-x(n))^2+(y(m)-y(n))^2);

end

pop(i,t)=dd;

end

3选择函数

unction [pop]=select(pop,c)

[s,t]=size(pop);

m11=(pop(:,t));

m11=m11';

mmax=zeros(1,c);

mmin=zeros(1,c);

num=1;

while num

[a,mmax(num)]=max(m11); %选取当前样本的最大值并记录样本编号给mmax(num) m11(mmax(num))=0;

num=num+1;

end

num=1;

while num

[b,mmin(num)]=min(m11);

m11(mmin(num))=a;

num=num+1;

end

for i=1:c

pop(mmax(i),:)=pop(mmin(i),:); %用距离小的C 个样本替换距离大的C 个样本 end

4 交叉函数

function [pop]=cross(pop)

[s,t]=size(pop);

pop_1=pop;

n=randperm(s); %将种群随机排序

for i=1:2:s

%随机选择两个交叉点

m=randperm(t-3)+1;

crosspoint(1)=min(m(1),m(2));

crosspoint(2)=max(m(1),m(2));

%任意两行交叉

x1=n(i);

x2=n(i+1);

%将x1左边与x2的左边互换

middle=pop(x1,1:crosspoint(1));

pop(x1,1:crosspoint(1))=pop(x2,1:crosspoint(1));

pop(x2,1:crosspoint(1))=middle;

%将x1右边与x2的右边互换

middle=pop(x1,crosspoint(2)+1:t);

pop(x1,crosspoint(2)+1:t)=pop(x2,crosspoint(2)+1:t);

pop(x2,crosspoint(2)+1:t)=middle;

%检查x1左边的重复性并得到x1的左边

for j=1:crosspoint(1)

while find(pop(x1,crosspoint(1)+1:crosspoint(2))==pop(x1,j)) zhi=find(pop(x1,crosspoint(1)+1:crosspoint(2))==pop(x1,j)); %确定重复位置

temp=pop(x2,crosspoint(1)+zhi);

pop(x1,j)=temp;

end

end

%检查x1的右边的重复性并得到x1的右边

for j=crosspoint(2)+1:t-1

while find(pop(x1,crosspoint(1)+1:crosspoint(2))==pop(x1,j)) zhi=find(pop(x1,crosspoint(1)+1:crosspoint(2))==pop(x1,j)); %确定重复的位置

temp=pop(x2,crosspoint(1)+zhi);

pop(x1,j)=temp;

end

end

%检查x2左边的重复性并得到x2的左边

for j=1:crosspoint(1)

while find(pop(x2,crosspoint(1)+1:crosspoint(2))==pop(x2,j)) zhi=find(pop(x2,crosspoint(1)+1:crosspoint(2))==pop(x2,j)); 确定重复位置

temp=pop(x1,crosspoint(1)+zhi);

pop(x2,j)=temp;

end

end

%检查x2的右边的重复性并得到x2的右边

for j=crosspoint(2)+1:t-1

while find(pop(x2,crosspoint(1)+1:crosspoint(2))==pop(x2,j)) zhi=find(pop(x2,crosspoint(1)+1:crosspoint(2))==pop(x2,j)); %确定重复的位置

temp=pop(x1,crosspoint(1)+zhi);

pop(x2,j)=temp;

end

end

end

%生成的新的种群与交叉前进行比较,并取两者最优

[pop]=distance(pop);

for i=1:s

if pop_1(i,t)

pop(i,:)=pop_1(i,:);

end

end

5 变异函数

function [pop]=mutate(pop)

[s,t]=size(pop);

pop_1=pop;

for i=1:2:s

m=randperm(t-3)+1;

%随机取两个点

mutatepoint(1)=min(m(1),m(2));

mutatepoint(2)=max(m(1),m(2));

%用倒置变异的方法倒置两个点中间部分的位置

mutate=round((mutatepoint(2)-mutatepoint(1))/2-0.5); for j=1:mutate

zhong=pop(i,mutatepoint(1)+j);

pop(i,mutatepoint(1)+j)=pop(i,mutatepoint(2)-j); pop(i,mutatepoint(2)-j)=zhong;

end

end

[pop]=distance(pop);%生成的新的种群与变异前比较,并取两者最优 for i=1:s

if pop_1(i,t)

pop(i,:)=pop_1(i,:);

end

end

用上面的贪婪算法在matlab 里运算的结果如下:

五:实验心得

本实验利用遗传算法解决了小规模的TSP 问题。文章首先介绍了TSP 问题,并给出TSP 问题的数学定义,然后介绍了遗传算法的原理以及算法的基本过程。本文程序解决小规模的TSP 问题还可以,随着城市数目的增大,计算精度有所下降,计算时间增长很快,效率较低较快,这也是下一步需要改进的地方。

实验题目:的遗传算法解决TSP 问题

姓名:谢稳文

班级:智能1001

学号 :[1**********]

一:问题描述 旅行商问题,即TSP 问题(Travelling Salesman Problem)又译为旅行商问题, 货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n 个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。TSP 问题是一个组合优化问题。该问题可以被证明具有NPC 计算复杂性。因此,任何能使该问题的求解得以简化的方法,都将受到高度的评价和关注。

二:遗传算法的基本原理

遗传算法是由美国J. Holland 教授于1975 年在他的专著《自然界和人工系统的适应性》中首先提出的,它是一类借鉴生物界自然选择和自然遗传机制的随机化搜索算法。遗传算法模拟自然选择和自然遗传过程中发生的繁殖、交叉和基因突变现象,在每次迭代中都保留一组候选解,并按某种指标从解群中选取较优的个体,利用遗传算子(选择、交叉和变异) 对这些个体进行组合,产生新一代的候选解群,重复此过程,直到满足某种收敛指标为止。遗传算法,在本质上是一种不依赖具体问题的直接搜索方法,是一种求解问题的高效并行全局搜索方法。遗传算法在模式识别、神经网络、图像处理、机器

学习、工业优化控制、自适应控制、负载平衡、电磁系统设计、生物科学、社会科学等方面都得到了应用。在人工智能研究中,现在人们认为“遗传算法、自适应系统、细胞自动控制、混沌理论与人工智一样,都是对今后十年的计算技术有重大影响的关键技术”。 基本步骤为:

标准的遗传算法包括群体的初始化,选择,交叉,变异操作。所示,其主要步骤可描述如下:

(1)随机产生一组初始个体构成的初始种群,并评价每一个个体的适配值。

(2)判断算法的收敛准则是否满足。若满足输出搜索结果;否则执行以下步骤。

(3)根据适配值大小以一定方式执行选择操作。

(4)按交叉概率Pc 执行交叉操作。

(5)按变异概率Pm 执行变异操作。

(6)返回步骤(2)

算法流程图为

:

三:TSP问题的遗传算法设计

初始种群:对于n 个城市的问题,每个个体即每个解的长度为n ,用s 行, t 列的pop 矩阵表示初始群体,s 表示初始群体的个数,t 为n +1,矩阵的每一行的前n 个元素表示城市编码,最后一个元素表示这一路径的长度。这一算法通过start .m 程序实现。

适应度:在TSP 的求解中,可以直接用距离总和作为适应度函数。个体的路径长度越小,所得个体优越,以pop 矩阵的每一行最后一个元素作为个体适应值。

选择:选择就是从群体中选择优胜个体、淘汰劣质个体的操作,它是建立在群体中个体适应度评估基础上。这里采用方法是最优保存方法。算法就是首先将群体中适应度最大的k 个个体直接替换适应度最小的k 个体。

交叉:受贪婪算法的启发, 本文设计一种有目的使适应值上升的交叉算子。已知两a1(m11,m12,m13,...,m1n),a2(m21,m22,m23,...,m2n),算法产生后代a1’和a2’的过程如下:

(1) 随机产生一个城市d 作为交叉起点, 把d 作为a1’和a2’的起始点

(2) 分别从a1和a2中找出d 的右城市dr1和dr2, 并计算(d,dr1)和(d,dr2)的距离j1和j2。

(3) 如果j1

(4) 如果j1>j2,则把dr2作为a1' 的第二个点,从a1和a2中删除d ,并且把当前点改为dr2。

(5) 若此时p1和p2的个数为1,结束,否则回到第二步继续执行。 同理,把第二步中的右城市改成左城市dle1和dle2,通过计算(d,d1e1)和(d,d1e2) 的距离并比较大小来确定子代a2' 。

变异:变异操作是以变异概率Pm 对群体中个体串某些基因位上的基因值作变动,若变异后子代的适应度值更加优异,则保留子代染色体,否则,仍保留父代染色体。这里采用的方法是倒置变异法。假设当前个体X 为(1 3 7 4 8 0 5 9 6 2)。如果Pm>rand,那么随机选择 来自同一个体的两个点mutatepoint(1)和mutatepoint(2),比如说3和7,倒置P1和P 之间的部分,产生下面的子体X' 为(1 3 7 5 0 8 4 9 6 2)。

四:实验代码

1主函数部分

clc;

clear all ;

close all ;

global x y

cityfile = fopen( 'city30.txt' , 'rt' ); %取30个城市的样本

cities = fscanf( cityfile, '%f %f',[ 2,inf] );

fclose(cityfile);

t=30+1; %城市的数目是30个

s=1500; %样本的数目是1400个

G=300; %运算的代数

c=25; %选择算子中每次替代的样本的数量

x=cities(1,:);

y=cities(2,:);

pc=0.10; %交叉的概率

pm=0.8; %变异的概率

pop=zeros(s,t); %得初始的pop 矩阵,矩阵的最后一列表示所在行的样本的路径距离 for i=1:s

pop(i,1:t-1)=randperm(t-1); %随机产生1—(t-1)的t-1个数

end

for k=1:1:G %GA开始

if mod(k,50)==1

k

end

pop=distance(pop); %调用距离函数求距离

pop=select(pop,c); %调用选择函数

p1=rand;

if p1>=pc

pop=cross(pop); %调用交叉函数

end

p2=rand;

if p2>=pm

pop=mutate(pop); %调用变异函数

end

end %GA结束

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

bestL=min(pop(:,t))

J=pop(:,t);

fi=1./J;

[Oderfi,Indexfi]=sort(fi); %对于fi 进行排序

BestS=pop(Indexfi(s),:); %得到最短路

I=BestS;

for i=1:1:t-1

x1(i)=x(I(i));

y1(i)=y(I(i));

end

x1(t)=x(I(1));

y1(t)=y(I(1));

cities_new=[x1;y1];

disp('Best Route is:');disp(cities_new);

pos=[cities_new cities_new(:,1)];

lentemp=0;

for i=1:1:t-1

temp=sqrt((pos(1,i)-pos(1,i+1))^2+(pos(2,i)-pos(2,i+1))^2); lentemp=lentemp+temp;

end

disp('Shortest Length is:');disp(lentemp);

figure(1);

subplot(1,2,1); %窗口分割的左边部分

x(t)=x(1);y(t)=y(1);

plot(x,y,'-or' );

xlabel('X axis'), ylabel('Y axis'), title(' 原始路径' );

axis([0,1,0,1]);

axis([0,100,0,100]);

axis on

hold on ;

subplot(1,2,2); %窗口分割的右边部分

plot(x1,y1,'-or' );

xlabel('X axis'), ylabel('Y axis'), title(' 最新的路径' );

axis([0,1,0,1]);

axis([0,100,0,100]);

axis on

2距离函数

function [pop]=distance(pop)

global x y

[s,t]=size(pop);

for i=1:1:s

dd=0;

pos=pop(i,1:t-1);

pos=[pos pos(:,1)];

for j=1:1:t-1

m=pos(j);

n=pos(j+1);

dd=dd+sqrt((x(m)-x(n))^2+(y(m)-y(n))^2);

end

pop(i,t)=dd;

end

3选择函数

unction [pop]=select(pop,c)

[s,t]=size(pop);

m11=(pop(:,t));

m11=m11';

mmax=zeros(1,c);

mmin=zeros(1,c);

num=1;

while num

[a,mmax(num)]=max(m11); %选取当前样本的最大值并记录样本编号给mmax(num) m11(mmax(num))=0;

num=num+1;

end

num=1;

while num

[b,mmin(num)]=min(m11);

m11(mmin(num))=a;

num=num+1;

end

for i=1:c

pop(mmax(i),:)=pop(mmin(i),:); %用距离小的C 个样本替换距离大的C 个样本 end

4 交叉函数

function [pop]=cross(pop)

[s,t]=size(pop);

pop_1=pop;

n=randperm(s); %将种群随机排序

for i=1:2:s

%随机选择两个交叉点

m=randperm(t-3)+1;

crosspoint(1)=min(m(1),m(2));

crosspoint(2)=max(m(1),m(2));

%任意两行交叉

x1=n(i);

x2=n(i+1);

%将x1左边与x2的左边互换

middle=pop(x1,1:crosspoint(1));

pop(x1,1:crosspoint(1))=pop(x2,1:crosspoint(1));

pop(x2,1:crosspoint(1))=middle;

%将x1右边与x2的右边互换

middle=pop(x1,crosspoint(2)+1:t);

pop(x1,crosspoint(2)+1:t)=pop(x2,crosspoint(2)+1:t);

pop(x2,crosspoint(2)+1:t)=middle;

%检查x1左边的重复性并得到x1的左边

for j=1:crosspoint(1)

while find(pop(x1,crosspoint(1)+1:crosspoint(2))==pop(x1,j)) zhi=find(pop(x1,crosspoint(1)+1:crosspoint(2))==pop(x1,j)); %确定重复位置

temp=pop(x2,crosspoint(1)+zhi);

pop(x1,j)=temp;

end

end

%检查x1的右边的重复性并得到x1的右边

for j=crosspoint(2)+1:t-1

while find(pop(x1,crosspoint(1)+1:crosspoint(2))==pop(x1,j)) zhi=find(pop(x1,crosspoint(1)+1:crosspoint(2))==pop(x1,j)); %确定重复的位置

temp=pop(x2,crosspoint(1)+zhi);

pop(x1,j)=temp;

end

end

%检查x2左边的重复性并得到x2的左边

for j=1:crosspoint(1)

while find(pop(x2,crosspoint(1)+1:crosspoint(2))==pop(x2,j)) zhi=find(pop(x2,crosspoint(1)+1:crosspoint(2))==pop(x2,j)); 确定重复位置

temp=pop(x1,crosspoint(1)+zhi);

pop(x2,j)=temp;

end

end

%检查x2的右边的重复性并得到x2的右边

for j=crosspoint(2)+1:t-1

while find(pop(x2,crosspoint(1)+1:crosspoint(2))==pop(x2,j)) zhi=find(pop(x2,crosspoint(1)+1:crosspoint(2))==pop(x2,j)); %确定重复的位置

temp=pop(x1,crosspoint(1)+zhi);

pop(x2,j)=temp;

end

end

end

%生成的新的种群与交叉前进行比较,并取两者最优

[pop]=distance(pop);

for i=1:s

if pop_1(i,t)

pop(i,:)=pop_1(i,:);

end

end

5 变异函数

function [pop]=mutate(pop)

[s,t]=size(pop);

pop_1=pop;

for i=1:2:s

m=randperm(t-3)+1;

%随机取两个点

mutatepoint(1)=min(m(1),m(2));

mutatepoint(2)=max(m(1),m(2));

%用倒置变异的方法倒置两个点中间部分的位置

mutate=round((mutatepoint(2)-mutatepoint(1))/2-0.5); for j=1:mutate

zhong=pop(i,mutatepoint(1)+j);

pop(i,mutatepoint(1)+j)=pop(i,mutatepoint(2)-j); pop(i,mutatepoint(2)-j)=zhong;

end

end

[pop]=distance(pop);%生成的新的种群与变异前比较,并取两者最优 for i=1:s

if pop_1(i,t)

pop(i,:)=pop_1(i,:);

end

end

用上面的贪婪算法在matlab 里运算的结果如下:

五:实验心得

本实验利用遗传算法解决了小规模的TSP 问题。文章首先介绍了TSP 问题,并给出TSP 问题的数学定义,然后介绍了遗传算法的原理以及算法的基本过程。本文程序解决小规模的TSP 问题还可以,随着城市数目的增大,计算精度有所下降,计算时间增长很快,效率较低较快,这也是下一步需要改进的地方。


相关内容

  • 解决TSP的遗传算法初始种群改进方法研究
  • 解决TSP 的遗传算法初始种群改进方法研究1 贾海鹏,郑丽英,何天斌,徐顼 兰州交通大学电子与信息工程学院,甘肃兰州(730070) E-mail : 摘 要:遗传算法受实际系统计算能力的限制,种群个体和迭代次数有限,因此初始种群的选择成为算法成败的一个至关重要的因素,直接影响到算法的寻优效率和效果 ...

  • 禁忌搜索算法求解旅行商问题研究
  • 第!"卷第#期西南师范大学学报(自然科学版)!$$!年%月 &'()!"*')#+',-./('01',234562738./*'-9/(:.8;5-682 文章编号:>$$$?@">(!$$!)$#$#@>$? 禁忌搜索算法求解旅行商问题研究 ...

  • 旅行商问题_TSP_的几种求解方法
  • 第23卷 第08期 文章编号:1006-9348(2006) 08-0153-05 计 算 机 仿 真 2006年08月 旅行商问题(TSP) 的几种求解方法 田贵超, 黎明, 韦雪洁 (南昌航空工业学院测试技术与控制工程系, 江西南昌330034) 摘要:旅行商问题(TSP) 是组合优化领域里的一 ...

  • 一种求解TSP问题的并行遗传算法
  • 第22卷 第2期 文章编号:1006-9348(2005) 02-0082-04 计 算 机 仿 真 2005年2月 一种求解TSP 问题的并行遗传算法 侯建花, 杨长青 (成都理工大学, 四川成都610059) 摘要:遗传算法(G A ) 是一种基于自然群体遗传机制的有效搜索算法, 由于它在搜索空 ...

  • 车辆路径问题的模型及算法研究综述
  • 管 理 工 程 学 报 Vol119,No11 JournalofIndustrialEngineeringΠEngineeringManagement 2005年第1期 外论评介 车辆路径问题的模型及算法研究综述 刘云忠,宣慧玉 (西安交通大学管理学院,陕西西安710049) 摘要:本文在文献[1 ...

  • 蚁群算法的几乎处处强收敛性分析
  • 第8期加09年8月 电子学报 v01.37No.8 ACTAEU£CrRONICAslNICA Aug.2009 蚁群算法的几乎处处强收敛性分析 苏兆品1.-,蒋建国1,一,梁昌勇2,张国富1,3,1,夏 娜1・3 (1.合肥工业大学计算机与信息学院,安徽合肥230(109:2.合肥工业大学管理科学 ...

  • 带有时间窗约束的车辆路径问题的一种改进遗传算法
  • 系 统 管理学报 第19卷 不同,文献[6]中100,本文30:③文献[6]中没有给出20次求解中有多少次求得最优解,本文算法在软硬2种时间窗下,求得最优解的概率分别为90%和75%.由此可以看出本文算法具有较快的收敛速度和较高的稳定性. 表2实例l.软时间窗下算法运行结果 第2个实例[6],该问题 ...

  • 新技术讲座论文
  • 智能控制中蚁群算法的研究及展望 姓名:李妍 学号:040930503 班级:0309102 摘要:蚁群算法是一种新型的模拟进化算法,研究表明该算法具有很好的并行性和鲁棒性等优良性质,在离散的组合优化问题中实验,取得了良好的效果.本文阐述了蚁群算法的原理,对目前蚁群算法的研究进展情况进行了分析,介绍了 ...

  • 生活垃圾管理系统优秀论文
  • 承 诺 书 我们仔细阅读了中国大学生数学建模竞赛的竞赛规则. 我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话.电子邮件.网上咨询等)与队外的任何人(包括指导教师)研究.讨论与赛题有关的问题. 我们知道,抄袭别人的成果是违反竞赛规则的, 如果引用别人的成果或其他公开的资料(包括网上查到的资 ...