當前位置:
首頁 > 最新 > 數學建模比賽該如何準備?

數學建模比賽該如何準備?

作者介紹:苗楓,華中科技大學管理學院18級博士研究生,本科時全國大學生數學建模國賽一等獎,並多次帶隊獲得美國數學建模競賽一等獎

下期預告:如何更有把握獲得國/美賽一等獎

上一期中有同學詢問關於國賽一等、二等以及美賽O、F、M獎的含金量排序及獲獎難度問題,這裡詳細解釋下這些獎項的評分過程,然後大家就可以大致明白啦。

關於國賽

首先,國賽中,當9月中旬國賽論文提交後,各個省會互評論文,比如湖北省試卷交給山東組委會評,山東省試卷交給山西省組委會評。各個省會選出一批優秀論文來遞交給國家組委會評選國家一等和國家二等。需要注意的是,每個學校參評國賽一等的隊伍不超過5支,參評國賽二等的隊伍也不超過5支。參評國賽一等的結果可能是國賽一等或者二等,參評國賽二等的結果可能是國賽二等或者省賽一等(注意國賽一等或者二等都會有省賽一等的證書)。這也是為什麼每個學校國賽一等獎不會超過5支,一等和二等加起來不會超過10支的原因了。

關於美賽

再說美賽,美賽的評獎機制是當比賽結束後,首先試卷會在中國區參與評閱,評閱的教授為中國高校教授,評閱過程為打分機制,滿分7分,3分以下為S獎(成功參賽獎),3-5分為H獎(二等獎),這部分試卷將會被留在國內,5分以上試卷將會被送往國外參與評審。然後在國外的評審過程中有一個國內教授一個國外教授一起評閱,達到5.5分會被評為M獎(一等獎),其餘會被打回成H獎。然後在M獎中再次評選出大約30篇左右評分最高的論文參與O獎(特等獎)和F獎(特等獎提名)的評選,最終會產生約12篇O將,其餘為F獎。

Ps:之前說所國賽、美賽獲獎難度是按照各個獎項獲獎比例而來,就難度排序O大於F大於國一大於國二大於M,但美賽和國賽考察重點也不相同的,這一點在本文後半部分會做重點說明,且二者在不同學校也有著不同參賽規模,所以獎項高低也沒辦法做出精準的判斷,因人而異了。

建模、編程、論文該學點什麼

建模、編程、論文是數學建模中三個非常重要的板塊,一般而言同一支隊伍中三個人要各自分工負責三者之一。一支好的隊伍中,每個人對三個方面都有所了解,又有一方面特別精通。

建模

建模是數模比賽的基礎,是寫出優秀論文的地基。對於初學者而言建模是最難的部分,它過程主要包含建模思維的培養、常用模型的熟悉、以及實際比賽的鍛煉。

就我自己的經驗來談談我是如何開始建模部分的學習的,最開始就是看教材,這裡有兩本十分推薦的入門教材——姜啟源《數學模型》(第四版)以及司守奎《數學建模演算法與應用》

《數學模型》的學習

其中《數學模型》偏向於基礎的數學建模知識,實用性不強,包含一些最基礎的數學模型,是一本能把高中應用思維逐漸向大學建模思維逐漸開闊的教材,並且難度不大,適合大一、大二剛剛接觸建模的同學閱讀,能為初學者打開學習數學建模的大門。

簡單說說我是如何學習這兩本書的:

我自己學習這兩本書時,每本書讀了三遍。

第一遍,粗略過教材。最開始接觸數模是在大一時候,沒有抱著多麼大的抱負去準備,《數學模型》這本書最開始只是把它當做一本故事書來讀,大概三天左右就瀏覽了一遍,知道了什麼是數學模型——就像一道比較複雜的應用題。在這期間有很多看不懂的地方就跳,基本沒看數學相關的東西,但是在自己腦海中搭建了一個有關建模的框架,受益匪淺。如果本身數學功底不是很好,當初第一次接觸就開始細究一些比較晦澀的概念或公式,可能會讀不下去。

第二遍,精緻過教材。這個時候已經對「什麼是數學建模」這個概念有了模糊的認知,那麼接下來就認認真真的讀課本,一行一行讀。不需要從宏觀角度去看,只要用心理解每一行每個字的意義,上下文的含義,就像在高中讀課本那樣,實在不會或者沒有頭緒的可以跳過去,但是要做好標記,方便以後基礎紮實了再回頭看。這個過程是最費時間的,也可以學習到很多很多新的知識(雖然可能學過一兩天就會忘掉,但是下次拿起他的時候你能很快想到自己之前是怎麼看的怎麼想的這就足矣)。

