旅游路线matlab
㈠ 基于蚁群算法的多旅游团路线设计的matlab代码
n个城市,编号为1---n
for循环的次数是蚂蚁重复城市的次数,比如5个蚂蚁放到4个城市,回需要重复两遍才能放完蚂蚁,答每次循环产生n个1---n的随机数,相当于随机n个城市,产生城市序列
循环结束
Tabu一句表示将m个蚂蚁随机,每个蚂蚁放到前面产生的城市序列中,每个蚂蚁一个城市,需要m个,所以提取前面1:m个序列
'表示转置,没有多大用处,可能参与后面的计算方便。
我感觉如果m,n很大的话,你这样做会产生很大的浪费,计算很多的随机数,这样的话更好,一句就得:(如果变量Randpos后面没有用到的话,如果用到了,还要用你的程序)
Tabu=ceil(n*rand(1,m))'
㈡ 求数学建模外援 要求比较精通matlab和最优化问题的算法,题目是旅游线路的优化设计。我们已经有了基本的思
祝建模顺利~~
附:06年的夏天我也参加过建模,结果全军覆没,借此机会,再体验下,不必言谢。还有问题请Q我(452721317)
㈢ 如果已经知道路线,那我怎么在matlab中,显示一个按照这个路线行走的点
路线的表达式是否知道
㈣ 用MATLAB求旅行商问题程序(10城市)
563
㈤ 如何使用Matlab画出最短路线图急急急
寻找模拟退火算法吧,matlab有现成的工具箱的.
以下是我在搜搜上搜到的模拟退火的源代码,你可以研究一下
=========================================
function [xo,fo] = Opt_Simu(f,x0,l,u,kmax,q,TolFun)
% 模拟退火算法求函数 f(x)的最小值点, 且 l <= x <= u
% f为待求函数,x0为初值点,l,u分别为搜索区间的上下限,kmax为最大迭代次数
% q为退火因子,TolFun为函数容许误差
%%%%算法第一步根据输入变量数,将某些量设为缺省值
if nargin < 7
TolFun = 1e-8;
end
if nargin < 6
q = 1;
end
if nargin < 5
kmax = 100;
end
%%%%算法第二步,求解一些基本变量
N = length(x0); %自变量维数
x = x0;
fx = feval(f,x); %函数在初始点x0处的函数值
xo = x;
fo = fx;
%%%%%算法第三步,进行迭代计算,找出近似全局最小点
for k =0:kmax
Ti = (k/kmax)^q;
mu = 10^(Ti*100); % 计算mu
dx = Mu_Inv(2*rand(size(x))-1,mu).*(u - l);%步长dx
x1 = x + dx; %下一个估计点
x1 = (x1 < l).*l +(l <= x1).*(x1 <= u).*x1 +(u < x1).*u; %将x1限定在区间[l,u]上
fx1 = feval(f,x1);
df = fx1- fx;
if df < 0||rand < exp(-Ti*df/(abs(fx) + eps)/TolFun) %如果fx1<fx或者概率大于随机数z
x = x1;
fx = fx1;
end
if fx < fo
xo = x;
fo = fx1;
end
end
function x = Mu_Inv(y,mu)
x = (((1+mu).^abs(y)- 1)/mu).*sign(y);
㈥ 在TSP问题中,想用matlab将路线画出来,如何做到
假设各个城市的X坐标为zuobiao_X,Y坐标为zuobiao_Y,zuobiao_X(i)表示第i个城市的横坐标,一共有n个城市,那么,采用以下循环语句进行画图:
for i=1:n-1
plot([zuobiao_X(i),zuobiao_X(i+1)],[zuobiao_Y(i),zuobiao_Y(i+1)],'-r');
hold on;
end
'-r'表示用红色的线连起来。望采纳。
㈦ 旅游线路的优化设计、要MATLAB程序的 谢谢
Hwnd = Plugin.Window.GetKeyFocusWnd()
Delay 2000
t1=now:t2=now:sj1=0.5:sj2=60
Rem abcc
Delay 20
If DateDiff("s",t1,now)>=sj1
Delay 10
Call Plugin.Bkgnd.KeyPress(Hwnd, 83)
Delay 10
t1=now
End If
If DateDiff("s",t2,now)>=sj2
Delay 10
Call Plugin.Bkgnd.KeyPress(Hwnd, 70)
t2=now
End If
Goto abcc
㈧ 多旅行商问题matlab程序
[code]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:[email protected]
%% All rights reserved
%%-------------------------------------------------------------------------
%% 主要符号说明
%% C n个城市的坐标,n×2的矩阵
%% 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)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5;
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);%各代最佳路线
L_best=inf.*ones(NC_max,1);%各代最佳路线的长度
L_ave=zeros(NC_max,1);%各代路线的平均长度
while NC<=NC_max%停止条件之一:达到最大迭代次数
%%第二步:将m只蚂蚁放到n个城市上
Randpos=[];
for i=1:(ceil(m/n))
Randpos=[Randpos,randperm(n)];
end
Tabu(:,1)=(Randpos(1,1:m))';
%%第三步:m只蚂蚁按概率函数选择下一座城市,完成各自的周游
for j=2:n
for i=1:m
visited=Tabu(i,1:(j-1));%已访问的城市
J=zeros(1,(n-j+1));%待访问的城市
P=J;%待访问城市的选择概率分布
Jc=1;
for k=1:n
if length(find(visited==k))==0
J(Jc)=k;
Jc=Jc+1;
end
end
%下面计算待选城市的概率分布
for k=1:length(J)
P(k)=(Tau(visited(end),J(k))^Alpha)*(Eta(visited(end),J(k))^Beta);
end
P=P/(sum(P));
%按概率原则选取下一个城市
Pcum=cumsum(P);
Select=find(Pcum>=rand);
to_visit=J(Select(1));
Tabu(i,j)=to_visit;
end
end
if NC>=2
Tabu(1,:)=R_best(NC-1,:);
end
%%第四步:记录本次迭代最佳路线
L=zeros(m,1);
for i=1:m
R=Tabu(i,:);
for j=1:(n-1)
L(i)=L(i)+D(R(j),R(j+1));
end
L(i)=L(i)+D(R(1),R(n));
end
L_best(NC)=min(L);
pos=find(L==L_best(NC));
R_best(NC,:)=Tabu(pos(1),:);
L_ave(NC)=mean(L);
NC=NC+1
%%第五步:更新信息素
Delta_Tau=zeros(n,n);
for i=1:m
for j=1:(n-1)
Delta_Tau(Tabu(i,j),Tabu(i,j+1))=Delta_Tau(Tabu(i,j),Tabu(i,j+1))+Q/L(i);
end
Delta_Tau(Tabu(i,n),Tabu(i,1))=Delta_Tau(Tabu(i,n),Tabu(i,1))+Q/L(i);
end
Tau=(1-Rho).*Tau+Delta_Tau;
%%第六步:禁忌表清零
Tabu=zeros(m,n);
end
%%第七步:输出结果
Pos=find(L_best==min(L_best));
Shortest_Route=R_best(Pos(1),:)
Shortest_Length=L_best(Pos(1))
subplot(1,2,1)
DrawRoute(C,Shortest_Route)
subplot(1,2,2)
plot(L_best)
hold on
plot(L_ave)
function DrawRoute(C,R)
%%=========================================================================
%% DrawRoute.m
%% 画路线图的子函数
%%-------------------------------------------------------------------------
%% C Coordinate 节点坐标,由一个N×2的矩阵存储
%% R Route 路线
%%=========================================================================
N=length(R);
scatter(C(:,1),C(:,2));
hold on
plot([C(R(1),1),C(R(N),1)],[C(R(1),2),C(R(N),2)])
hold on
for ii=2:N
plot([C(R(ii-1),1),C(R(ii),1)],[C(R(ii-1),2),C(R(ii),2)])
hold on
end
设置初始参数如下:
m=31;Alpha=1;Beta=5;Rho=0.1;NC_max=200;Q=100;
31城市坐标为:
1304 2312
3639 1315
4177 2244
3712 1399
3488 1535
3326 1556
3238 1229
4196 1004
4312 790
4386 570
3007 1970
2562 1756
2788 1491
2381 1676
1332 695
3715 1678
3918 2179
4061 2370
3780 2212
3676 2578
4029 2838
4263 2931
3429 1908
3507 2367
3394 2643
3439 3201
2935 3240
3140 3550
2545 2357
2778 2826
2370 2975[/code]
运行后得到15602的巡游路径,路线图和收敛曲线如下:
㈨ 用matlab能否在一张导入的图片(地图) 上画行进路线
不知道你的具体意图是什么,我用下列程序在一幅图片上画对角线,你可以参考一下。
I = imread('flowers.tif');
imshow(I);
hold on;
plot(linspace(1,size(I,2),101), linspace(1,size(I,1),101),'k');
㈩ matlab 最短路线
寻找模拟退火算法吧,matlab有现成的工具箱的.
以下是我在搜搜上搜到的模拟退火的源代码,你可以研究一下
=========================================
function [xo,fo] = Opt_Simu(f,x0,l,u,kmax,q,TolFun)
% 模拟退火算法求函数 f(x)的最小值点, 且 l <= x <= u
% f为待求函数,x0为初值点,l,u分别为搜索区间的上下限,kmax为最大迭代次数
% q为退火因子,TolFun为函数容许误差
%%%%算法第一步根据输入变量数,将某些量设为缺省值
if nargin < 7
TolFun = 1e-8;
end
if nargin < 6
q = 1;
end
if nargin < 5
kmax = 100;
end
%%%%算法第二步,求解一些基本变量
N = length(x0); %自变量维数
x = x0;
fx = feval(f,x); %函数在初始点x0处的函数值
xo = x;
fo = fx;
%%%%%算法第三步,进行迭代计算,找出近似全局最小点
for k =0:kmax
Ti = (k/kmax)^q;
mu = 10^(Ti*100); % 计算mu
dx = Mu_Inv(2*rand(size(x))-1,mu).*(u - l);%步长dx
x1 = x + dx; %下一个估计点
x1 = (x1 < l).*l +(l <= x1).*(x1 <= u).*x1 +(u < x1).*u; %将x1限定在区间[l,u]上
fx1 = feval(f,x1);
df = fx1- fx;
if df < 0||rand < exp(-Ti*df/(abs(fx) + eps)/TolFun) %如果fx1<fx或者概率大于随机数z
x = x1;
fx = fx1;
end
if fx < fo
xo = x;
fo = fx1;
end
end
function x = Mu_Inv(y,mu)
x = (((1+mu).^abs(y)- 1)/mu).*sign(y);
希望能解决您的问题。