MATLAB多旅行商问题源代码

MATLAB多旅行商问题源代码
MATLAB多旅行商问题源代码

MATLAB多旅行商问题源代码

functionvarargout = mtspf_ga(xy,dmat,salesmen,min_tour,pop_size,num_iter,show_prog,show_res)

% MTSPF_GA Fixed Multiple Traveling Salesmen Problem (M-TSP) Genetic Algorithm (GA)

% Finds a (near) optimal solution to a variation of the M-TSP by setting

% up a GA to search for the shortest route (least distance needed for

% each salesman to travel from the start location to individual cities

% and back to the original starting place)

%

% Summary:

% 1. Each salesman starts at the first point, and ends at the first

% point, but travels to a unique set of cities in between

% 2. Except for the first, each city is visited by exactly one salesman

%

% Note: The Fixed Start/End location is taken to be the first XY point

%

% Input:

% XY (float) is an Nx2 matrix of city locations, where N is the number of cities

% DMAT (float) is an NxN matrix of city-to-city distances or costs

% SALESMEN (scalar integer) is the number of salesmen to visit the cities

% MIN_TOUR (scalar integer) is the minimum tour length for any of the

% salesmen, NOT including the start/end point

% POP_SIZE (scalar integer) is the size of the population (should be divisible by 8)

% NUM_ITER (scalar integer) is the number of desired iterations for the algorithm to run

% SHOW_PROG (scalar logical) shows the GA progress if true

% SHOW_RES (scalar logical) shows the GA results if true

%

% Output:

% OPT_RTE (integer array) is the best route found by the algorithm

% OPT_BRK (integer array) is the list of route break points (these specify the indices

% into the route used to obtain the individual salesman routes)

% MIN_DIST (scalar float) is the total distance traveled by the salesmen

%

% Route/Breakpoint Details:

% If there are 10 cities and 3 salesmen, a possible route/break

% combination might be: rte = [5 6 9 4 2 8 10 3 7], brks = [3 7]

% Taken together, these represent the solution [1 5 6 9 1][1 4 2 8 1][1 10 3 7 1],

% which designates the routes for the 3 salesmen as follows:

% . Salesman 1 travels from city 1 to 5 to 6 to 9 and back to 1

% . Salesman 2 travels from city 1 to 4 to 2 to 8 and back to 1

% . Salesman 3 travels from city 1 to 10 to 3 to 7 and back to 1

%

% 2D Example:

% n = 35;

% xy = 10*rand(n,2);

% salesmen = 5;

% min_tour = 3;

% pop_size = 80;

% num_iter = 5e3;

% a = meshgrid(1:n);

