學(xué)建模完整工作流:從問(wèn)題到模型的系統(tǒng)性思維與實(shí)踐)
1. 從問(wèn)題到模型數(shù)學(xué)建模的完整工作流很多剛接觸數(shù)學(xué)建模的同學(xué)包括我當(dāng)年也一樣拿到一個(gè)題目第一反應(yīng)往往是“我該用什么模型” 然后一頭扎進(jìn)算法和代碼里結(jié)果要么是模型和問(wèn)題對(duì)不上要么是結(jié)果出來(lái)了卻不知道怎么解釋。這其實(shí)是本末倒置了。數(shù)學(xué)建模的核心從來(lái)不是炫技般地堆砌復(fù)雜算法而是一套嚴(yán)謹(jǐn)?shù)?、將現(xiàn)實(shí)問(wèn)題轉(zhuǎn)化為數(shù)學(xué)語(yǔ)言并求解的系統(tǒng)性思維和工作流程。我參加過(guò)也指導(dǎo)過(guò)不少比賽從校賽、國(guó)賽到美賽、亞太杯看過(guò)太多隊(duì)伍因?yàn)榱鞒袒靵y而折戟。一個(gè)清晰的建模步驟就像是行軍地圖能讓你在有限的時(shí)間內(nèi)始終走在正確的方向上避免在細(xì)節(jié)的泥潭里打轉(zhuǎn)。今天我就結(jié)合自己這些年的實(shí)戰(zhàn)和評(píng)審經(jīng)驗(yàn)掰開(kāi)揉碎了講講一個(gè)完整的數(shù)學(xué)建模項(xiàng)目到底應(yīng)該遵循哪些步驟。這個(gè)過(guò)程無(wú)論是用MATLAB、Python還是任何其他工具其內(nèi)核邏輯都是相通的。簡(jiǎn)單來(lái)說(shuō)數(shù)學(xué)建模就是“用數(shù)學(xué)解決實(shí)際問(wèn)題”的藝術(shù)。它不是為了數(shù)學(xué)而數(shù)學(xué)而是為了回答一個(gè)具體的現(xiàn)實(shí)疑問(wèn)。這個(gè)過(guò)程通??梢苑纸鉃閹讉€(gè)環(huán)環(huán)相扣的階段理解問(wèn)題、作出假設(shè)、建立模型、求解模型、分析結(jié)果、檢驗(yàn)?zāi)P汀⒆罱K形成報(bào)告。每一個(gè)階段都有其獨(dú)特的任務(wù)和常見(jiàn)的“坑”。下面我們就一步步來(lái)拆解。2. 第一步問(wèn)題的剖析與重述——搞清楚你到底要解決什么這是所有步驟中最關(guān)鍵也最容易被輕視的一步。題目擺在那里但“題目在問(wèn)什么”和“我們需要解決什么”之間往往隔著一道鴻溝。這一步的目標(biāo)是把一個(gè)可能模糊、寬泛的實(shí)際問(wèn)題轉(zhuǎn)化成一個(gè)清晰、明確、可操作的數(shù)學(xué)問(wèn)題。2.1 深度閱讀與信息提取首先逐字逐句地閱讀題目。我習(xí)慣用筆劃出所有關(guān)鍵詞名詞對(duì)象、實(shí)體、動(dòng)詞動(dòng)作、目標(biāo)、形容詞和副詞條件、限制。比如“預(yù)測(cè)未來(lái)24小時(shí)某城市的用電負(fù)荷”關(guān)鍵詞就是“預(yù)測(cè)”動(dòng)作、“未來(lái)24小時(shí)”時(shí)間范圍、“某城市”空間范圍、“用電負(fù)荷”目標(biāo)變量。其次區(qū)分問(wèn)題的已知條件和待求目標(biāo)。已知條件包括給出的數(shù)據(jù)表格、圖表、文字描述的背景信息、隱含的物理或經(jīng)濟(jì)規(guī)律。待求目標(biāo)就是題目最后那幾個(gè)問(wèn)號(hào)要非常明確是求一個(gè)數(shù)值一個(gè)函數(shù)關(guān)系一個(gè)最優(yōu)方案還是一個(gè)“是/否”的判斷2.2 問(wèn)題重述與邊界界定用自己的話把問(wèn)題重新描述一遍。這個(gè)過(guò)程能暴露出你是否真正理解了問(wèn)題。例如原題可能是“優(yōu)化物流配送路線”你的重述可以是“在已知倉(cāng)庫(kù)位置、客戶點(diǎn)位置、貨物需求量、車(chē)輛載重和行駛速度約束下尋找一條總行駛距離最短的車(chē)輛訪問(wèn)所有客戶的路徑并滿足每個(gè)客戶的需求。”同時(shí)必須界定問(wèn)題的邊界?,F(xiàn)實(shí)世界是無(wú)限復(fù)雜的模型必須有所取舍。你要明確哪些因素是我們必須考慮的核心變量哪些是次要的、可以簡(jiǎn)化或忽略的例如假設(shè)天氣始終晴朗忽略交通擁堵的隨機(jī)性哪些是完全不在本次考慮范圍內(nèi)的例如不考慮司機(jī)的吃飯休息時(shí)間清晰的邊界是后續(xù)合理假設(shè)的基礎(chǔ)。注意很多隊(duì)伍在這里會(huì)犯兩個(gè)錯(cuò)誤。一是“想當(dāng)然”把自己臆想的內(nèi)容當(dāng)成題目條件二是“過(guò)度發(fā)散”想把所有相關(guān)因素都塞進(jìn)模型導(dǎo)致問(wèn)題過(guò)于復(fù)雜無(wú)法求解。記住好的模型是“簡(jiǎn)單而有效”的不是“復(fù)雜而全面”的。3. 第二步合理假設(shè)的藝術(shù)——在理想與現(xiàn)實(shí)間架橋在明確了要解決什么問(wèn)題之后我們不可能把現(xiàn)實(shí)世界原封不動(dòng)地搬進(jìn)計(jì)算機(jī)。這時(shí)就需要合理的假設(shè)來(lái)簡(jiǎn)化問(wèn)題搭建起從現(xiàn)實(shí)通向數(shù)學(xué)模型的橋梁。假設(shè)不是胡猜而是基于對(duì)問(wèn)題本質(zhì)的理解和簡(jiǎn)化需求作出的、有依據(jù)的聲明。3.1 假設(shè)的分類(lèi)與提出原則假設(shè)通常分為幾類(lèi)簡(jiǎn)化性假設(shè)為了降低問(wèn)題復(fù)雜度。例如“假設(shè)所有客戶點(diǎn)在同一平面上”忽略地形起伏“假設(shè)需求是確定性的”忽略隨機(jī)波動(dòng)。界定性假設(shè)明確模型的使用范圍。例如“本模型僅適用于短期預(yù)測(cè)7天”“假設(shè)市場(chǎng)價(jià)格在預(yù)測(cè)期內(nèi)保持穩(wěn)定”。模型性假設(shè)為選用特定數(shù)學(xué)模型鋪路。例如“假設(shè)人口增長(zhǎng)服從指數(shù)規(guī)律”“假設(shè)系統(tǒng)滿足馬爾可夫性未來(lái)狀態(tài)只與當(dāng)前狀態(tài)有關(guān)”。提出假設(shè)的核心原則是合理性與必要性。每一個(gè)假設(shè)都應(yīng)該有理由為什么可以這樣簡(jiǎn)化并且是為了讓模型變得可處理而必須存在的。要避免“為了假設(shè)而假設(shè)”。3.2 如何評(píng)估假設(shè)的好壞一個(gè)優(yōu)秀的假設(shè)應(yīng)該具備以下特點(diǎn)清晰無(wú)歧義可以用一句明確的話表述出來(lái)。適度簡(jiǎn)化既能大幅降低問(wèn)題難度又不至于過(guò)度扭曲現(xiàn)實(shí)導(dǎo)致模型結(jié)果完全失真。例如預(yù)測(cè)城市交通流量時(shí)忽略步行和自行車(chē)是合理的簡(jiǎn)化但忽略私家車(chē)和公交車(chē)這個(gè)簡(jiǎn)化就過(guò)度了??蓹z驗(yàn)性至少理論上在模型完成后我們可以討論如果放松這個(gè)假設(shè)結(jié)果會(huì)如何變化。這為模型的改進(jìn)和靈敏度分析留下了空間。在論文或報(bào)告中假設(shè)應(yīng)該單獨(dú)列為一節(jié)清晰羅列。這體現(xiàn)了建模者思維的嚴(yán)謹(jǐn)性。4. 第三步模型的構(gòu)建與求解——選擇武器并開(kāi)火這是技術(shù)核心環(huán)節(jié)但必須在前兩步扎實(shí)的基礎(chǔ)上進(jìn)行。這一步分為模型構(gòu)建和模型求解兩個(gè)子階段。4.1 模型構(gòu)建從變量到方程首先定義變量和參數(shù)。決策變量模型中你可以控制或優(yōu)化的量。例如配送路徑模型中哪個(gè)客戶點(diǎn)何時(shí)被哪輛車(chē)訪問(wèn)。狀態(tài)變量描述系統(tǒng)狀態(tài)的量。例如流行病模型中每天的健康者、感染者、康復(fù)者人數(shù)。輸入?yún)?shù)已知的常量或外部輸入。例如距離矩陣、成本系數(shù)、初始感染人數(shù)。輸出變量/目標(biāo)函數(shù)你想要得到的結(jié)果或優(yōu)化的目標(biāo)。例如總成本、總時(shí)間、預(yù)測(cè)值。其次建立數(shù)學(xué)關(guān)系。用等式或不等式來(lái)描述變量之間的約束條件以及目標(biāo)函數(shù)如何由變量構(gòu)成。這可能涉及到微分/差分方程用于描述動(dòng)態(tài)變化人口增長(zhǎng)、疾病傳播、熱傳導(dǎo)。代數(shù)方程/方程組用于描述靜態(tài)平衡或關(guān)聯(lián)關(guān)系。優(yōu)化模型線性規(guī)劃、整數(shù)規(guī)劃、非線性規(guī)劃等在約束條件下尋找最優(yōu)解。概率統(tǒng)計(jì)模型回歸、時(shí)間序列、機(jī)器學(xué)習(xí)等用于從數(shù)據(jù)中發(fā)現(xiàn)規(guī)律并進(jìn)行預(yù)測(cè)。模型選擇沒(méi)有銀彈。一個(gè)預(yù)測(cè)問(wèn)題既可以用線性回歸也可以用時(shí)間序列ARIMA還可以用神經(jīng)網(wǎng)絡(luò)。選擇依據(jù)包括數(shù)據(jù)特征量、質(zhì)量、線性與否、問(wèn)題對(duì)可解釋性的要求、你對(duì)不同方法的熟悉程度以及時(shí)間成本。在數(shù)模競(jìng)賽中簡(jiǎn)單有效的模型往往比復(fù)雜黑箱模型得分更高因?yàn)榍罢吒菀妆焕斫夂万?yàn)證。4.2 模型求解將數(shù)學(xué)翻譯成代碼模型建立后就需要尋找求解方法。對(duì)于MATLAB用戶來(lái)說(shuō)這一步就是選擇合適的工具箱或自己編寫(xiě)算法。方程求根/求解方程組fsolve,vpasolve常微分方程ode45,ode15s(針對(duì)剛性問(wèn)題)優(yōu)化問(wèn)題線性/整數(shù)規(guī)劃linprog,intlinprog非線性規(guī)劃fmincon,fminunc,fminsearch無(wú)約束全局優(yōu)化GlobalSearch,particleswarm(需全局優(yōu)化工具箱)統(tǒng)計(jì)分析回歸fitlm,regress時(shí)間序列arima,estimate(需計(jì)量經(jīng)濟(jì)學(xué)工具箱)假設(shè)檢驗(yàn)ttest,ttest2,anova1這里插一個(gè)熱詞點(diǎn)ttest和ttest2的區(qū)別是初學(xué)者常問(wèn)的。ttest用于單樣本或配對(duì)樣本T檢驗(yàn)比如檢驗(yàn)一組數(shù)據(jù)的均值是否等于某個(gè)理論值或者同一組人訓(xùn)練前后的成績(jī)是否有差異數(shù)據(jù)成對(duì)。ttest2用于獨(dú)立雙樣本T檢驗(yàn)比如檢驗(yàn)?zāi)猩M和女生組的平均身高是否有顯著差異兩組數(shù)據(jù)獨(dú)立。用錯(cuò)會(huì)導(dǎo)致結(jié)論錯(cuò)誤。圖論與網(wǎng)絡(luò)graph,shortestpath,maxflow(需圖與網(wǎng)絡(luò)算法工具箱)機(jī)器學(xué)習(xí)fitcsvm,fitctree,trainNetwork(需統(tǒng)計(jì)與機(jī)器學(xué)習(xí)/深度學(xué)習(xí)工具箱)求解的關(guān)鍵不僅是調(diào)用函數(shù)更是理解函數(shù)的輸入輸出和算法原理。你需要清楚我的模型對(duì)應(yīng)哪種數(shù)學(xué)形式這個(gè)求解器需要我提供什么目標(biāo)函數(shù)、梯度、約束矩陣它返回的結(jié)果是什么含義求解失敗時(shí)可能是什么原因初始值不好、約束沖突、問(wèn)題非凸實(shí)操心得在動(dòng)手編程前先用筆在紙上把算法流程畫(huà)一畫(huà)哪怕只是偽代碼。這能幫你理清邏輯避免在調(diào)試時(shí)陷入混亂。另外對(duì)于優(yōu)化問(wèn)題好的初始值至關(guān)重要一個(gè)糟糕的初值可能讓求解器收斂到局部最優(yōu)甚至失敗??梢試L試多組隨機(jī)初值或者先用啟發(fā)式算法如粒子群找一個(gè)大致的解再用局部搜索算法如fmincon精細(xì)優(yōu)化。5. 第四步結(jié)果分析與模型檢驗(yàn)——你的答案靠譜嗎模型跑出結(jié)果絕不是終點(diǎn)而是另一個(gè)起點(diǎn)。一個(gè)不經(jīng)分析和檢驗(yàn)的結(jié)果是毫無(wú)價(jià)值的。這一步是區(qū)分“會(huì)編程”和“會(huì)建?!钡年P(guān)鍵。5.1 結(jié)果分析與解釋首先直觀呈現(xiàn)結(jié)果。用MATLAB繪制清晰的圖表折線圖、柱狀圖、散點(diǎn)圖、三維曲面、地理熱力圖等。一圖勝千言好的可視化能讓你和評(píng)委第一時(shí)間抓住核心結(jié)論。其次解釋結(jié)果的現(xiàn)實(shí)意義。不要只說(shuō)“解得x10.5”。要說(shuō)“模型預(yù)測(cè)明年的人口增長(zhǎng)率為10.5%這意味著在現(xiàn)有政策下人口壓力將繼續(xù)增大?!?將數(shù)學(xué)結(jié)果翻譯回現(xiàn)實(shí)語(yǔ)言并討論其含義和可能的影響。5.2 模型檢驗(yàn)與誤差分析這是模型的“試金石”。主要方法包括靈敏度分析改變模型中的關(guān)鍵參數(shù)比如假設(shè)中的增長(zhǎng)率、成本系數(shù)觀察結(jié)果的變化程度。如果結(jié)果對(duì)某個(gè)參數(shù)極其敏感說(shuō)明你的結(jié)論依賴于該參數(shù)的精確性需要謹(jǐn)慎對(duì)待或者提示決策者必須更準(zhǔn)確地估計(jì)該參數(shù)。在MATLAB中這通常通過(guò)循環(huán)或參數(shù)掃描來(lái)實(shí)現(xiàn)。誤差分析如果你的模型有預(yù)測(cè)功能并且有部分真實(shí)數(shù)據(jù)可用于驗(yàn)證那么計(jì)算誤差指標(biāo)均方誤差MSE、平均絕對(duì)誤差MAE、平均絕對(duì)百分比誤差MAPE是必須的。分析誤差的來(lái)源是模型結(jié)構(gòu)缺陷還是數(shù)據(jù)噪聲或者是某些未考慮的因素突然介入穩(wěn)定性與魯棒性測(cè)試給輸入數(shù)據(jù)加入一些小的擾動(dòng)噪聲看輸出結(jié)果是否會(huì)發(fā)生劇烈變化。一個(gè)穩(wěn)健的模型應(yīng)該對(duì)小的數(shù)據(jù)波動(dòng)不敏感。與常識(shí)或簡(jiǎn)單模型對(duì)比將你的復(fù)雜模型結(jié)果與一個(gè)基于常識(shí)的簡(jiǎn)單估計(jì)或一個(gè)經(jīng)典簡(jiǎn)單模型的結(jié)果進(jìn)行對(duì)比。如果你的復(fù)雜模型結(jié)果反常識(shí)并且誤差沒(méi)有顯著優(yōu)于簡(jiǎn)單模型那你可能需要反思復(fù)雜模型的價(jià)值。5.3 模型評(píng)價(jià)與改進(jìn)方向基于以上分析客觀地評(píng)價(jià)你的模型優(yōu)點(diǎn)哪些地方做得好例如擬合精度高、計(jì)算速度快、物理意義清晰缺點(diǎn)與局限性模型在哪些情況下可能失效例如假設(shè)不成立時(shí)、數(shù)據(jù)極端時(shí)哪些因素被忽略了改進(jìn)方向如果時(shí)間/資源允許下一步可以怎么優(yōu)化模型例如引入更復(fù)雜的隨機(jī)過(guò)程、考慮空間異質(zhì)性、融合更多數(shù)據(jù)源坦誠(chéng)地指出自己模型的不足并提出改進(jìn)思路這非但不會(huì)扣分反而會(huì)體現(xiàn)你思維的全面性和批判性。6. 第五步從求解器到報(bào)告——完成最后一公里數(shù)學(xué)建模的成果最終要凝結(jié)成一份報(bào)告論文。模型再精彩如果表達(dá)不清也難獲認(rèn)可。寫(xiě)作是將你的思維過(guò)程外化、邏輯化的過(guò)程。6.1 報(bào)告的核心結(jié)構(gòu)一份標(biāo)準(zhǔn)的數(shù)模論文通常包括摘要重中之重用一段話濃縮整個(gè)工作針對(duì)什么問(wèn)題、用了什么方法、建立了什么模型、得到了什么核心結(jié)論、有什么特色與價(jià)值。評(píng)委往往先看摘要摘要不行后面可能就不細(xì)看了。要獨(dú)立成段邏輯連貫避免出現(xiàn)公式和圖表引用。問(wèn)題重述用自己的語(yǔ)言清晰描述問(wèn)題必要時(shí)可拆分子問(wèn)題。模型假設(shè)與符號(hào)說(shuō)明列出所有重要假設(shè)并用表格清晰定義文中用到的主要符號(hào)。模型的建立與求解這是主體。詳細(xì)闡述建模思路、模型公式、求解方法包括用到的算法和軟件工具如MATLAB??梢詫⒛P屯茖?dǎo)和求解步驟分開(kāi)。結(jié)果分析與檢驗(yàn)展示結(jié)果圖表進(jìn)行分析解釋匯報(bào)靈敏度分析、誤差分析等檢驗(yàn)結(jié)果。模型的評(píng)價(jià)與推廣總結(jié)模型優(yōu)缺點(diǎn)討論其適用性和可能的改進(jìn)方向。參考文獻(xiàn)規(guī)范引用。附錄可以放置核心的、篇幅較長(zhǎng)的程序代碼如MATLAB主腳本、大型數(shù)據(jù)表格或中間結(jié)果。6.2 寫(xiě)作與呈現(xiàn)技巧邏輯至上報(bào)告的行文順序應(yīng)基本遵循建模步驟讓讀者能輕松跟上你的思路。圖文并茂在正文中適時(shí)插入精心設(shè)計(jì)的圖表并對(duì)圖表進(jìn)行充分的說(shuō)明“如圖1所示我們可以觀察到...”不要扔一張圖在那里就不管了。代碼處理正文中只展示最關(guān)鍵的一兩行代碼或算法流程圖完整代碼放附錄。在正文中描述你“如何做”而不是簡(jiǎn)單貼代碼。語(yǔ)言嚴(yán)謹(jǐn)使用客觀、準(zhǔn)確的學(xué)術(shù)語(yǔ)言避免口語(yǔ)化和絕對(duì)化的表述如“我們的模型是最好的”。多用“表明”、“建議”、“可能”少用“證明”、“必須”、“一定”。最后我想分享一點(diǎn)個(gè)人體會(huì)數(shù)學(xué)建模的這幾個(gè)步驟看似線性實(shí)則是一個(gè)螺旋式迭代的過(guò)程。在模型求解時(shí)你可能會(huì)發(fā)現(xiàn)假設(shè)不合理需要返回去修改在結(jié)果分析時(shí)你可能發(fā)現(xiàn)模型有缺陷需要重新調(diào)整模型結(jié)構(gòu)。這是一個(gè)不斷反饋、不斷優(yōu)化的過(guò)程。不要把步驟當(dāng)成僵化的教條而應(yīng)視為一個(gè)保證你工作不跑偏的思維框架。真正的建模高手是在這個(gè)框架內(nèi)靈活穿梭最終交付一個(gè)既簡(jiǎn)潔優(yōu)美又直擊問(wèn)題要害的解決方案。帶著這個(gè)框架去審視那些優(yōu)秀論文你會(huì)發(fā)現(xiàn)他們的成功都是有跡可循的。