第三框架構建。這個時候需要我們有一定的宏觀認知能力,要學會做分類,重在思考輕於細節。帶著問題去第三遍讀課本:這個模型是什麼?它能夠解決哪些問題?適用於什麼樣的環境?然後在最後做一次大的梳理,看看自己究竟學到了什麼,哪些地方還是很模糊。

《數學建模演算法與應用》這本書我是在後面才接觸到的,也是很不錯的一本書,值得一看。

此外,在學習建模的過程中多問自己幾個問題。

第一:這個模型是什麼?這個問題對於初學者而言是最難的,很難用系統語言來描述一個模型,但這個過程是必須的,因為你只有把它用自己的話表達出來,才能真正的理解這個模型,在比賽過程中快速與隊友、指導老師交流。提供一個小方法:每看完一章節,給隊友講一講你對這章節內容的看法,你學到了什麼,你覺得什麼有價值,它的創新點在哪裡。如果你能把這一點表達清楚,這一步你就做的非常棒了。

第二:它能夠解決哪些問題。這個問題是最重要的,很多人學完很多資料但是看到題目後還是沒有什麼思路,很可能就是因為這一點。多想、多練、多看、多做總結,經驗是最好的老師。

第三:模型的具體操作步驟怎麼實現?也就是操作層面上的問題,這個模型可以用什麼軟體實現?參數怎麼調?有沒有現成的代碼?每一步的操作是否清楚?要做到什麼程度呢——我們無需記憶模型具體的步驟但是要對它很熟悉,保證在需要用到這個模型時能很快把它融入到自己的題目中。融會貫通是很難的,這個過程里會遇到很多意想不到的、紙上談兵時看不到的困難,具體的操作要受你的系統環境、軟體版本、時間限制等各種方面的現實考驗,沒有什麼捷徑,只有平時多練,多做,才能臨場時最快地找到解決的辦法。

《數學建模演算法與應用》的學習

《數學建模演算法與應用》基本涵蓋了常見的數學建模演算法理論,是學習各類型演算法不可多得的好教材,雖然裡面部分內容和現在國、美賽題目的熱門考點稍有脫節,但是也是學習數模演算法的很好的入門教材了。

在學習《數學建模演算法與應用》這本書時,因為它更偏向於演算法層面,我的建議是先看完《數學模型》後再來讀這本書。走到這一步說明你已經有了一定的基礎,那麼就按照自己的方法來看吧,沒有固定的方法,適合自己的才是最有效率的。

我說下我自己閱讀這本書時候的一些體會:一定要對每個演算法的作用和領域有清晰的認知和判斷。

例如規劃,包括線性規劃、目標規劃、整數規劃、非線性規劃、動態規劃等等。他們的應用範圍不同但總是解決類型相同或者相似的問題的,是最常見的數模問題。

例如優化演算法,能解決問題的特徵是問題要求某些量達到最大或最小,比如銷售量最大化,而且我們可以人為地控制某些變數,比如原材料的投入量。只要是存在可控制的量和要達到最優的目標,這就是一個優化問題。優化問題由很多現代優化演算法,而且往往是和規劃結合在一起,密不可分。

但是話說回來,學數學模型,其實看哪本書都可以,一本書只是一個線索。學到比較深入的地步時候一本書上的內容是不夠用的,往往需要讀者以此為引導去查找相關資料。

學習教材的階段過去後,進入實戰環節。一是看論文,二是模擬賽。

看論文,看往屆優秀的獲獎論文——國賽二等獎及以上,美賽O、F獎。(這裡不推薦看美賽M獎論文是因為M獎中論文質量參差不齊,很大概率會遇到帶有誤導性質的文章,得不償失)。

拿到論文,首先看對應的題目,時間充裕的話不妨自己先去拿著做著試試看,大概一天左右就會遇到瓶頸,發現這道題的難點在哪裡,這時候再去看看別人的論文時如何解決這個問題的,就會有一種恍然大悟的感覺。

看論文一是看思路,而是看行文結構,例如圖表如何做如何數據可視化,文章邏輯如何安排,問題結論如何表示,摘要如何書寫等。