% dmat = reshape(sqrt(sum((xy(a,:)-xy(a',:)).^2,2)),n,n);

% [opt_rte,opt_brk,min_dist] = mtspf_ga(xy,dmat,salesmen,min_tour, ... % pop_size,num_iter,1,1);

%

% 3D Example:

% n = 35;

% xyz = 10*rand(n,3);

% salesmen = 5;

% min_tour = 3;

% pop_size = 80;

% num_iter = 5e3;

% a = meshgrid(1:n);

% dmat = reshape(sqrt(sum((xyz(a,:)-xyz(a',:)).^2,2)),n,n);

% [opt_rte,opt_brk,min_dist] = mtspf_ga(xyz,dmat,salesmen,min_tour, ... % pop_size,num_iter,1,1);

%

% See also: mtsp_ga, mtspo_ga, mtspof_ga, mtspofs_ga, mtspv_ga, distmat

%

% Author: Joseph Kirk

% Email: jdkirk630@https://www.360docs.net/doc/641797704.html,

% Release: 1.3

% Release Date: 6/2/09

% Process Inputs and Initialize Defaults

nargs = 8;

for k = nargin:nargs-1

switch k

case 0

xy = 10*rand(40,2);

case 1

N = size(xy,1);

a = meshgrid(1:N);

dmat = reshape(sqrt(sum((xy(a,:)-xy(a',:)).^2,2)),N,N);

case 2

salesmen = 5;

case 3

min_tour = 2;

case 4

pop_size = 80;

case 5

num_iter = 5e3;

case 6

show_prog = 1;

case 7

show_res = 1;

otherwise

end

end

% Verify Inputs

[N,dims] = size(xy);

[nr,nc] = size(dmat);

if N ~= nr || N ~= nc

error('Invalid XY or DMAT inputs!')

end

n = N - 1; % Separate Start/End City

% Sanity Checks

salesmen = max(1,min(n,round(real(salesmen(1)))));

min_tour = max(1,min(floor(n/salesmen),round(real(min_tour(1))))); pop_size = max(8,8*ceil(pop_size(1)/8));

num_iter = max(1,round(real(num_iter(1))));

show_prog = logical(show_prog(1));

show_res = logical(show_res(1));

% Initializations for Route Break Point Selection

num_brks = salesmen-1;

dof = n - min_tour*salesmen; % degrees of freedom addto = ones(1,dof+1);

for k = 2:num_brks

addto = cumsum(addto);

end

cum_prob = cumsum(addto)/sum(addto);

% Initialize the Populations

pop_rte = zeros(pop_size,n); % population of routes

pop_brk = zeros(pop_size,num_brks); % population of breaks

for k = 1:pop_size

pop_rte(k,:) = randperm(n)+1;

pop_brk(k,:) = randbreaks();

end

% Select the Colors for the Plotted Routes

clr = [1 0 0; 0 0 1; 0.67 0 1; 0 1 0; 1 0.5 0];

if salesmen > 5

clr = hsv(salesmen);

end

% Run the GA

global_min = Inf;

total_dist = zeros(1,pop_size);

dist_history = zeros(1,num_iter);

tmp_pop_rte = zeros(8,n);

tmp_pop_brk = zeros(8,num_brks);

new_pop_rte = zeros(pop_size,n);

new_pop_brk = zeros(pop_size,num_brks);

ifshow_prog

pfig = figure('Name','MTSPF_GA | Current Best Solution','Numbertitle','off'); end

foriter = 1:num_iter

% Evaluate Members of the Population

for p = 1:pop_size

d = 0;

p_rte = pop_rte(p,:);

p_brk = pop_brk(p,:);

rng = [[1 p_brk+1];[p_brk n]]';

for s = 1:salesmen

d = d + dmat(1,p_rte(rng(s,1))); % Add Start Distance

for k = rng(s,1):rng(s,2)-1

d = d + dmat(p_rte(k),p_rte(k+1));

end

d = d + dmat(p_rte(rng(s,2)),1); % Add End Distance

end

total_dist(p) = d;

end

% Find the Best Route in the Population

[min_dist,index] = min(total_dist);

dist_history(iter) = min_dist;

ifmin_dist

global_min = min_dist;

opt_rte = pop_rte(index,:);

opt_brk = pop_brk(index,:);

rng = [[1 opt_brk+1];[opt_brk n]]';

ifshow_prog

% Plot the Best Route

figure(pfig);

for s = 1:salesmen

rte = [1 opt_rte(rng(s,1):rng(s,2)) 1];

if dims == 3, plot3(xy(rte,1),xy(rte,2),xy(rte,3),'.-','Color',clr(s,:));

else plot(xy(rte,1),xy(rte,2),'.-','Color',clr(s,:)); end

title(sprintf('Total Distance = %1.4f, Iteration = %d',min_dist,iter));

hold on

end

if dims == 3, plot3(xy(1,1),xy(1,2),xy(1,3),'ko');

else plot(xy(1,1),xy(1,2),'ko'); end

hold off

end

end

% Genetic Algorithm Operators

rand_grouping = randperm(pop_size);

for p = 8:8:pop_size

rtes = pop_rte(rand_grouping(p-7:p),:);

brks = pop_brk(rand_grouping(p-7:p),:);

dists = total_dist(rand_grouping(p-7:p));

[ignore,idx] = min(dists);

best_of_8_rte = rtes(idx,:);

best_of_8_brk = brks(idx,:);

rte_ins_pts = sort(ceil(n*rand(1,2)));

I = rte_ins_pts(1);

J = rte_ins_pts(2);

for k = 1:8 % Generate New Solutions

tmp_pop_rte(k,:) = best_of_8_rte;

tmp_pop_brk(k,:) = best_of_8_brk;

switch k

case 2 % Flip

tmp_pop_rte(k,I:J) = fliplr(tmp_pop_rte(k,I:J));

case 3 % Swap

tmp_pop_rte(k,[I J]) = tmp_pop_rte(k,[J I]);

case 4 % Slide

tmp_pop_rte(k,I:J) = tmp_pop_rte(k,[I+1:J I]);

case 5 % Modify Breaks

tmp_pop_brk(k,:) = randbreaks();

case 6 % Flip, Modify Breaks

tmp_pop_rte(k,I:J) = fliplr(tmp_pop_rte(k,I:J));

tmp_pop_brk(k,:) = randbreaks();

case 7 % Swap, Modify Breaks

tmp_pop_rte(k,[I J]) = tmp_pop_rte(k,[J I]);

tmp_pop_brk(k,:) = randbreaks();

case 8 % Slide, Modify Breaks

tmp_pop_rte(k,I:J) = tmp_pop_rte(k,[I+1:J I]);

tmp_pop_brk(k,:) = randbreaks();

otherwise % Do Nothing

end

end

new_pop_rte(p-7:p,:) = tmp_pop_rte;

new_pop_brk(p-7:p,:) = tmp_pop_brk;

end

pop_rte = new_pop_rte;

pop_brk = new_pop_brk;

end

ifshow_res

% Plots

figure('Name','MTSPF_GA | Results','Numbertitle','off');

subplot(2,2,1);

if dims == 3, plot3(xy(:,1),xy(:,2),xy(:,3),'k.');

else plot(xy(:,1),xy(:,2),'k.'); end

title('City Locations');

subplot(2,2,2);

imagesc(dmat([1 opt_rte],[1 opt_rte]));

title('Distance Matrix');

subplot(2,2,3);

rng = [[1 opt_brk+1];[opt_brk n]]';

for s = 1:salesmen

rte = [1 opt_rte(rng(s,1):rng(s,2)) 1];

if dims == 3, plot3(xy(rte,1),xy(rte,2),xy(rte,3),'.-','Color',clr(s,:));

else plot(xy(rte,1),xy(rte,2),'.-','Color',clr(s,:)); end

title(sprintf('Total Distance = %1.4f',min_dist));

hold on;

end

if dims == 3, plot3(xy(1,1),xy(1,2),xy(1,3),'ko');

else plot(xy(1,1),xy(1,2),'ko'); end

subplot(2,2,4);

plot(dist_history,'b','LineWidth',2);

title('Best Solution History');

set(gca,'XLim',[0 num_iter+1],'YLim',[0 1.1*max([1 dist_history])]);

end

% Return Outputs

ifnargout

varargout{1} = opt_rte;

varargout{2} = opt_brk;

varargout{3} = min_dist;

end

% Generate Random Set of Break Points

function breaks = randbreaks()

ifmin_tour == 1 % No Constraints on Breaks

tmp_brks = randperm(n-1);

breaks = sort(tmp_brks(1:num_brks));

else % Force Breaks to be at Least the Minimum Tour Length num_adjust = find(rand < cum_prob,1)-1;

spaces = ceil(num_brks*rand(1,num_adjust));

adjust = zeros(1,num_brks);

forkk = 1:num_brks

adjust(kk) = sum(spaces == kk);

end

breaks = min_tour*(1:num_brks) + cumsum(adjust);

end

end

end

2.旅行商TSP问题(1.1)

旅行商问题 旅行商问题(Traveling Salesman Problem,TSP)又译为旅行推销员问题、货郎担问题,简称为TSP问题,是最基本的路线问题,该问题是在寻求单一旅行者由起点出发,通过所有给定的需求点之后,最后再回到原点的最小路径成本。最早的旅行商问题的数学规划是由Dantzig(1959)等人提出。 目录 目录 旅行商问题 (1) 目录 (1) 1.简介 (1) 2.研究历史 (2) 3.问题解法 (2) 4.解法思路 (2) 途程建构法 (2) 途程改善法 (2) 合成启发法 (3) 5.研究进展 (3) 6.问题分析 (3) 1.简介 “旅行商问题”常被称为“旅行推销员问题”,是指一名推销员要拜访多个地点时,如何找到在拜访每个地点一次后再回到起点的最短路径。规则虽然简单,但在地点数目增多后求解却极为复杂。以42个地点为例,如果要列举所有路径后再确定最佳行程,那么总路径数量之大,几乎难以计算出来。多年来全球数学家绞尽脑汁,试图找到一个高效的算法。TSP问题在物流中的描述是对应一个物流配送公司,欲将n个客户的订货沿最短路线全部送到。如何确定最短路线。TSP问题最简单的求解方法是枚举法。它的解是多维的、多局部极值的、趋于无穷大的复杂解的空间,搜索空间是n个点的所有排列的集合,大小为(n-1)。可以形象地把解空间看成是一个无穷大的丘陵地带,各山峰或山谷的高度即是问题的极值。求解TSP,则是在此不能穷尽的丘陵地带中攀登以达到山顶或谷底的过程。

2.研究历史 旅行商问题字面上的理解是:有一个推销员,要到n个城市推销商品,他要找出一个包含所有n个城市的具有最短路程的环路。 TSP的历史很久,最早的描述是1759年欧拉研究的骑士周游问题,即对于国际象棋棋盘中的64个方格,走访64个方格一次且仅一次,并且最终返回到起始点。 TSP由美国RAND公司于1948年引入,该公司的声誉以及线性规划这一新方法的出现使得TSP成为一个知名且流行的问题。 3.问题解法 旅行推销员的问题,我们称之为巡行(Tour),此种问题属于NP-Complete 的问题,从距离矩阵中产生一个近似最佳解的途径,有以下几种解法: 1、途程建构法(Tour Construction Procedures) 2、途程改善法(Tour Improvement Procedure) 先给定一个可行途程,然后进行改善,一直到不能改善为止。有以下几种解法:如果成本降低(距离减少),则取代之,直到无法改善为止,K通常为2或3。 3、合成启发法(Composite Procedure) 有以下几种解法:起始解求解+2-Opt:起始解求解+3-Opt: 4.解法思路 旅行推销员的问题,我们称之为巡行(Tour),此种问题属于NP完全问题(NP-Complete),所以旅行商问题大多集中在启发式解法。Bodin(1983)等人将旅行推销员问题的启发式解法分成三种: 途程建构法 从距离矩阵中产生一个近似最佳解的途径,有以下几种解法:如 1、近邻点法(Nearest Neighbor Procedure):一开始以寻找离场站最近的需求点为起始路线的第一个顾客,此后寻找离最后加入路线的顾客最近的需求点直到最后。(像贪婪算法) 2、节省法(Clark and Wright Saving):以服务每一个节点为起始解,根据三角不等式两边之和大于第三边之性质,其起始状况为每服务一个顾客后便回场站,而后计算路线间合并节省量,将节省量以降序排序而依次合并路线,直到最后。(像Dijstra算法) 3、插入法(Insertion procedures):如插入法、最省插入法、随意插入法、最远插入法、最大角度插入法等。 途程改善法 先给定一个可行途程,然后进行改善,一直到不能改善为止。有以下几种解法:

旅行商问题概述_郭靖扬

旅行商问题(TravelingSalesmanProblem,简称TSP)是一个著名的组合优化问题:给定n个城市,有一个旅行商从某一城市出发,访问每个城市各一次后再回到原出发城市,要求找出的巡回路径最短。如果用图论来描述,那就是已知带权图G= (C,L),寻出总权值最小的Hamilton圈。其中C={c1,c2,…,cn}表示n个城市的集合,L={lij|ci,cj∈C}是集合C中元素(城市)两两连接的集合,每一条边lij,都存在与之对应的权值dij,实际应用中dij可以表示距离、费用、时间、油量等。 TSP的描述虽然简单, 解决起来却很困难。最简单思路是用穷举法把所有可能的巡回路径全部列出来,最短的一个就是最优解,但这样只能处理很小规模的问题。旅行商问题属于 NP-complete问题, 是NP(non-deterministicpoly-nominal)问题中最难的一类,不能在多项式时间内求解。如果有n座城市,那么巡游路径共有(n-1)!/2条,计算的时间和(n-1)!成正比。当 城市数n=20,巡回路径有1.2×1018种,n=100, 巡回路径就有多达4.6×10155种,而据估计宇宙中基本粒子数“仅仅只有”1087个。 尽管如此,随着算法研究的逐步深入和计算机技术飞速提高,对TSP问题的研究不断取得进展。70年来,被征服的TSP规模从几十个城市增加到上万个城市。目前的最高记录是在2004年5月,找到的巡游瑞典24978个城镇的最优路径 (sw24978), 花费了84.8个CPU年。图1展示了TSP的研究进展,最近的二三十年时间里,被攻克的TSP规模高速增长,差不多是每十年增加一个数量级。照这样发展下去的话,再过20年就能解决上百万个城市的TSP,有专家甚至已经为此准备好了数据:全球190,4711个城市的坐标。当然,能不能达到这 个目标,有赖于未来计算技术的发展。 图1TSP的发展 字母后面的数字表示城市数,“sw24978”就是瑞典的 24978个城镇。 一、应用 旅行商问题具有重要的实际意义和工程背景。它一开始 是为交通运输而提出的,比如飞机航线安排、送邮件、快递服务、设计校车行进路线等等。实际上其应用范围扩展到了许多其他领域,下面举几个实例。 印制电路板转孔是TSP应用的经典例子,在一块电路板上打成百上千个孔,转头在这些孔之间移动,相当于对所有的孔进行一次巡游。把这个问题转化为TSP,孔相当于城市,孔到孔之间的移动时间就是距离。 为了避免大气干扰,使光学系统达到其衍射极限分辨率,欧美发达国家提出发展空间光干涉仪和综合孔径望远镜的计划。美国航空航天局有一个卫星群组成空间天文台(Space-basedObservatories)的计划, 用来探测宇宙起源和外星智慧生命。欧洲空间局也有类似的Darwin计划。对天体成像的时候,需要对两颗卫星的位置进行调整,如何控制卫星,使消耗的燃料最少,可以用TSP来求解。这里把天体看作城市,距离就是卫星移动消耗的燃料。 美国国家卫生协会在人类基因排序工作中用TSP方法绘制放射性杂交图。把DNA片断作为城市,它们之间的相似程度作为城市间的距离。法国科学家已经用这种办法作出了老鼠的放射性杂交图。 此外,旅行商问题还有电缆和光缆布线、晶体结构分析、数据串聚类等多种用途。更重要的是,它提供了一个研究组合优化问题的理想平台。很多组合优化问题,比如背包问题、分配问题、车间调度问题,和TSP同属NP-complete类,它们都是同等难度的,如果其中一个能用多项式确定性算法解决,那么其他所有的NP-complete类问题也能用多项式确定性算法解决。很多方法本来是从TSP发展起来的,后来推广到其他NP-complete类问题上去。 二、TSP求解方法 求解旅行商问题的方法可以分为两大类,一类是精确算法,目的是要找到理论最优解;另一类是近似算法,不强求最优解,只要找到“足够好”的满意解就可以了。 (一)精确算法 如前面所述,穷举法和全局搜索算法属于精确算法,但 旅行商问题概述 郭靖扬 (电子科技大学光电信息学院, 四川成都610054) 【摘要】旅行商问题是组合优化的经典问题,应用广泛,而且长期以来被作为NP-complete问题的理想研究平台。文章介绍 了旅行商问题的基础知识、应用,以及常用的求解方法。 【关键词】旅行商问题;组合优化;NP-complete;k-opt;智能算法【中图分类号】TP182【文献标识码】A【文章编号】1008-1151(2006)08-0229-02大众科技 DAZHONGKEJI2006年第8期(总第94期) No.8,2006 (CumulativelyNo.94) 【收稿日期】2006-03-18【作者简介】郭靖扬(1980-),四川宜宾人,电子科技大学光电信息学院硕士研究生。 229--

蚁群算法TSP问题matlab源代码

function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta ,Rho,Q) %%===================================================== ==================== %% ACATSP.m %% Ant Colony Algorithm for Traveling Salesman Problem %% ChengAihua,PLA Information Engineering University,ZhengZhou,China %% Email:aihuacheng@https://www.360docs.net/doc/641797704.html, %% All rights reserved %%------------------------------------------------------------------------- %% 主要符号说明 %% C n个城市的坐标,n×4的矩阵 %% NC_max 最大迭代次数 %% m 蚂蚁个数 %% Alpha 表征信息素重要程度的参数 %% Beta 表征启发式因子重要程度的参数 %% Rho 信息素蒸发系数 %% Q 信息素增加强度系数 %% R_best 各代最佳路线 %% L_best 各代最佳路线的长度 %%===================================================== ==================== %%第一步:变量初始化 n=size(C,1);%n表示问题的规模(城市个数) D=zeros(n,n);%D表示完全图的赋权邻接矩阵 for i=1:n for j=1:n if i~=j D(i,j)=max( ((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5,min(abs(C(i,3)-C(j,3)),144- abs(C(i,3)-C(j,3))) );%计算城市间距离 else D(i,j)=eps; end D(j,i)=D(i,j); end end Eta=1./D;%Eta为启发因子,这里设为距离的倒数 Tau=ones(n,n);%Tau为信息素矩阵 Tabu=zeros(m,n);%存储并记录路径的生成 NC=1;%迭代计数器 R_best=zeros(NC_max,n);%各代最佳路线

旅行商问题数学建模

黄石理工学院 数学建模大型作业2011—2012 学年第1学期

目录 一.摘要 二.旅行问题 1.问题描述 2.符号说明 3.模型设计 4.建模求解 5.模型分析 6. 三.建模过程及心得体会 四.参考文件

一.摘要 本文是一个围绕旅行商问题和背包问题这两个经典问题的论文。问题一,是一个依赖与每个城市去一次且仅去一次的路线确定问题,问题二类似于问题一。问题三是一个依赖于可背重量限制的背包问题。 关键词:HAMILTON回路 LINGO 最优旅行路线 0-1模型 二.旅行问题 问题描述 某人要在假期内从城市A出发,乘火车或飞机到城市B,C,D,E,F 旅游购物。他计划走遍这些城市各一次且仅一次,最后返回城市A。已知城市间的路费数据见附表1,请你设计一条旅行路线使得他的总路费最少。如果临行他因故只能去4个城市,该怎样修订旅行路线? 在城市间旅游时他计划购买照相机,衣服,书籍,摄像机,渔具,白酒,食品,而受航空行李重量的限制以及个人体力所限,所买物品的总重量不能超过15kg,各种物品的价格见附表2.请你为他决策买哪些物品,使所买物品价值最大。

模型设计 首先给出一个定义:设v1,v2,......,vn 是图G 中的n 个顶点,若有一条从某一顶点v1出发,经过各节点一次且仅一次,最后返回出发点v1的回路,则称此回路为HAMILTON 回路。 问题1. 分析:这个优化问题的目标是使旅行的总费用最少,要做的决策是如何设定旅行路线,决策受的约束条件:每个城市都必须去,但仅能去一次。按题目所给,将决定变量,目标函数和约束条件用数学符号及式子表示出来,就可得一下模型。 模型建立: 对于6个城市的旅行问题设A,B,C,D,E,F 六个城市分别对应v1,v2,v3,v4,v5,v6。假设ij d 表示从城市i 到城市j 的费用。定义0-1整数型变量ij x =1表示从城市i 旅行到城市j ,否则 ij x =0。则旅行问题的数学模型可表示为一个整数规划问题。 min z=66 1 ij ij i j d x =∑∑ (i ≠j) s.t. 6 1ij i x =∑=1 (i ≠j ;j=1,2, (6) 6 1 ij j x =∑=1 (i ≠j ;i=1,2, (6) 1i j ij u u nx n -+≤- (i ≠j;i=2,3,……,6;j=2,3,……6) 其中辅助变量i u (i=2,3,……,6)可以是连续变化的,虽然这些变量在最优解中取普通的整数值(从而在约束条件中,可以限定这些变量为整数)。事实上,在最优解中,i u =访问城市的顺序数。 模型求解 运用LINGO ,输入程序: MODEL : !Traveling Sales Problem for the cities of six city; SETS :

遗传算法解决TSP问题的Matlab程序

TSP问题遗传算法通用Matlab程序 程序一:主程序 %TSP问题(又名:旅行商问题,货郎担问题)遗传算法通用matlab程序 %D是距离矩阵,n为种群个数 %参数a是中国31个城市的坐标 %C为停止代数,遗传到第 C代时程序停止,C的具体取值视问题的规模和耗费的时间而定%m为适应值归一化淘汰加速指数,最好取为1,2,3,4,不宜太大 %alpha为淘汰保护指数,可取为0~1之间任意小数,取1时关闭保护功能,建议取 0.8~1.0之间的值 %R为最短路径,Rlength为路径长度 function [R,Rlength]=geneticTSP(D,a,n,C,m,alpha) [N,NN]=size(D); farm=zeros(n,N);%用于存储种群 for i=1:n farm(i,:)=randperm(N);%随机生成初始种群 end R=farm(1,:); subplot(1,3,1) scatter(a(:,1),a(:,2),'x') pause(1) subplot(1,3,2) plotaiwa(a,R) pause(1) farm(1,:)=R; len=zeros(n,1);%存储路径长度 fitness=zeros(n,1);%存储归一化适应值 counter=0; while counter for i=1:n len(i,1)=myLength(D,farm(i,:));%计算路径长度 end maxlen=max(len); minlen=min(len); fitness=fit(len,m,maxlen,minlen);%计算归一化适应值 rr=find(len==minlen); R=farm(rr(1,1),:);%更新最短路径 FARM=farm;%优胜劣汰,nn记录了复制的个数 nn=0; for i=1:n if fitness(i,1)>=alpha*rand nn=nn+1; FARM(nn,:)=farm(i,:); end

[精品文档]旅行商问题

算法设计与分析实验报告实验三旅行商问题 院系: 班级:计算机科学与技术 学号: 姓名: 任课教师: 成绩: 湘潭大学 2016年5月

实验三旅行商问题 一. 实验内容 分别编程实现回溯法和分支限界法求TSP问题的最优解,分析比较两种算法的时间复杂度并验证分析结果。 二.实验目的 1、掌握回溯法和分支限界法解决问题的一般步骤,学会使用回溯法和分支限界法解决实际问题; 2、理解回溯法和分支限界法的异同及各自的适用范围。 三. 算法描述 旅行商问题的回溯法算法可描述如下: Template Class Traveling{ friend Type TSP(int ** , int[],int ,Type); Private; Void Backtrack(int i); Int n, //图G的顶点数 *x; //当前解 *bestx; //当前最优解 Type **a, //图G的邻接矩阵 cc, //当前费用 bestc,//当前最优解 NoEdge; //无边标记 }; Template Void Traveling : : backtrack(int i) {if(i ==n){

if(a[x[n-1]][x[n]]!=NoEdge&&a[x[n]][1]!=NoEdge&& (cc+a[x[n-1]][x[n]]+a[x[n]][1] +a[x[n]][1] Type TSP(Type**a, int v[], int n, Type NoEdge) {Traveling Y; //初始化Y Y.x = new int [n+1]; //置x为单位排列 For(int i = 1;i <= n;i++) Y.x[i] = i; Y.a = a; Y.n = n;

仿真的多目标优化(蚁群算法在旅行商问题中的应用)

(多目标优化模型)

蚁群算法在旅行商问题中的应用 摘要 本文将对蚁群算法的仿真学原理进行概要介绍和对蚁群算法产生、发展、优化进行介绍以及阐述蚁群算法的几点重要基本规则,并对蚁群算法的优缺点进行讨论。蚁群算法是受自然界中蚁群搜索食物行为启发而提出的一种智能多目标优化算法,通过介绍蚁群觅食过程中基于信息素的最短路径的搜索策略,给出基于MATLAB的蚁群算法在旅行商问题中的应用。 关键字:蚁群算法;旅行商问题;仿真;多目标优化

一、问题重述 旅行商问题(TSP)是一个经典的组合优化问题。TSP可以描述为:一个商品推销员要去若干个城市推销商品,该推销员从一个城市出发,需要经过所有城市后,回到出发地。应如何选择行进路线,以使总的行程最短。从图论的角度来看,该问题实质是在一个带权完全无向图中,找一个权值最小的Hamilton 回路。由于该问题的可行解是所有顶点的全排列,随着顶点数的增加,会产生组合爆炸,它是一个N P完全问题。随着问题规模的增大,人们对复杂事物和复杂系统建立数学模型并进行求解的能力是有限的,目标函数和约束条件往往不能以明确的函数关系表达,或因函数带有随机参、变量,导致基于数学模型的优化方法在应用于实际生产时,有其局限性甚至不适用。基于仿真的优化(Simulation Based Optimization,SBO)方法正是在这样的背景下发展起来的。本文将使用一种近似算法或启发式算法—蚁族算法。 1、蚁群算法的提出 蚁群算法(Ant Colony Optimization, ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型算法。它由Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。 2、蚁群算法的仿生学原理 蚁群算法最初是通过对蚂蚁群落的观察,受蚁群行为特征启发而得出的。蚂蚁是一种群居昆虫,在觅食、清理巢穴征启发而得出的。蚂蚁是一种群居昆虫,在觅食、等活动中,彼此依赖、相互协作共同完成特定的任务。等活动中,彼此依赖、相互协作共同完成特定的任务。就个体来讲,单个蚂蚁的智力和体力是极其有限的,体来讲,单个蚂蚁的智力和体力是极其有限的,服务于整个群落的生存与发展;就群体来讲,蚁群在行为上的分工协作、群落的生存与发展;就群体来讲,蚁群在行为上的分工协作、在完成任务过程中所体现的自组织特征等反应出蚁群具有较高的智能和自我管理能力,具有很高层次组织性,高的智能和自我管理能力,具有很高层次组织性,这使得蚁群能够完成一些复杂的任务。群能够完成一些复杂的任务。 蚁群的行为是整体协作,相互分工,蚁群的行为是整体协作,相互分工,以一个整体去解决一些对单个蚂蚁看上去是不可能完成的任务。些对单个蚂蚁看上去是不可能完成的任务。就目前来讲,蚁群至少有三个方面的行为特征对算法研究有很好的启发意义,分别是觅食行为、任务分配、死蚁堆积阁。蚁群的觅食行为指蚂蚁从巢穴出发寻找食物并且将食物搬回巢穴的行为.当蚂蚁出外寻找食物时,会在自己走过的路径上释放一种称为信息家的物质,径上释放一种称为信息家的物质,后续的蚂蚁一般更愿意走那些信息素强度更高的路径。这样,那些信息素强度更高的路径。这样,较短路径上单位时间内通过的蚂蚁数目较多,留下的信息素也较多(浓度更高) 通过的蚂蚁数目较多,留下的信息素也较多(浓度更高),对蚂蚁产生了更强的吸引,使得更多的蚂蚁走较短的路径。妈蚁产生了更强的吸引,使得更多的蚂蚁走较短的路径。这就形成了一个正反馈机制,就形成了一个正反馈机制,使得最终所有的蚂蚁都走蚁穴到食物源的最短路径. 食物源的最短路径. 3、蚁群算法实现的重要规则 (1)范围 蚂蚁观察到的范围是一个方格世界,蚂蚁有一个参数为速度半径(一般是3),那么它能观察到的范围就是3*3个方格世界,并且能移动的距离也在这个范

旅行商问题

旅行商问题: 问题描述:已知一个由n个城市(顶点)组成的有向网G , n个城市为v1, v2,…, v n , G的邻接矩阵为D=(d ij)nxn , d ij为边< v i, v j>上的权(表示城市v i到v j的耗费)。一个旅行商从v1开始,巡回访问每个城市一次且仅一次,最后返回v1, 这个旅行商该如何选择旅行线路,使得整个行程耗费最小? ● 分析: 可利用求一般问题的所有解的回溯算法得到解最优化问题的回溯算法。 (1) 该问题是求最短的哈密顿回路。 (2) 用min表示当前最优值,s[1..n]表示当前最优解。 (3) 除了解的约束条件,用如下剪枝条件进一步剪枝: 当前路径长度>=min (4) 设置一个标记数组tag[1..n]: tag[i]=1, 顶点i在当前路径上 tag[i]=0, 顶点i不在当前路径上 当一个顶点退出当前路径时,该顶点的标记应复原为0。 ● 回溯算法: 算法 TRAVELING_SALESMAN 输入:正整数n和含n个顶点的有向网G的邻接矩阵D。 输出:关于G的旅行商问题的一条最短旅行线路和最小耗费, 若问题无解,则输出no solution。 min=∞ x[1]=1 //用x[1..n]表示当前搜索路径, 从顶点1开始。 len=0 //len表示当前路径的长度 tag[1]=1; tag[2..n]=0 //设顶点标记初值。 salesman( 2 ) if min<∞ then output (min, s[1..n]) //输出最优值和最优解。 else output (“no solution”)//输出无解 end if end TRAVELING_SALESMAN 过程 salesman(k) //在已得到当前路径x[1..k-1]的情况下,求G的长度

多旅行商问题的matlab程序

多旅行商问题的 m a t l a b程序 Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】

%多旅行商问题的m a t l a b程序 function varargout = mtspf_ga(xy,dmat,salesmen,min_tour,pop_size,num_iter,show_prog,show_r es) % MTSPF_GA Fixed Multiple Traveling Salesmen Problem (M-TSP) Genetic Algorithm (GA) % Finds a (near) optimal solution to a variation of the M-TSP by setting % up a GA to search for the shortest route (least distance needed for % each salesman to travel from the start location to individual cities % and back to the original starting place) % % Summary: % 1. Each salesman starts at the first point, and ends at the first % point, but travels to a unique set of cities in between % 2. Except for the first, each city is visited by exactly one salesman % % Note: The Fixed Start/End location is taken to be the first XY point % % Input: % XY (float) is an Nx2 matrix of city locations, where N is the number of cities % DMAT (float) is an NxN matrix of city-to-city distances or costs % SALESMEN (scalar integer) is the number of salesmen to visit the cities % MIN_TOUR (scalar integer) is the minimum tour length for any of the % salesmen, NOT including the start/end point % POP_SIZE (scalar integer) is the size of the population (should be divisible by 8) % NUM_ITER (scalar integer) is the number of desired iterations for the algorithm to run % SHOW_PROG (scalar logical) shows the GA progress if true % SHOW_RES (scalar logical) shows the GA results if true % % Output:

求解旅行商问题的几种解法

2010年第5期(总第77期) 边疆经济与文化 THE BORDER ECONOMY AND CULT URE No 1512010General 1No 177 10  B I A N J I A N G J I N G J I Y U W EN HUA 【旅游经济】 求解旅行商问题的几种解法 高春涛 (哈尔滨商业大学基础科学学院,哈尔滨150028) 摘 要:旅行商问题(TSP )是一个典型的NP 完全问题,现在还没有找到有效的解法。目前比较热门的求解TSP 问题的方法主要有四种:神经网络算法;模拟退火算法;遗传算法;蚁群算法。 关键词:旅行商问题;组合优化;解法 中图分类号:F 592 文献标志码:A 文章编号:167225409(2010)0520010202 收稿日期:2010201222作者简介:高春涛(1973 ),女,黑龙江拜泉人,讲师,硕士,主要从事混沌神经网络研究。 一、引言 旅行商问题(Traveling Sales man Pr oble m ),是指给定n 个城市,任何两城市之间皆有路连通,其距离为已知,某旅行商从其中某城市出发,要经过每城市一次,且只能一次,最后又必须返回出发城市,要求找出最短的巡回路径。由于在很多实际问题中,如印刷电路板的铅孔路线方案、连锁店的货物配送路线等问题经过简化处理,均可建模为旅行商问题,因而对旅行商问题求解方法的研究具有重要的应用价值。旅行商问题是运筹学中有代表性的组合优化问题,也是典型的NP 完全问题。虽然它陈述起来很简单,但求解却很困难,对于具有n 个城市的TSP 问题,其可能的路径数目为(n -1)!/2,至今尚未找到有效的求解方法,在理论上枚举法可以解决这一问题,但是当n 较大时,解题的时间消耗会使枚举法显得没有任何实际价值。因此寻求一种求解时间短,能满足实际问题精度要求的解,成为解决该问题的主要途径。 二、TSP 求解方法 求解旅行商问题的方法可以分为两大类,一类是精确算法,目的是要找到理论最优解;另一类是近似算法,其算法简单,计算量小,大多数情况下求得的满意解能满足要求。 1.Hopfield 神经网络算法 1982年,Hopfield 开创性地在物理学、神经生物学和计算机科学等领域架起了桥梁,提出了Hopfield 反馈神经网络模型(HNN )。Hopfield 网络是典型的全连接网络,通过在网络中引入能量函数以构造动力学系统,并使网络的平衡态与能量函数 的极小解相对应,从而将求解能量函数极小解的过程转化为网络向平衡态的演化过程。尤其是通过对TSP 问题的成功求解,开辟了神经网络模型在计算机科学应用中的新天地,动态反馈网络从而受到广泛的研究和关注,被广泛应用于优化问题中,且已 设计出了专用的硬件电路。 [1] Hopfield 网络是一种非线性动力学模型,通过引入类似Lyapunov 函数的能量函数概念,把神经网络的拓扑结构(用连接矩阵表示)与所求问题(用目标函数描述)对应起来,转换成神经网络动力学系统的演化问题。因此,在用Hopfield 网络求解优化问题之前,必须将问题映射为相应的神经网络。对TSP 问题的求解,首先将问题的合法解映射为一个置换矩阵,并给出相应的能量函数,然后将满足置换矩阵要求的能量函数的最小值与问题的最优解相对应。 2.模拟退火算法 模拟退火算法最初的思想由Metr opolis 在1953 年提出,[2] Kirkpatrick 在1983年成功地将其应用在组合最优化问题中。模拟退火算法的出发点是基于物理中固体物质的退火过程与一般组合优化问题之间的相似性。模拟退火算法在某一初温下,伴随温度参数的不断下降,结合概率突跳特征在解空间中随机寻找目标函数的全局最优解,即在局部优解能 概率性地跳出并最终趋于全局最优。[1] 用固体退火模拟组合优化问题,将内能E 模拟为目标函数f,温度T 演化成控制参数t,即得到解组合优化问题的模拟退火算法:有初始解i 和控制参数初值t 开始,对当前解重复“产生新解→计算目标函数差→接受或舍弃”的迭代,并逐步衰减t 值,算法终止时的当前解即为所得近似最优解。

用遗传算法解决旅行商问题

用遗传算法解决旅行商问题 姓名:王晓梅 学号:1301281 班级:系统工程6班

一、问题背景 有一个销售员,要到n 个城市推销商品,他要找出一个包含所有n 个城市的具有最短路程的环路。 现在假设有10个城市,他们之间的距离如下。 { 0, 107, 241, 190, 124, 80, 316, 76, 152, 157}, { 107, 0, 148, 137, 88, 127, 336, 183, 134, 95}, { 241, 148, 0, 374, 171, 259, 509, 317, 217, 232}, { 190, 137, 374, 0, 202, 234, 222, 192, 248, 42}, { 124, 88, 171, 202, 0, 61, 392, 202, 46, 160}, { 80, 127, 259, 234, 61, 0, 386, 141, 72, 167}, { 316, 336, 509, 222, 392, 386, 0, 233, 438, 254}, { 76, 183, 317, 192, 202, 141, 233, 0, 213, 188}, { 152, 134, 217, 248, 46, 72, 438, 213, 0, 206}, { 157, 95, 232, 42, 160, 167, 254, 188, 206, 0} 将这10个城市分别编码为0,1,2,3,4,5,6,7,8,9。要求走完这10个城市,目标是使走的距离最短。 二、建立模型 ),...,1,(1) ,...,1,(1. .)(min 11 11n j j i n i j i t s j i n j ij n i ij ij n i n j ij x x d x =≠==≠=≠∑∑∑∑==== 三、设计算法 1、种群初始化 (1)一条染色体的初始化 10个城市分别对应0~9这十个数,每个染色体代表一个解决方法,即0~9这十个数的一种排序方式,可随机产生一个数,用取余的方法得到一个0~9的数,依次得到与前面不重复的十个数,构成一个染色体。 (2)种群的初始化 这里假设种群有100个染色体,也就是循环100次染色体的初始化可得到一个种群。

计算智能课程设计_粒子群优化算法求解旅行商问题_Matlab实现

摘要:TSP 是一个典型的NPC 问题。本文首先介绍旅行商问题和粒子群优化算法的基本概念。然后构造一种基于交换子和交换序[1]概念的粒子群优化算法,通过控制学习因子1c 和2c 、最大速度max V ,尝试求解旅行商问题。本文以中国31个省会城市为例,通过MATLAB 编程实施对旅行商问题的求解,得到了一定优化程度的路径,是粒子群优化算法在TSP 问题中运用的一次大胆尝试。 关键字:TSP 问题;粒子群优化算法;MATLAB ;中国31个城市TSP 。

粒子群优化算法求解旅行商问题 1.引言 1.旅行商问题的概述 旅行商问题,即TSP问题(Traveling Salesman Problem)又译为旅行推销员问题货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。 TSP问题是一个组合优化问题,其描述非常简单,但最优化求解非常困难,若用穷举法搜索,对N个城市需要考虑N!种情况并两两对比,找出最优,其算法复杂性呈指数增长,即所谓“指数爆炸”。所以,寻求和研究TSP问题的有效启发式算法,是问题的关键。 2.粒子群优化算法的概述 粒子群优化算法(Particle Swarm optimization,PSO)又翻译为粒子群算法、微粒群算法、或微粒群优化算法。是通过模拟鸟群觅食行为而发展起来的一种基于群体协作的随机搜索算法。通常认为它是群集智能(Swarm intelligence, SI)的一种。它可以被纳入多主体优化系统 (Multiagent Optimization System, MAOS). 粒子群优化算法是由Eberhart博士和Kennedy 博士发明。 PSO模拟鸟群的捕食行为。一群鸟在随机搜索食物,在这个区域里只有一块食物。所有的鸟都不知道食物在那里。但是他们知道当前的位置离食物还有多远。那么找到食物的最优策略是什么呢。最简单有效的就是搜寻目前离食物最近的鸟的周围区域。 PSO从这种模型中得到启示并用于解决优化问题。PSO中,每个优化问题的解都是搜索空间中的一只鸟。我们称之为“粒子”。所有的粒子都有一个由被优化的函数决定的适应值(fitnessvalue),每个粒子还有一个速度决定他们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。 PSO初始化为一群随机粒子(随机解),然后通过迭代找到最优解,在每一次叠代中,粒子通过跟踪两个“极值”来更新自己。第一个就是粒子本身所找到的最优解,这个解叫做个体极值pBest,另一个极值是整个种群目前找到的最优解,这个极值是全局极值gBest。另外也可以不用整个种群而只是用其中一部分最优粒子的邻居,那么在所有邻居中的极值就是局部极值。 3.粒子群优化算法求解旅行商问题 旅行商问题是一个典型的、易于描述却难于处理的组合优化问题,并且是一个NP完全难题,其可能的路径数目与城市数目n是成指数型增长的,对n个城市而言,可能的路径总(n-1)!。随着n的增加,路径数将按数率急剧增长,即所谓的“指数爆炸”,所以一般很难精确地求出其最优解,因而寻找出其有效的近似求解算法就具有重要的理论意义。而粒子群优化算法是解决复杂问题的有效方法,自然也能应用于解决旅行商问题。 PSO模拟鸟群的捕食行为。一群鸟在随机搜索食物,在这个区域里只有一块食物。所有

基于蚁群算法的旅行商问题解决方案

基于蚁群算法的旅行商问题解决方案 一引言 旅行商问题(TSP, Traveling Salesman Problem)是在1859年由威廉·汉密尔顿爵士首次提出的,它是物流领域中的典型问题,这个问题的求解具有十分重要的理论和现实意义。所谓TSP问题是指:有N个城市,要求旅行商到达每个城市各一次,且仅一次,并回到起点,且要求旅行路线最短。这是一个典型的优化问题,对一个具有中等顶点规模的图来说,精确求解也是很复杂的,计算量随着城市个数的增加而呈指数级增长,即属于所谓的NP问题。TSP在工程领域有着广泛的应用,并常作为比较算法性能的标志。如网络通讯、货物运输、电气布线、管道铺设、加工调度、专家系统、柔性制造系统等方面,都是TSP广泛应用的领域。求解算法包括贪婪法(GM)、极小代数法(MA)、模拟退火法(SA)和遗传算法(GA)等。而应用蚁群算法求解旅行商问题是近年来研究的新方向,由于其并行性与分布性,特别适用于大规模启发式搜索,实验结果证明了其可行性和有效性。 二蚁群系统基本原理 在蚂蚁群找到食物时,它们总能找到一条从食物到巢穴之间的最优路径。这是因为蚂蚁在寻找路径时会在路径上释放出一种特殊的信息素(phero-mone)。当它们碰到一个还没有走过的路口时,就随机地挑选一条路径前行。与此同时释放出与路径长度有关的信息素。路径越长,释放的激素浓度越低。当后来的蚂蚁再次碰到这个路口的时候,选择激素浓度较高路径概率就会相对较大。这样形成了一个正反馈。最优路径上的激素浓度越来越大,而其它的路径上激素浓度却会随着时间的流逝而消减。最终整个蚁群会找出最优路径。在整个寻径过程中,虽然单个蚂蚁的选择能力有限,但是通过激素的作用,整个蚁群之间交换着路径信息,最终找出最优路径。 三基于蚁群算法的旅行商问题求解方案 TSP问题描述如下: 设有n个城市C=(1,2,...,n),任意两个城市i,j之间的距离为d ij ,求一条经过每个城市的路径π=(π(1),π(2),...,π(n)),使得距离最小。

TSP问题的概述

TSP问题的概述 旅行商问题,即TSP问题(Traveling Salesman Problem)是数学领域中著名问题之一。假设有一个旅行商人要拜访N个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。 TSP问题的由来 TSP的历史很久,最早的描述是1759年欧拉研究的骑士周游问题,即对于国际象棋棋盘中的64个方格,走访64个方格一次且仅一次,并且最终返回到起始点。 TSP由美国RAND公司于1948年引入,该公司的声誉以及线形规划这一新方法的出现使得TSP成为一个知名且流行的问题。 TSP在中国的研究 同样的问题,在中国还有另一个描述方法:一个邮递员从邮局出发,到所辖街道投邮件,最后返回邮局,如果他必须走遍所辖的每条街道至少一次,那么他应该如何选择投递路线,使所走的路程最短?这个描述之所以称为中国邮递员问题(Chinese Postman Problem CPP)因为是我国学者管梅古教授于1962年提出的这个问题并且给出了一个解法。 人工智能上的旅行商问题,以下给出的是算法,只是理解算法之用。 for detail contact me QQ: 413309082 /****************算法总框架*****************************/ int i; gs.search_init(adaptee.list_place.getSelectedIndex(),adaptee.list_fun.getSelectedI ndex()); do{ i=gs.search_step(); }while(i==0); /***************searchinit**************************/ public void search_init(int startindex,int strategy) { this.strategy = strategy; AStar.graph= G; G.setSize(AStar.len); start.index = startindex; Vertex s =new Vertex(); s.index = start.index; s.parent = -1; n =null; s.value =f(s.index); //s的估价函数值 G.add(s); start.parentpos = -1; start.value = s.value;

相关文档
最新文档