鄭石軍 陳傳軍
(煙臺大學數(shù)學與信息科學科院 山東·煙臺 264005)
縱觀智能技術(shù)發(fā)展的歷程也是編程技術(shù)進步的歷程,從基本的面向過程語言C到C++以及后來的Java,還有近幾年十分流行的Python。每一次編程語言的進步都需要大量的編程技術(shù)人員對基本程序庫和中間件進行開發(fā)和維護,同時社會也會隨著新技術(shù)的興起將新產(chǎn)品投放到各行各業(yè),這也需要大量的優(yōu)秀的編程技術(shù)人員。當代大學生是編程技術(shù)人員主要生力軍和新鮮血液,因此提高大學生的編程能力,擁有計算機思維解決問題的能力對社會的發(fā)展有著極其重要的意義。
數(shù)學類專業(yè)是各個高校的傳統(tǒng)專業(yè),也是基礎類專業(yè),主要培養(yǎng)學生具備基本的數(shù)學理論和數(shù)學分析問題的方法,在學習的過程中思維能力得到了比較系統(tǒng)的訓練,能夠運用建立數(shù)學模型的思想處理現(xiàn)實中的一些實際問題。雖然學校為學提供了完善的培養(yǎng)課程和優(yōu)越的客觀環(huán)境,但是仍存在知識基礎薄弱,業(yè)務能力不強,存在“似乎什么都懂,什么都不懂”的現(xiàn)象。面對實際問題時不能靈活運用,甚至出現(xiàn)生搬硬套現(xiàn)象。
培養(yǎng)具備基本專業(yè)數(shù)學素養(yǎng)和數(shù)學思維能力是數(shù)學類專業(yè)的培養(yǎng)目標,因此數(shù)學類專業(yè)學生關于計算機方面基礎內(nèi)容的學習就會少很多,而計算機類的一些課程就比較弱,特別是編程能力。計算機編程實踐具有數(shù)量少、深度小、層次低、接觸面窄、時間短的特點。平時編程環(huán)境也不如計算機專業(yè)學生濃厚,無形之中學到的知識少很多。
計算機思維是人們運用計算機的基礎知識將人的思維或者想法轉(zhuǎn)化成計算機能夠識別并執(zhí)行程序過程的一系列思維活動。計算機思維本質(zhì)內(nèi)容是抽象和自動化。計算機思維是以一種計算機可識別的方式將一個龐雜的任務進行抽象、分解或相關方面的建模,在不確定情況下的規(guī)劃、調(diào)度、學習來解決問題的思維和意識。計算機解決問題的過程可描述為:問題定義及抽象化、抽象出問題的邏輯模型、算法設計、編程及運行。擁有計算機思維是一個長期積累的過程,它需要長時間的知識積累和實踐并不斷的領悟,因此數(shù)學類學生本身計算知識薄弱,計算機思維能力也必然會受其所累,是學生的一個短板。
建立在數(shù)學建?;A之上的全國大學生數(shù)學建模競賽創(chuàng)辦于1992年,第一屆是由中國工業(yè)與應用數(shù)學學會組織的全國數(shù)學模型聯(lián)賽,全國來自十多個省市的三百多個代表隊參賽。1994年中國教育部高等教育司決定與中國工業(yè)與應用數(shù)學學會共同舉辦全國大學生數(shù)學建模競賽,每年九月舉行。美國大學生數(shù)學建模競賽簡稱MCM始于1985年,由美國數(shù)學及其聯(lián)合會(COMAP)主辦,在世界范圍內(nèi)最具影響力的建模比賽,賽題涉及物理、經(jīng)濟、資源、社會等領域。另外還有由深圳市科學技術(shù)協(xié)會和中國工業(yè)與應用數(shù)學學會共同主辦的“深圳杯”挑戰(zhàn)賽,由江蘇省工業(yè)與應用數(shù)學學會和中國礦業(yè)大學舉辦的“五一數(shù)學建模競賽”等。競賽題目貼近日常生活,語言通俗易懂,主要來源于工程技術(shù)、日常生活、社會經(jīng)濟等領域,經(jīng)過簡單的加工凝練而成。競賽題目以通訊形式進行,參賽學生自由組隊,每隊三人,隊員可以相互討論自由搜集材料使用工具包括計算機軟件網(wǎng)絡等資源,但每個小隊只能內(nèi)部討論,不能與小隊外的人員傳遞任何信息,也不能與指導老師討論競賽試題。競賽結(jié)束之前,每個小隊需要提交一篇解決問題的論文和支撐論文的實驗數(shù)據(jù)等材料。競賽結(jié)果以模型假設的合理性、模型建立創(chuàng)新性、實驗結(jié)果合理性、文字表述清楚明白等為主要標準來確定獲獎論文及獲獎論文的等級。數(shù)學建模競賽是大學生難得的一次運用理論知識處理現(xiàn)實生活問題的練兵。
在數(shù)學建模競賽中,學生直接面對現(xiàn)實生活中的實際問題,充分調(diào)動學生的知識運用能力,知識轉(zhuǎn)化能力,運用以前掌握的數(shù)學知識、計算機知識及其它相關知識分析問題,排除影響較小的影響因素抓住主要問題,形成可行的解決問題的基本架構(gòu)和邏輯。
建模競賽試題緊密結(jié)合社會上的熱點問題,例如2020年美國大學生數(shù)學建模競賽C題是關于線上購物的問題,要求學生根據(jù)提供的數(shù)據(jù)為即將上線的產(chǎn)品提供銷售預測和建設性的意見。認真讀完試題內(nèi)容以后,對題目提供的數(shù)據(jù)文件進行初步分析。明確問題的條件和完成的任務,捕捉材料里的關鍵信息,例如C題中數(shù)據(jù)量太小,每個數(shù)據(jù)文件里只有幾百條數(shù)據(jù),數(shù)據(jù)量不足,不能用基于DNN、RNN等的深度學習模型,深度學習不能解決實際問題。另一個關鍵內(nèi)容是“review text”,題目也有要求分析review和rating的關系,但這僅僅是一個常規(guī)的NLP任務,完全沒有到需要詞向量嵌入再訓練一個大模型的地步。學生可以直接調(diào)用Python工具包,先對文本分詞,再用情感詞典計算情感得分。如果仍要用深度學習而且有配置相應的環(huán)境工具,那么應盡可能去引用一個訓練好的情感分類網(wǎng)絡來預測情感得分。如上所述在對問題分析的過程中,解決問題的思路也變得逐漸清晰,要使用的方法也逐漸明朗。分析問題的過程也是問題抽象的過程,它包括解決思路抽象分析和可行性方法的抽象分析。
在建模競賽中,問題分析的過程也是程序分析的過程,兩者互為依托,相輔相成統(tǒng)一于模型構(gòu)建。
近些年建模競賽試題越來越貼近生活,涉及到的知識點比較多,求解過程也相對復雜,這些情況使得求解方式變得非常靈活,最終答案不唯一。如何在固定的一段時間內(nèi)解出答案,并盡可能的完善,是競賽學生面臨的一個重要問題。建模競賽基于實際問題的小組討論方式,能夠快速擴展學生的設計代碼的知識面。小組成員相互比較熟悉,知識層次處于同一水平,針對具體問題能夠比較自由的表達個人觀點和想法,這使得小組成員的知識點能夠迅速的做到知識互補。由于平時編程訓練有限,知識面相對狹窄,面對實際問題編程時,往往出現(xiàn)代碼設計停滯不前,浪費時間,建模競賽的這種小組成員合作模式很好的彌補這個缺點。
數(shù)學建模競賽的程序架構(gòu)相對簡單一些,但程序各個組件聯(lián)系緊密,程序架構(gòu)完整,由于沒有達到軟件的規(guī)模,姑且稱之為程序架構(gòu)。簡單地說,程序架構(gòu)是要完成一定功能的程序草圖,程序架構(gòu)提供了一個結(jié)構(gòu)、行為和屬性的抽象。一般地,數(shù)學建模競賽的程序架構(gòu)可以用三層模式表述,如圖1建模程序架構(gòu)圖。
圖1:建模程序架構(gòu)圖
根據(jù)具體問題的條件,程序架構(gòu)的工作特點略有不同,但核心工作都集中在邏輯層。歷年建模競賽的問題有的輸入數(shù)據(jù)量大,數(shù)據(jù)層的工作復雜一些,例如2012年A題葡萄酒評價;有的中間計算數(shù)據(jù)量大,對計算產(chǎn)生的數(shù)據(jù)有一個重新組織梳理的過程,例如2019年A題高壓油管壓力控制;有的開放性強,數(shù)據(jù)可靠性要求高,例如2015年B題出租車資源配置。學生在解決這些問題的時候加深了程序架構(gòu)的理解,初步掌握了程序的運行模式,對軟件的架構(gòu)設計有了一定的了解。