魔鬼藏在細節中,要努力使得論文盡善盡美,更好地表達自己的思想。

模擬賽——數模前最關鍵的環節

重要的事情說三遍,一定要做模擬賽,一定要做模擬賽,一定要做模擬賽。

我身邊斬獲數模大獎的,90%以上都做過一次以上的模擬賽。

嘗試去做往年的真題,如果參加美賽就找美賽原題(英文版),如果參加國賽就找國賽真題。先不要看別人已經完成的,嘗試自己解一下,然後參考一下他們的,看看他們是怎麼從問題中抽出變數、做出假設、結合現實約束列出方程。

可以看一些經典問題建立模型的書籍,按照自己的思路求解一遍,這樣不斷做,接觸各種類型的題,體會其中建立模型的思路。

具體做題的時候,可以根據問題本身的現實(物理)規律建模,也可以套用已有的經典模型,也可以在經典模型的基礎上根據問題適當地改變其中某些變數的表達式,也可以對比兩種演算法建模對問題求解的效果等等。

編程部分

編程,也就是我們口中常說的編程碼代碼,由於我自身專業原因,不是專業寫代碼,但是也學習過不少的編程語言,如c、c++、python等。但是個人認為正常的編程和數學建模中的編程還是具有比較大的區別的。數模中的編程不同於做項目和ACM(國際大學生程序設計競賽),對編程者的敲代碼能力要求其實並不高。實際上,這裡的編程更準確說是對軟體的使用,包括對、MATLAB、Lingo 、Spss的使用,還有別的專業軟體的使用。編程這一塊並非一定是專業碼農,軟體學得比較快就可以。當然 Matlab 和 Lingo 都不是圖形界面,需要命令行輸入,有編程基礎的同學對這一塊兒學起來可能會更加容易上手。此外我認為,會演算法要比會編程更重要(一般而言演算法學得好的編程不會很差)。司守奎的《數學建模演算法與應用》中演算法和代碼講的都很好。

Matlab、lingo、Spss是三款必備的軟體,matlab是很多工科學生的必修課,常用來解決複雜的科學計算,lingo是用來求解(非)線性規劃和目標規劃非常有用的軟體,Spss可以用來解決數據標準化,數據處理等問題。

此外還有一個小技巧——工具箱是個好東西。比如如果想用遺傳演算法計算優化模型結果,可以直接使用遺傳演算法工具箱,而並不需要為了凸顯編程能力自己動手,除非對演算法設計有自己得獨到之處(很多並不要求提供代碼附件)。當然可能在某些地方需要編程,比如用Matlab 做個元胞,寫個優化演算法。但是這部分的編程也都是建立在對已有工具的使用上,而非從底層碼起。總而言之,數模比賽對編程要求能力並不高,能夠做到對程序的模仿運用便已足夠。

有幾點個人學習數模編程的經驗總結:

1、自己的程序文件要整理好,方便查找和修改:

編程過程中經常會出現對程序的修改和測試:有時是因為程序本身存在問題,有時是因為建模方法改變,有時是因為對模型進行了進一步改進,有時是因為要處理的數據發生變化……因此會產生一些不同版本的程序代碼。文件的命名用英文和數字,而且最好形成一種統一的格式,能夠「顧名思義」,方便了解是什麼時候、哪次建模過程中使用的何種模型以及同一模型的哪個版本。

2、代碼要整齊易讀,寫好注釋:

除了方便自己讀和修改,也方便隊友對程序進行了解。需要注釋的地方如:開頭可以寫一下程序的作用、所需數據格式、程序仍存在的問題等;重要的變數假設、Flag、累積量;每個模塊的作用;關鍵的步驟和函數;常常要進行修改調整的語句……變數假設、函數名稱也要易於識別。

3、利用好程序資源,在已有的程序上進行修改可以提高效率:

常用演算法的源程序是很好找的,從代碼網站、博客或者演算法書上總能找到相關的編程案例,自己以前編寫的程序也能拿來用而且用起來更順手,所以不用執著於一定要自己從頭到尾地編代碼。平時多看一些案例,看到好的代碼就收藏起來,分類保存好。

4、函數和工具箱的使用:

