數學建模十大經典演算法漫談

2021-06-19 15:17:22 字數 4140 閱讀 3113

分類: dsp數字訊號處理

小常識 2013-10-08 21:44

165人閱讀收藏

舉報 數學建模十大演算法漫談

本文參考:

i、  細數二十世紀最偉大的十大演算法 [譯者:本人july]

ii、 本blog內 經典演算法研究系列

iii、維基百科

博主說明:

1、此數學建模十大演算法依據網上的乙份榜單而寫,本文對此十大演算法作一一簡單介紹。

這只是乙份榜單而已,數學建模中還有很多的演算法,未一一囊括。歡迎讀者提供更多的好的演算法。

2、在具體闡述每一演算法的應用時,除了列出常見的應用之外,

同時,還會具體結合數學建模競賽一一闡述。

畢竟,此十大演算法,在數學建模競賽中有著無比廣泛而重要的應用。

且,凡是標著「某某年某國某題」,即是那一年某個國家的數學建模競賽原題。

3、此十大演算法,在一些經典的演算法設計書籍上,無過多闡述。

若要具體細緻的深入研究,還得請參考國內或國際上關於此十大演算法的優秀**。

謝謝。一、蒙特卡羅演算法

2023年,美國拉斯阿莫斯國家實驗室的三位科學家john von neumann,stan ulam 和nick metropolis共同發明了,蒙特卡羅方法。

此演算法被評為20世紀最偉大的十大演算法之一,詳情,請參見我的博文:

蒙特卡羅方法(monte carlo method),又稱隨機抽樣或統計模擬方法,是一種以概率統計理論為指導的一類非常重要的數值計算方法。此方法使用隨機數(或更常見的偽隨機數)來解決很多計算問題的方法。

由於傳統的經驗方法由於不能逼近真實的物理過程,很難得到滿意的結果,而蒙特卡羅方法由於能夠真實地模擬實際物理過程,故解決問題與實際非常符合,可以得到很圓滿的結果。

蒙特卡羅方法的基本原理及思想如下:

當所求解問題是某種隨機事件出現的概率,或者是某個隨機變數的期望值時,通過某種「實驗」的方法,以這種事件出現的頻率估計這一隨機事件的概率,或者得到這個隨機變數的某些數字特徵,並將其作為問題的解。

有乙個例子可以使你比較直觀地了解蒙特卡洛方法:

假設我們要計算乙個不規則圖形的面積,那麼圖形的不規則程度和分析性計算(比如,積分)的複雜程度是成正比的。蒙特卡洛方法是怎麼計算的呢?假想你有一袋豆子,把豆子均勻地朝這個圖形上撒,然後數這個圖形之中有多少顆豆子,這個豆子的數目就是圖形的面積。當你的豆子越小,撒的越多的時候,結果就越精確。

在這裡我們要假定豆子都在乙個平面上,相互之間沒有重疊。

蒙特卡羅方法通過抓住事物運動的幾何數量和幾何特徵,利用數學方法來加以模擬,即進行一種數字模擬實驗。它是以乙個概率模型為基礎,按照這個模型所描繪的過程,通過模擬實驗的結果,作為問題的近似解。

蒙特卡羅方法與一般計算方法有很大區別,一般計算方法對於解決多維或因素複雜的問題非常困難,而蒙特卡羅方法對於解決這方面的問題卻比較簡單。其特點如下:

i、  直接追蹤粒子,物理思路清晰,易於理解。

ii、 採用隨機抽樣的方法,較真切的模擬粒子輸運的過程,反映了統計漲落的規律。

iii、不受系統多維、多因素等複雜性的限制,是解決複雜系統粒子輸運問題的好方法。

等等。此演算法,日後還會在本blog 內詳細闡述。

二、資料擬合、引數估計、插值等資料處理演算法

我們通常會遇到大量的資料需要處理, 而處理資料的關鍵就在於這些演算法,通常使用matlab作為工具。資料擬合在數學建模比賽中中有應用,與圖形處理有關的問題很多與擬合有關係,乙個例子就是98年數學建模美國賽a題,生物組織切片的三維插值處理,94年a題逢山開路,山體海拔高度的插值計算,還有吵的沸沸揚揚可能會考的「非典」問題也要用到資料擬合演算法,觀察資料的走向進行處理。

此類問題在 matlab 中有很多現成的函式可以呼叫,熟悉matlab,這些方法都能游刃有餘的用好。

三、線性規劃、整數規劃、多元規劃、二次規劃等規劃類問題

數學建模競賽中很多問題都和數學規劃有關,可以說不少的模型都可以歸結為一組不等式作為約束條件、幾個函式表示式作為目標函式的問題,遇到這類問題,求解就是關鍵了,比如98年b題,用很多不等式完全可以把問題刻畫清楚,因此列舉出規劃後用 lindo 、 lingo 等軟體來進行解決比較方便,所以還需要熟悉這兩個軟體。

四、圖論演算法

這類問題演算法有很多,

包括: dijkstra 、 floyd 、 prim 、 bellman-ford ,最大流,二分匹配等問題。

