matlab解决多旅游商问题,遗传算法求解多旅行商问题

Multiple Traveling Salesmen Problem - Genetic Algorithm

MTSP_GA Multiple Traveling Salesman Problem (M-TSP) Genetic Algorithm (GA)

Finds a (near) optimal solution to the M-TSP by setting up a GA to search

for the shortest route (least distance needed for the salesmen to travel

to each city exactly once and return to their starting locations)

Summary:

1. Each salesman travels to a unique set of cities and completes the

route by returning to the city he started from

2. Each city is visited by exactly one salesman

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

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

MINTOUR (scalar integer) is the minimum tour length for any of the salesmen

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

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

SHOWPROG (scalar logical) shows the GA progress if true

SHOWRESULT (scalar logical) shows the GA results if true

Output:

OPTRTE (integer array) is the best route found by the algorithm

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

into the route used to obtain the individual salesman routes)

MINDIST (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 1 4 2 8 10 3 7], brks = [3 7]

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

which designates the routes for the 3 salesmen as follows:

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

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

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

Example:

n = 35;

xy = 10*rand(n,2);

nSalesmen = 5;

minTour = 3;

popSize = 80;

numIter = 5e3;

a = meshgrid(1:n);

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

[optRoute,optBreak,minDist] = mtsp_ga(xy,dmat,nSalesmen,minTour,popSize,numIter,1,1);

Example:

n = 50;

phi = (sqrt(5)-1)/2;

theta = 2*pi*phi*(0:n-1);

rho = (1:n).^phi;

[x,y] = pol2cart(theta(:),rho(:));

xy = 10*([x y]-min([x;y]))/(max([x;y])-min([x;y]));

nSalesmen = 5;

minTour = 3;

popSize = 80;

numIter = 1e4;

a = meshgrid(1:n);

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

[optRoute,optBreak,minDist] = mtsp_ga(xy,dmat,nSalesmen,minTour,popSize,numIter,1,1);

Example:

n = 35;

xyz = 10*rand(n,3);

nSalesmen = 5;

minTour = 3;

popSize = 80;

numIter = 5e3;

a = meshgrid(1:n);

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

[optRoute,optBreak,minDist] = mtsp_ga(xyz,dmat,nSalesmen,minTour,popSize,numIter,1,1);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值