(3)模拟退火法除了可以选择不同的参数外,还可以进行反复多次运行,而且每次得到的解可能都不一样,也就比其它算法有更多的选择余地和获得最优解的机会,这对实际应用而言是十分有优势的,因为真正实际问题的求解往往需要在多个方案中进行筛选,以获取最优方案。所以该模型具有很好的实用性。
缺点:
(1)把各社区抽象为一个点,产生了距离误差。
(2)模拟退火具有随机性,只能得到近似解,而且对于节点偏多的网络,运行速度很慢。
5.2模型的改进
由于时间的限制,未能对模拟退火法的进行更多次的运行。因此,如果时间允许,我
们可以增加运行次数,以求得更优越的方案,或者寻找更佳的算法。
5.3模型的推广
本题的问题一和问题二的最优选址问题也可运用到其它的最优选址问题中去,比如关于消防救援工作最优路径问题、重大生产安全事故应急救援问题、公共交通最优路径问题等。问题三的多旅行商问题模型可推广到交通运输、管道铺设、路线的选择、计算机网路的拓扑设计、邮递员送信、计算机网络通信等众多领域。
参考文献
[1]费浦生,羿旭明,数学建模及其基础知识详解,武汉:武汉大学出版社,2006.
[2]胡良剑,孙晓君,matlab数学实验,北京:高等教育出版社,2006.
[3]屈强,陈雪波,matlab的模拟退火算法的实现,鞍山科技大学学报,2003年6月第26卷第3期。
[4]韦芳芳,杨兰兰,柏瑞,灾情巡视路线的设计,数学的实践与认识,1999年1月第29卷第1期。
[5]史彦锋,齐鹤,网络多中心问题的几种算法及其应用,中国教育发展研究杂志,2007年8月第4卷第8期。
附录
附录一:各社区的人口(单位:千人)
A 编号 1 B C D E F G H I J K L 2 3 4 5 6 7 8 9 10 11 12 人口 10 12 18 6 10 15 4 8 7 11 13 11 13 编号 M 14 15 16 17 18 19 20 21 22 23 24 N P Q R S T U V W X Y 人口 11 8 9 22 14 8 7 10 15 28 18 13 附录二:各社区的的道路连接
(注:横线上的数据表示相邻社区之间的距离,单位:百米)
附录五:模拟所用的程序
第一问源程序:
clear;clc;
%求任意社区间的最短路
a=input('输入带权邻接矩阵:');
[D,path]=floyd1(a);
ss=inf;
%列出所有的煤气站选址方案,比较求出最优解
fori=1:22
for j=i+1:23
for k=j+1:24
s=0;
%各社区居民会选择距离最近的煤气站缴费
%s为对应总距离
for ii=1:24
w=min([D(ii,i),D(ii,j),D(ii,k)]);
s=s+w*p(ii);
end
%逐步比较选择更小的总距离
if s ss=s;i1=i;j1=j;k1=k; end end end end %循环结束求出总距离最小值ss %记录在最佳方案下各社区居民选择的煤气站编号 forjj=1:24 [aa,bb]=min([D(jj,i1),D(jj,j1),D(jj,k1)]); nn(jj)=(bb==1)*i1+(bb==2)*j1+(bb==3)*k1; end fprintf('最小平均距离:%d\\n',ss/sum(p)); fprintf('煤气站位置:%d,%d,%d\\n',i1,j1,k1); fprintf('各社区选择的煤气站:\\n'); num2str(nn) Floyd算法求最短路的程序: function [D,path]=floyd1(a) %a为带权邻接矩阵 %D为最短距离矩阵 %path为最短路径矩阵 n=size(a,1);%n为点数 %设置D,path的初值 D=a;path=zeros(n,n); fori=1:n for j=1:n if D(i,j)~=inf; path(i,j)=j; end end