關於此類圖論演算法,可參考introduction to algorithms--演算法導論,關於圖演算法的第22章-第26章。同時,本blog內經典演算法研究系列,對dijkstra演算法有所簡單描述,

-----------

經典演算法研究系列:二、dijkstra 演算法初探

五、動態規劃、回溯搜尋、分治演算法、分支定界等計算機演算法

在數學建模競賽中,如:92 年b題用分枝定界法, 97年b題是典型的動態規劃問題,此外 98 年 b 題體現了分治演算法。

這方面問題和 acm 程式設計競賽中的問題類似,

推薦看一下演算法導論,與《計算機演算法設計與分析》(電子工業出版社)等與計算機演算法有關的書。

六、最優化理論的三大經典演算法:模擬退火法、神經網路、遺傳演算法

這十幾年來最優化理論有了飛速發展,模擬退火法、神經網路、遺傳演算法這三類演算法發展很快。

在數學建模競賽中:比如97年a題的模擬退火演算法,00年b題的神經網路分類演算法,01年b題這種難題也可以使用神經網路,還有美國競賽89年a題也和 bp 演算法有關係,當時是86年剛提出bp演算法,89年就考了,說明賽題可能是當今前沿科技的抽象體現。 03 年 b 題伽馬刀問題也是目前研究的課題,目前演算法最佳的是遺傳演算法。

另,本人對人工智慧非常感興趣,遺傳演算法已在本blog內有所闡述,敬請參見。

----------

經典演算法研究系列:七、深入淺出遺傳演算法,透析ga本質

其它倆大演算法,模擬退火法,與神經網路,也定會在本blog內日後的博文更新中,詳細闡述。

七、網格演算法和窮舉法

網格演算法和窮舉法一樣,只是網格法是連續問題的窮舉。

比如要求在 n 個變數情況下的最優化問題,那麼對這些變數可取的空間進行採點,

比如在 [ a; b ] 區間內取 m +1 個點,就是 a; a +( b ? a ) =m; a +2 ¢ ( b ? a ) =m ; …;b

那麼這樣迴圈就需要進行 ( m + 1) n 次運算,所以計算量很大。

在數學建模競賽中:比如 97 年 a 題、 99 年 b 題都可以用網格法搜尋,這種方法最好在運算速度較快的計算機中進行,還有要用高階語言來做,最好不要用 matlab 做網格,否則會算很久。 窮舉法大家都熟悉,自不用多說了。  

八、一些連續離散化方法

大部分物理問題的程式設計解決,都和這種方法有一定的聯絡。物理問題是反映我們生活在乙個連續的世界中,計算機只能處理離散的量,所以需要對連續量進行離散處理。

這種方法應用很廣,而且和上面的很多演算法有關。

事實上,網格演算法、蒙特卡羅演算法、模擬退火都用了這個思想。 

九、數值分析演算法

數值分析(numerical analysis),是數學的乙個分支,主要研究連續數學(區別於離散數學)問題的演算法。

如果在比賽中採用高階語言進行程式設計的話,那一些數值分析中常用的演算法比 如方程組求解、矩陣運算、函式積分等演算法就需要額外編寫庫函式進行呼叫。

這類演算法是針對高階語言而專門設的,如果你用的是 matlab 、 mathematica ,大可不必準備,因為像數值分析中有很多函式一般的數學軟體是具備的。

十、圖象處理演算法

在數學建模競賽中:比如01 年 a 題中需要你會讀 bmp 圖象、美國賽 98 年 a 題需要你知道三維插值計算, 03 年 b 題要求更高,不但需要程式設計計算還要進行處理,而數模**中也有很多需要展示,因此圖象處理就是關鍵。做好這類問題,重要的是把matlab 學好,特別是圖象處理的部分。

本人對演算法,尤其感興趣,且日漸愈濃,

日後,更多的、好的、經典實用演算法將會在本blog內有所詳細而細緻入微的闡述與深入研究。

完。

數學建模十大經典演算法漫談

數學建模十大演算法漫談作者 july 二零一一年一月二十九日 本文參考 i 細數二十世紀最偉大的十大演算法 譯者 本人july ii 本blog內 經典演算法研究系列 iii 維基百科 博主說明 1 此數學建模十大演算法依據網上的乙份榜單而寫,本文對此十大演算法作一一簡單介紹。這只是乙份榜單而已,數...

數學建模十大經典演算法漫談

本文參考 i 細數二十世紀最偉大的十大演算法 譯者 本人july ii 本blog內 經典演算法研究系列 iii 維基百科 1 此數學建模十大演算法依據網上的乙份榜單而寫,本文對此十大演算法作一一簡單介紹。這只是乙份榜單而已,數學建模中還有很多的演算法,未一一囊括。歡迎讀者提供更多的好的演算法。2 ...

數學建模十大經典演算法漫談

1 此數學建模十大演算法依據網上的乙份榜單而寫,本文對此十大演算法作一一簡單介紹。這只是乙份榜單而已,數學建模中還有很多的演算法,未一一囊括。歡迎讀者提供更多的好的演算法。2 在具體闡述每一演算法的應用時,除了列出常見的應用之外,同時,還會具體結合數學建模競賽一一闡述。畢竟,此十大演算法,在數學建模...