軟體中常內置有功能豐富的函數和工具箱。有時我們會發現軟體中意想不到地剛好存在能實現所需功能的函數,因此編程前可以先在網上搜一搜有沒有這樣的函數,沒有的話再自己寫,寫好以後也能存起來以後用。工具箱的使用要看情況。有的演算法不用工具箱實現比較好,用自己寫的代碼更靈活和利於修改,而且對於演算法的原理也更清楚;依賴工具箱而對演算法的解釋不清楚的話可能會讓論文失色,而且工具箱可能不利於大量數據的反覆運算;有時候用工具箱可能更好,主要是對一些演算法原理比較簡單的運算過程可以減少編程、提高效率,而且有時候用工具箱求解出的數據格式或圖表樣式也比自己編程做出來的更整齊好看、看起來更專業。

5、積累程序調試的技巧:

對於自己的程序自己要做到完全把握,清楚來龍去脈,出現問題時快速找出問題所在。以MATLAB為例,利用好Workspace和Debug,對於代碼節點和每個變數的數值變化能清楚了解。程序運行出岔子常常是因為以下一些原因:數據讀取格式不對;變數行列數不匹配;循環出錯,在「有些命令放在循環內還是外?」「從什麼地方開始循環?」「什麼時候停止循環?」「行列式循環時數據怎麼對應?」這樣的地方出問題;調用函數時變數格式不對;運算式寫錯,如括弧丟失;畫圖時數據讀取出錯,如xy搞反。

6、通過編程製作好看的圖表:

用excel能做一些圖表。編程實現雖然麻煩一點,但能做出很多excel不能做的圖。有時候在編程做圖的過程中也會為了使圖表更好看而不斷調試。要熟練掌握一些通過編程畫圖的常用函數,包括二維圖、三維圖。除了折線圖、直方圖、擬合曲線圖等一些常用數據統計圖以外,還有聚類分析圖、樹狀圖、有限元分析圖等一些和具體演算法相關的圖。把代碼積累起來,方便展示數據時使用。推薦幾款繪圖軟體:R、億圖(網站)、Eviews等。

總的來說,編程不是很麻煩的事情,主要就是要熟悉:基本語句,數據格式、調用和輸出,基本運算符號,基本函數,軟體常用視窗和命令。在此基礎上能不斷研究和積累新函數、新演算法。關鍵還是要建好模型,在假設好變數和確定好要用的公式或演算法後,編程就是用代碼語言把它重述的過程,是自然而然的後續工作,是建模和論文的中間過渡且與兩方都有重疊。

寫作

論文寫作是比賽獲獎至關重要的一步,建模和編程都需要論文來表達,能不能把內容思想結論準確的傳達給評委就是寫作的同學需要做的事情。

寫作中要注重兩點。一是要保證論文整體的邏輯性很強,保持前後貫通:論文的各部分的應當是順接或相互照應的關係,而不是毫無關聯的獨立部分。國賽題目會有幾個小問引導論文展開,而美賽則是一個大問題整體,要做到論文脈絡清晰,就要對題目做合理的拆解。二是令人信服,模型結果可以不理想,但是呈現於論文上的一定是有理有據、能夠自圓其說的建模過程與模型結果。除了寫作的這兩點外,論文的排版與插圖也很重要,這兩個是論文中最直觀的。排版大多數推崇用latex,但是latex的弊端就是論文只有一個人可以進行排版,隊友只能圍觀,而word可以隊友一起做。至於是不是latex得獎率更高,wps一樣拿獎。(更推薦三個人都用office同一版進行寫作排版,並且公式採用mathtype)

寫論文一定要要深入理解模型。不要因為自己負責寫論文就把建模和求解的任務全交給隊友來做,造成寫論文者初期很閑、後期趕時間的情況。要儘可能地解放發展生產力,團隊中的每個成員都要有大局觀。

關於寫作,推薦比較好的準備方式是多閱讀優秀論文,學習別人的行文結構,然後寫作的同學一定要記得多學點圖表製作方面的內容,非常重要。

推薦苗楓同學運營的微信公眾號「規學」:知識分享,助力成長。分享有用的數模競賽經驗、數學學習方法、保研升學案例。我們傳播成長互助正能量,為你的學業成長增磚添瓦。該平台由多名博士維護,敬請關注!

贊 賞

長按下方二維碼打賞

感謝您,

支持學生們的原創熱情!

鄭重承諾

打賞是對工作的認可

所有打賞所得

都將作為酬勞支付給辛勤工作的學生

指導老師不取一文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 數據魔術師DM 的精彩文章:

TAG:數據魔術師DM |