在前麵的推文中,我們(men) 了解到,近幾年美賽的D題都是與(yu) 網路關(guan) 係、網絡圖有關(guan) 的,其實這都是數學建模比賽中一類常見的問題——圖論問題。下麵老師就帶大家來了解下什麽(me) 是圖論、有哪些圖論問題我們(men) 需要關(guan) 注和解決(jue) 吧!Gowith me~
什麽(me) 是圖論?
圖論起源於(yu) 一個(ge) 非常經典的問題——柯尼斯堡(Konigsberg)問題,其本身是應用數學的一部分,直白地來說,如果我們(men) 能用點表示某事物,用點與(yu) 點之間的線表示事物之間的聯係,就可以把這件事物抽象地用圖的方式表示出來。而運用抽象的方式將問題抽象為(wei) 圖,並為(wei) 之建立的數學模型,就是圖論。
(圖源:知乎機器之心https://zhuanlan.zhihu.com/p/34442520)
在數學建模中,圖論作為(wei) 優(you) 化問題的一個(ge) 分支,在各類數學建模比賽中出現頻繁,我們(men) 不可謂不重視。它是通過優(you) 化方法來解決(jue) 圖或網絡中出現的各類問題,我們(men) 在之前的文章中提到的2019年和2020年美賽的D題均是與(yu) 圖論相關(guan) ,往年國賽中則主要是集中在B題,如2011年高教社杯全國大學生數學建模競賽B題“交巡警服務平台的設置與(yu) 調度”。
數學建模中常見的圖論問題
老師分析,數學建模中常見的圖論問題主要有三類:最短路徑問題、最小生成樹問題、(多)旅行商問題,下麵老師就依次為(wei) 大家來介紹一下吧!
01
最短路徑問題(SPP)
在老師正式講解之前,難免有的同學對圖的定義(yi) 和術語不了解,可以先行閱讀學習(xi) 下麵的文章(https://zhuanlan.zhihu.com/p/141182838)。
最短路徑問題(Shortestpath problem)是圖論研究中的一個(ge) 經典算法問題,旨在尋找圖(由結點和路徑組成的)中兩(liang) 結點之間的最短路徑。最短路徑問題根據初始條件的不同,可分為(wei) 五種情況:
1)最短路徑問題:旨在尋找圖中兩(liang) 點之間的最短路徑;
2)確定起點的最短路徑問題:即已知起點,求最短路徑的問題;
3)確定終點的最短路徑問題:與(yu) 確定起點的問題相反,該問題是已知終點,求最短路徑的問題。在無向圖中該問題與(yu) 確定起點的問題完全等同,在有向圖中該問題等同於(yu) 把所有路徑方向反轉的確定起點的問題;
4)確定起點終點的最短路徑問題,即已知起點和終點,求兩(liang) 點之間的最短路徑;
5):全局最短路徑問題:求圖中任意兩(liang) 點間的最短路徑。也可以合並為(wei) 一種情況——全局最短路徑問題,隻要求出全局最短路徑,那其餘(yu) 四種情況也已經包含在內(nei) 了。而計算最短路徑的常用算法有迪傑斯特拉算法、貝爾曼-福特算法、弗洛伊德算法等,下麵老師將為(wei) 大家一一介紹其基本概念、優(you) 缺點、適用情況和案例分析。
迪傑斯特拉(Dijkstra)算法:用於(yu) 解決(jue) 從(cong) 起點到其他各結點的最短路徑,解決(jue) 的是有向圖中最短路徑問題。其主要特點是以初始點為(wei) 中心向外層層擴展,直到擴展到終點為(wei) 止,但也有圖中不能存在負權值的邊的限製。
貝爾曼-福特(Bellman–Ford)算法:用於(yu) 解決(jue) 從(cong) 起點到其他各節點的最短距離。與(yu) 迪傑斯特拉算法不同的是,貝爾曼-福特算法可支持存在負權重的情況,即打破了圖中不能存在負權值的邊的限製,其邊的權值可以為(wei) 負數、實現簡單,但也存在時間複雜度過高的缺點。可對原始算法進行若幹優(you) 化,提高效率。貝爾曼-福特算法可用於(yu) 解決(jue) 以下問題:
1)從(cong) A出發是否存在到達各個(ge) 節點的路徑(有計算出值當然就可以到達);
2)從(cong) A出發到達各個(ge) 節點最短路徑(時間最少、或者路徑最少等);3)圖中是否存在負環路(權重之和為(wei) 負數)。
弗洛伊德(Floyd)算法:用於(yu) 解決(jue) 任意兩(liang) 結點之間的最短路徑,可以正確處理有向圖或有負權的有向圖(但不可存在負權回路)的最短路徑問題。弗洛伊德算法與(yu) 迪傑斯特拉算法或貝爾曼福特算法相比,能夠一次性的求出任意兩(liang) 點之間的最短路徑,後兩(liang) 種算法運行一次隻能計算出給定的起點和終點之間的最短路徑。
當然,弗洛伊德算法計算的時間也要高於(yu) 後兩(liang) 種算法。對於(yu) 案例分析,2020年某高校國賽暑期培訓賽第五輪的賽題“選址與(yu) 路線規劃問題”問題一中則是明顯有解決(jue) 最短路徑問題的需求,讓我們(men) 一起來分析一下問題一。某城市共有52個(ge) 居住區域,各居住區域的人口(單位:千人)如下表:
各居住區域的道路連接如下圖:
(圖源:2020年某高校國賽暑期培訓賽第五輪的賽題圖)
(注:橫線上的數據表示相鄰城市之間的距離,單位:百米)
(1)政府擬建3個(ge) 行政服務站,問分別建在何處才能方便廣大市民。問題一要求我們(men) 在52個(ge) 居住區域中,選出3個(ge) 居住區域並建立能夠方便廣大市民的行政服務站。
由問題一本身可知,此題為(wei) 最優(you) 選址問題,且無負權回路,比較適合尋求賦權圖中任意兩(liang) 點之間最短路徑的Folyd算法,而題幹中的“方便廣大市民”是既要考慮行政服務站與(yu) 其他居住區域的距離,也要考慮各居住區域的人口,故計算權重時可將兩(liang) 者同時考慮進去,即建立距離(單位:百米)乘以人口(單位:千人)的權重。
同時問題一要求選出3個(ge) 最優(you) 點位置,故需要考慮各點作為(wei) 行政服務站前提下的人口距離權重情況,即在計算效率能夠接受的前提下務必考慮每一種情況,可利用窮舉(ju) 法和Folyd算法計算出各居住區域作為(wei) 行政服務站與(yu) 其他區域的人口距離權重,並相互比較選出最小的3個(ge) 作為(wei) 最終的行政服務站位置。
接著以3個(ge) 行政服務站位置為(wei) 基點,再次利用Folyd算法計算其他居住區域與(yu) 這3個(ge) 行政服務站的人口距離權重,並將其他居住區域分別劃分至這3個(ge) 人口距離權重中最小的行政服務站的最佳管理區域中,即可求出各行政服務站的最佳管理區域中的各居住區域。
02、最小生成樹問題(MTP)
最小生成樹問題(Minimumspanning treeproblem)也是一種常見的圖論問題,路線設計、道路規劃、官網布局、公交路線、網絡設計,都可以轉化為(wei) 最小生成樹問題,如要求總線路長度最短、材料最少、成本最低、耗時最小等。
相較於(yu) 最短路徑問題,最小生成樹是要保證整個(ge) 拓撲圖的所有路徑之和最小,但不能保證任意兩(liang) 點之間是最短路徑。在正式了解之前,大家可以先了解如下幾個(ge) 關(guan) 於(yu) 最小生成樹的概念:
連通圖:在無向圖中,若任意兩(liang) 個(ge) 頂點vi與(yu) vj都有路徑相通,則稱該無向圖為(wei) 連通圖。
強連通圖:在有向圖中,若任意兩(liang) 個(ge) 頂點vi與(yu) vj都有路徑相通,則稱該有向圖為(wei) 強連通圖。連通網:在連通圖中,若圖的邊具有一定的意義(yi) ,每一條邊都對應著一個(ge) 數,稱為(wei) 權;權代表著連接連個(ge) 頂點的代價(jia) ,稱這種連通圖叫做連通網。
生成樹:一個(ge) 連通圖的生成樹是指一個(ge) 連通子圖,它含有圖中全部n個(ge) 頂點,但隻有足以構成一棵樹的n-1條邊。一顆有n個(ge) 頂點的生成樹有且僅(jin) 有n-1條邊,如果生成樹中再添加一條邊,則必定成環。
最小生成樹:在連通網的所有生成樹中,所有邊的代價(jia) 和最小的生成樹,稱為(wei) 最小生成樹。
(圖源:勿在浮沙築高台https://blog.csdn.net/luoshixian099/article/details/51908175)
對於(yu) 最小生成樹問題,典型的算法有兩(liang) 種:普裏姆(Prims)算法和克魯斯卡(Kruskal)算法,下麵老師將分別為(wei) 大家介紹兩(liang) 種方法的基本概念、適用情況和案例分析。
普裏姆(Prims)算法:以頂點為(wei) 基礎構造最小生成樹,每個(ge) 頂點隻與(yu) 連通圖連接一次,因此不用考慮在加入頂點的過程中是否會(hui) 形成回路。算法從(cong) 某一個(ge) 頂點開始,每次選擇剩餘(yu) 的代價(jia) 最小的邊所對應的頂點,加入到最小生成樹的頂點集合中,逐步擴充直到包含整個(ge) 連通網的所有頂點,可以稱為(wei) “加點法”。Prim算法每次選擇頂點時,都需要進行排序,但每次都隻需要對一部分邊進行排序。Prim算法的時間複雜度為(wei) O(n*n),與(yu) 邊的數量無關(guan) ,適用於(yu) 邊很多的稠密圖。
克魯斯卡(Kruskal)算法:以邊為(wei) 基礎構造最小生成樹,利用避圈思想,每次找到不使圖構成回路的代價(jia) 最小的邊。算法初始邊數為(wei) 0,每次選擇一條滿足條件的最小代價(jia) 邊,加入到邊集合中,逐步擴充直到包含整個(ge) 生成樹,可以稱為(wei) “加邊法”。Kruskal 算法的時間複雜度為(wei) O(mlogm),主要是對邊排序的時間複雜度,適用於(yu) 邊較少的稀疏圖。
案例分析如下:某市區有7個(ge) 小區需要鋪設天然氣管道,各小區的位置及可能的管道路線、費用如圖所示,要求設計一個(ge) 管道鋪設路線,使天然氣能輸送到各個(ge) 小區,且鋪設管道的總費用最小。
(圖源:小白YouCanshttps://blog.csdn.net/youcans?type=blog)
老師分析,這是一個(ge) 典型最小生成樹問題,通過上述兩(liang) 種算法即可解決(jue) 問題,如運用Python平台NetworkX的minimum_spanning_tree()函數即可求出費用最小的管道路線。
03、旅行商問題(TSP)
旅行商問題(TravelingSalesman Problem)是運籌學組合優(you) 化領域中一個(ge) 著名的NPC問題,也是數學建模中一個(ge) 常見的圖論問題,應用領域十分廣泛。經典的旅行商問題(TSP)可以描述為(wei) :一個(ge) 商品推銷員要去若幹個(ge) 城市推銷商品,該推銷員從(cong) 一個(ge) 城市出發,需要經過所有城市後,回到出發地。
而多旅行商問題(MTSP)可以描述為(wei) :多個(ge) 商品推銷員要去若幹個(ge) 城市推銷商品,這些推銷員最開始都在同一個(ge) 城市,他們(men) 可以被分配到不同路徑,在經過所有的城市後,大家都回到出發的城市。對於(yu) TSP和MTSP問題,目前為(wei) 止是不存在多項式算法的。因此當問題規模還比較小時,可以運用傳(chuan) 統的運籌學算法,例如分支定界、動態規劃等方法求取最優(you) 解。
當問題規模大的時候則需要借助一些啟發式或者元啟發式算法(如模擬退火算法、遺傳(chuan) 算法、粒子群算法等等)求取近似最優(you) 解。老師繼續以2020年某高校國賽暑期培訓賽第五輪的賽題“選址與(yu) 路線規劃問題”問題三為(wei) 例進行分析。
3)近日,該市受到特大暴雨襲擊,受災嚴(yan) 重,市領導從(cong) 市政府所在地(區域6)出發,分三個(ge) 小組巡視所有區域,了解居民受災情況,巡視完後返回區域6,假設巡視人員在街道上的行駛速度為(wei) 30km/h,在每個(ge) 區域的停留時間為(wei) 10分鍾,問如何規劃巡視路線,使巡視效率最大化?對於(yu) 問題三,要求我們(men) 給出對市領導小組巡視的最大巡視效率的巡視路線,從(cong) 問題三本身可以看出,此為(wei) 多旅行商問題(MTSP),所要求的巡視效率最大化即是通過最短路徑所花費的時間,但與(yu) 一般的MTSP不同的是,本題中的起點區域6向3外延伸的路徑隻有5條,也就是所求得的巡視路線中必有重複經過的路徑。
同時考慮居住區域的數量等方麵,我們(men) 選擇較傳(chuan) 統算法對求解MTSP尤其是上述兩(liang) 點有著更高效率的啟發式算法——遺傳(chuan) 算法。首先進行遺傳(chuan) 編碼,設置染色體(ti) 基因型為(wei) 兩(liang) 段:
一是路徑基因型,用來記錄各小組的最短巡視路徑;
二是中斷點基因型,用來分割效率最大化前提下不同小組的最短巡視路徑。接著結合問題參考相關(guan) 文獻選擇合適的種群規模和迭代次數,隨後選擇相應的適應度函數。
針對選擇算子,使用輪盤賭選擇的方法,即每一個(ge) 個(ge) 體(ti) 被選擇的概率就等於(yu) 它的適應值與(yu) 整個(ge) 種群中個(ge) 體(ti) 適應值和的比例;針對交叉算子,染色體(ti) 交叉采用基於(yu) 路徑表示的部分匹配交叉、順序交叉、循環交叉三種交叉混合方法,以提高子代繼承父代優(you) 良特性的可能性,加快算法的搜索速度;針對變異算子,采用交換變異法,即任選序號交換插入的方法。在結束迭代次數之後,即可得到各小組的可達路徑矩陣,即效率最大化前提下的巡視路線(如下圖)。
接著結合問題一Floyd算法計算得到的距離矩陣,進行矩陣點乘,即可計算出各小組所走路程總和,進而求解出各小組巡視路線所花費的時間,即巡視效率。
今天老師初步地帶大家介紹了下圖論的相關(guan) 概念,以及數學建模中常見的三大圖論問題和相應解決(jue) 措施,想必大家一定迫不及待地想進行深入學習(xi) 了。
評論已經被關(guan) 閉。