鐘俊達(dá),吳云云,李厚彪
(電子科技大學(xué) a.微電子與固體電子學(xué)院;b.數(shù)學(xué)科學(xué)學(xué)院,成都 611731)
隨著經(jīng)濟(jì)的快速發(fā)展,越來(lái)越多的人熱衷于旅游。面對(duì)一個(gè)地區(qū)的若干景點(diǎn),如果能選擇一條最佳的旅游路線將會(huì)省去不少麻煩。鑒于Matlab中GUI界面友好化設(shè)計(jì)功能和對(duì)用戶算法語(yǔ)言要求較低的優(yōu)點(diǎn),以優(yōu)化成都市旅游路線為例,利用Matlab的GUI功能,設(shè)計(jì)出能優(yōu)化旅游路線的用戶界面程序。界面操作簡(jiǎn)單實(shí)用、顯示直觀且具有可擴(kuò)展性,可供用戶自由選擇旅游景點(diǎn)進(jìn)行旅游路線優(yōu)化。同時(shí)也可以看出Matlab的科學(xué)計(jì)算功能不僅僅是通過(guò)輸入一個(gè)個(gè)的函數(shù)代碼來(lái)實(shí)現(xiàn),還可以通過(guò)按鈕和對(duì)話框等直觀的圖像來(lái)實(shí)現(xiàn)。
哈密爾頓圖:設(shè)G=(V,E)是連通無(wú)向圖,經(jīng)過(guò)G的每個(gè)頂點(diǎn)正好一次的圈被稱為G的一條哈密爾頓圈,簡(jiǎn)稱H圈;含H圈的圖稱為哈密爾頓圖或H圖。
最佳Hamilton圈:在加權(quán)圖 G=(V,E)中,權(quán)最小的哈密爾頓圈稱為最佳H圈。
二邊逐次修正法:
1)任取初始H圈(見(jiàn)圖1):C0=v1,v2,…,vi,…,vj,…,vn,v1
2)對(duì)所有的 i,j,1 <i+1 <j<n,若 w(vi,vj)+w(vi+1,vj+1)<w(vi,vi+1)+w(vj,vj+1),則在 C0中刪去邊(vi,vi+1)和(vj,vj+1);而加入邊(vi,vj)和(vi+1,vj+1),形成新的H圈C(如圖2所示),即
圖1 初始H圈
圖2 新H圈
3)對(duì)C重復(fù)步驟直到條件不滿足為止,最后得到的C即為所求。
要設(shè)計(jì)出最短旅游路線,保證旅客不重復(fù)地游遍所選景點(diǎn),可以用圖論知識(shí)以及結(jié)合二邊逐次修正法建立數(shù)學(xué)模型求解得到。求解過(guò)程如下:
步驟1 把成都市的每個(gè)景點(diǎn)看作一點(diǎn),然后對(duì)出發(fā)點(diǎn)和16個(gè)旅游景點(diǎn)進(jìn)行連線,構(gòu)造出一個(gè)Hamilton圖;
步驟2 通過(guò)地圖收集每個(gè)景點(diǎn)之間最短距離,其中每個(gè)景點(diǎn)之間的距離就相當(dāng)于每?jī)蓚€(gè)點(diǎn)之間的權(quán),同時(shí)也就形成了一個(gè)距離矩陣;
步驟3 選擇初始路徑形成Hamilton圈,再利用二邊逐次修正法近似求出最佳Hamilton圈,所求得的最佳Hamilton圈就是最優(yōu)旅游路線。
1.2.1 各種功能模塊圖
總體結(jié)構(gòu)、結(jié)構(gòu)模塊、功能模塊如圖3~圖5所示:
圖3 總體結(jié)構(gòu)
圖4 結(jié)構(gòu)模塊
圖5 功能模塊
1.2.2 確定結(jié)構(gòu)模塊所需的控件并設(shè)置屬性
要確定結(jié)構(gòu)模塊需要2個(gè)Axes、1個(gè)Edit Text、2個(gè)Push Button、1個(gè)Listbox。為了編程的方便把各個(gè)控件程序默認(rèn)的屬性進(jìn)行修改(見(jiàn)表1)。
表1 控件屬性設(shè)置表
繼而根據(jù)上文闡述的功能需求向GUI中添加相應(yīng)的圖形控件。如圖6所示。
圖6 界面控件布局
1.2.3 圖形功能模塊之回調(diào)函數(shù)和子函數(shù)的編制
讀入地圖:在Editor中找到function BestTavel-Route_OpeningFcn(hObject,eventdata, handles,
end
end
n=length(TheFirstRow);
Result=spots(1,TheFirstRow(1,2∶1∶n -1));
set(handles.listboxBestResult,'String',Result);
Point1=textread('ZuoBiao.txt');讀取坐標(biāo)
Points1=Point1(TheFirstRow(1,2∶1∶n -1),∶);
axes(handles.a(chǎn)xes1);
line(Points1(∶,1),Points1(∶,2),'Color','r','Line-Width',5);畫線
Point2=textread('ZuoBiao2.txt');讀取坐標(biāo)2
axes(handles.a(chǎn)xes2);
line(Points2(∶,1),Points2(∶,2),'Color','r','Line-Width',2);畫線varargin)函數(shù),在 guidata(hObject,handles)后加上以下程序,讀入圖片(見(jiàn)程序1):
axes(handles.a(chǎn)xes2);
B=imread('MapSmall.jpg');
imshow(B)
清除按鈕:找到function buttonClear_Callback(hObject,eventdata,handles),加上清除功能回調(diào)函數(shù)(見(jiàn)程序2):
axes(handles.a(chǎn)xes2);
B=imread('MapSmall.jpg');
imshow(B)
確認(rèn)按鈕:找到function buttonEnter_Callback(hObject,eventdata,handles),加上以下確認(rèn)功能回調(diào)函數(shù)(見(jiàn)程序3):
function buttonEnter_Callback(hObject,eventdata,handles)程序3
r=str2num(get(handles.editRoute,'String'));得到輸入框的信息
spots={'1火車北站''2塔子山公園''3金沙遺址''4杜甫草堂''5青羊?qū)m''6文殊院''7寬窄巷子''8武侯祠''9錦里古街''10望江公園''11天府廣場(chǎng)''12成都大熊貓繁育研究基地''13昭覺(jué)寺''14洛帶古鎮(zhèn)''15都江堰''16青城山''17西嶺雪山''18成都雙流機(jī)場(chǎng)'};
n=length(r);
InitialRoute=horzcat(m([1 r(1∶1∶n)+1 r(1,1)+1 1],1),...
m([1 r(1∶1∶n)+1 r(1,1)+1 1 ],r(1∶1∶n)+1),...
m([1 r(1∶1∶n)+1 r(1,1)+1 1],[r(1,1)+1 1]));
a=InitialRoute;
for k=1∶1∶2;
n=size(a);
for i=2∶1∶n -2
for j=i+1∶1∶n -2
if a(i,j)+a(i+1,j+1)< a(i,i+1)+a(j,j+1)
temp1=horzcat(a(∶,1∶i),a(∶,j∶-1∶i+1),a(∶,j+1∶n));
temp2=vertcat(temp1(1∶i,∶),temp1(j∶- 1∶i+1,∶),temp1(j+1∶n,∶));
a=temp2;
end
end
運(yùn)行舉例:如果需要去1火車北站、3金沙遺址、4杜甫草堂、6文殊院、8武侯祠、10望江公園、12成都大熊貓繁育研究基地、16青城山,在可編輯文本框內(nèi)輸入:1 3 4 6 8 10 12 16,點(diǎn)擊確認(rèn)按鈕,即可得到運(yùn)行結(jié)果。其中,Listbox內(nèi)顯示旅游路線具體景點(diǎn)名稱的順序,地圖顯示的是各景點(diǎn)的連線。如果還需要其他景點(diǎn)的旅游順序,可點(diǎn)擊清除,并重新確認(rèn)即可。
回顧本文,該GUI程序是在二邊逐次修正法的基礎(chǔ)上建立的,很好地利用了Matlab的強(qiáng)大數(shù)學(xué)計(jì)算功能和GUI的界面設(shè)計(jì)優(yōu)點(diǎn),是一次從理論到應(yīng)用的轉(zhuǎn)換過(guò)程,具有一定應(yīng)用和參考價(jià)值。
[1]賈思義,杜鴻飛.應(yīng)用數(shù)學(xué)基礎(chǔ)及實(shí)踐[M].成都:電子科技大學(xué)出版社,2012(10):280-283.
[2]楊秀文,陳振杰,李愛(ài)玲,等.利用矩陣翻轉(zhuǎn)法求最佳H圈[J].后勤工程學(xué)院學(xué)報(bào),2008,24(1):102-106.
[4]印金國(guó).Matlab可視化界面設(shè)計(jì)與控件使用[J].電腦編程技巧與維護(hù),2007(1):30-34.
[5]鐘爾杰,黃廷祝.數(shù)學(xué)實(shí)驗(yàn)方法[M].成都:電子科技大學(xué)出版社,2012(2):140-142.
[6]李彤,項(xiàng)四通,李吉宗.基于Matlab的材料力學(xué)圖形用戶界面系統(tǒng)開(kāi)發(fā)[J].實(shí)驗(yàn)室研究與探索,2010,29(8):42-44.