的出的结果有一定差距。
4、在旅途中会遇到很多客观的不定因素,比如天气问题等,会使正常计划受到一定的影响。
五、
1、模型的复杂性:
模型复杂性分析
(1)对于周游先生计划游遍全国的省会城市、直辖市、香港、澳门、台北这一问题,我们运用了模型(1)来计算周游先生完成旅游计划的最短行程,采用人工蚁群算法,利用MATLAB编程得到了最短的旅行行程以及旅游路线,相对于传统的动态规划解法,达到了省时、简便的效果,大大降低了计算的复杂性。
(2)对于订票方案问题,我们给出了模型(2)、(3)的求解;为了反映决策者的主观意见,这里引入重要性程度G与满意度H,综合考虑了出行方式,出发时间,到达时间,旅行用时,旅行路程,票价等的重要性程度G与满意度H,给出了“决策树”,决策者先通过打分,再通过计算程序进行处理,就能简单地选择出理想订票方案。
(3)建立的模型能与实际紧密联系,结合实际情况对所提出的问题进行求解,使模型更贴近实际,达到了运用数学知识解决实际问题的目的。
六、
模型可行性与推广
本案例建立的模型解决了旅游出行优化问题,采用了人工蚁群算法解决了最短路径问题,运用决策分析方法解决了旅行费用优化问题。因此,本模型还可以运用于很多领域类似的关于路径优化以及经济优化的问题,如:输油管道的铺设问题、邮递员送信问题、交通运输问题等。本模型具有较高的可行性与应用价值。
参考文献
[1] 卢开澄. 单目标、多目标与整数规划. 北京:清华大学出版社. 1999
21
[2] 吴红,王远世.搜索不同TSP最佳路径的多蚁群优化算法.中山大学报(自然科学
版).第44卷 第4期 2005年7月.13~20
[3] 许玖平等. 运筹学: 数据.模型.决策. 北京:科学出版社. 2006
[4] 薛定宇等. 高等运用数学的MATLAB求解. 北京:清华大学出版社. 2008.10 [5] amy2009win 蚁群算法matlab源程序
http://search.download.csdn.net/search/matlab+???è?????^field=*/1 2010.4.26 [6] Yuehui Chen 蚁群算法
http://ci.ujn.edu.cn/kejian/μú????ò?èo??·¨.ppt 2010.4.27
22
附录
MATLAB程序1:
function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=tsp prompt={'输入你的名字:','蚂蚁的个数',... };
dlg_title = '输入参数对话框'; num_lines = [1 40];
def = {'guitar','34','200','1','5','0.1','100'}; ayf = inputdlg(prompt,dlg_title,num_lines,def,'on'); if ~strcmp(ayf{1},'guitar') errordlg('姓名不对','Error'); return end
temp=cellfun(@str2double,ayf(2:end)); temp=num2cell(temp);
[m,NC_max,Alpha,Beta,Rho,Q]=deal(temp{:});
[FileName,PathName] = uigetfile('*.dat','选择城市坐标的数据文件'); dataFile=strcat(PathName,FileName); C=load(dataFile); n=size(C,1); D=zeros(n); for i=1:n for j=1:n if i~=j
D(i,j)=sqrt(sumsqr(C(i,2:3)-C(j,2:3))); else
D(i,j)=eps; end
23
end end Eta=1./D; Tau=ones(n); 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); hh= waitbar(0,'Please wait...'); while NC<=NC_max
Tabu(:,1)=randi(m,1,[1,n]); for j=2:n for i=1:m
visited=Tabu(i,1:(j-1)); J=setdiff(1:n,visited); P=J;
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
24
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),pos]=min(L); R_best(NC,:)=Tabu(pos,:); L_ave(NC)=mean(L); NC=NC+1;
Delta_Tau=zeros(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); mcc=NC/NC_max;
waitbar(mcc,hh,['now....',num2str(round(100*mcc)),'%']); end close(hh);
[Shortest_Length,Pos]=min(L_best); Shortest_Route=R_best(Pos,:); figure(1);
DrawRoute(C,Shortest_Route); axis equal
25