2018年數學建模校賽

最近每個週末都有好多作業,上週趁有空就參加了數學建模校賽,就用今年“深圳杯”數學建模挑戰賽作題目。連續打了兩天,最後已經沒有時間做結果分析了,寫的論文也不算理想,不過我覺得模型做得還不錯,所以想記錄一下。

我們選了B題——無線回傳拓撲規劃,其實就是一道圖論題,重點是設計算法。題目輸入爲1000個節點的位置,用經緯度表示,輸出爲各節點的佈置、連接關係以及總體成本。題目限制各節點只能爲宿主站或者子站,所以可以用01來區分。計算節點間距要使用球面距離公式,距離不超過50的兩個宿主站可以連接,距離不超過20的宿主站和子站可以連接,距離不超過10的兩個子站可以連接。每個子站最多隻能連接2個節點,任意子站只能歸屬一個宿主站,任意子站到達所屬宿主站有且僅有一條通路,且跳數不能超過3。宿主站有兩種站型,分別有一個扇區和兩個扇區,節點站型已經在輸入中確定。每個扇區第一級最大接入子站數爲4,最大總接入子站數爲6。任意宿主站都有且只有一顆衛星負責回傳,成片連接的宿主站可以共享一顆衛星,但一顆衛星最多負責8個宿主站。題目給出了各站點的成本,子站5,宿主站10,衛星50,總體成本越小越好,各節點的佈置要滿足所有限制條件,而連接關係要求子站回傳距離的對數和越小越好。

我們決定採用模擬退火算法,用1000位表示各節點設置爲宿主站還是子站,然後在每一次迭代中求當前設置方案的最低總體成本和最佳連接關係,最後就能得出一個比較好的結果了。我們的設計不太符合模擬退火的思想,因爲迭代的方案有可能無法產生滿足條件的連接關係,不過我們最後已經很接近解決這個問題了。

在我們的算法中,首先要確定初始方案,我們可以將所有節點設置爲宿主站,這是一個滿足條件的解。然後是隨機產生新解,在這個部分我們並沒有一個很好的算法,但思路上肯定前期要將儘可能多的宿主站改成子站,後期要以調整宿主站的位置爲主,還要允許子站有可能被改成宿主站。接着就是計算最低總體成本。這一部分我們想到了正解,由於宿主站和子站已經確定,我們只需要確定最小衛星數就行了。將所有能連接的宿主站都連接,形成連通塊,那麼每個連通塊需要的最小衛星數爲連通塊中宿主站數除以8再向上取整,所以我們可以用並查集算法確定各連通塊的大小並得出結果。

最重要的一個部分也是我們花了太多時間的一個部分就是如何判斷一個設置方案可以建立滿足條件的連接關係並求出最佳連接關係。我們的思路是構建一個模型並應用最大流算法。首先建立超源和超匯,分別連接所有宿主站和子站,超源到宿主站的容量均爲6,子站到超匯的容量均爲1,然後將所有可以連接的兩個子站連接,將所有可以連接的宿主站和子站連接,那麼當最大流等於子站數時,就能保證所有子站都歸屬一個宿主站,且宿主站最大總接入子站數爲6(兩個扇區對應最大總接入子站數爲12)。然後接下來的難點在於最大跳數爲3,第一級最大接入子站數爲4(兩個扇區對應第一級最大接入子站數爲8)以及保證所有子站都只歸屬一個宿主站。我們直到最後都沒有處理好這些問題,只是簡單地把超源到宿主站的容量改成4,然後把宿主站到子站的容量設置爲3,子站之間的容量設置爲1,這樣求得的結果是有問題的,並不能保證滿足限制。如果能夠求得合理的模型,那麼求解最佳連接關係就可以在每個連接上設置費用並應用最小費用最大流算法,至此整個算法就完整了。

這次數模非常遺憾構建不出一個完美的模型,我們在很多方面都還有待鍛鍊。下次一定不要選那麼剛的題目,希望可以認認真真做數據分析寫論文。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章