目錄
🔑什么,是數學建模?
🔑新手不知道的小知識
1、建模三條大腿📙
2、建模三大工具📙
3、建模干貨📙
4、集訓日程表📙
🔑建模常見的一些問題
1、預測🎯
2、優化🎯
3、評價🎯
🔑關于第一次比賽后的個人體會
🔑什么,是數學建模?
由于博主只參加過高教社杯全國大學生數學建模競賽(CUMCM),所以下面就重點介紹一下這個比賽,像其他類似的建模比賽還有MCM/ICM美國大學數學建模競賽,華為杯中國研究生數學建模競賽....
1.高教社杯全國大學生數學建模競賽(CUMCM)

該競賽創辦于1992年,每年一屆,是首批列入“高校學科競賽排行榜”的19項競賽之一,2021年,來自全國及美國、馬來西亞等國家的1566所院校/校區、49529隊(本科45075隊、專科4454隊)、14萬多人報名參賽,
報名時間:報名截止時間九月之前,各個高校會統一組織報名,時間大概在七八月份
集訓時間:一般是一整個暑假(因學校安排而異)
比賽時間:9月中旬
含金量:因為納入高校學科競賽排行榜,所以認可度最高,俗稱國賽,
競賽官網:全國大學生數學建模競賽
報名費:300元(一般學校都會給予報銷)

🔑新手不知道的小知識
1、建模三條大腿📙

建模手
建模手主要是找方法選手,外交選手,資料收集與整理選手,敲公式選手,尋找最佳解答問題模型并搭建(前期確定方法需要三個隊友一起決定,因為此時編程還未開始,寫作也不慌動筆)

編程手
編程手主要負責導資料處理資料,寫代碼,解決bug,計算結果,整理結果,繪制圖表,分析資料特征,分析結果,

論文手
論文手,格式規范者(我們當時隊伍里的學姐會用Latex,寫出來的文章格式就非常nice),文章脈絡完善者,邏輯自圓其說者,提出要求者,比賽規則清晰者,細節處理者,
2、建模三大工具📙
lingo(主要用來解決一些規劃問題)

spss(主要用來做一些資料分析)

matlab(別問,問就是什么東西都可以做,除了生孩子)

3、建模干貨📙


劃重點: 博主在此非常感謝清風老師,很多演算法和知識都是從清風老師這兒學的,非常感謝!!!
4、集訓日程表📙


🔑建模常見的一些問題
1、預測🎯


? 這個是博主在收到學校老師邀請參見建模宣講會時做的一個關于預測模型的小結
(希望對大家有幫助)


?博主當時主要學的是BP神經網路預測,并且在最后的國賽C題的第一個小問中也成功應用到了該方法(上圖是我們國賽論文的一部分),最后只能說BPyyds
2、優化🎯

說到優化,說白了就是求一個最值吧,但實際問題中我們很難得到全域最優解,很多情況下只能得到區域最優解,這個時候就不得不提一下那些晦澀難懂的優化演算法了,像什么蟻群演算法,模擬退火演算法,遺傳演算法,粒子群演算法......



%% 粒子群演算法PSO: 求解函式y = 11*sin(x) + 7*cos(5*x)在[-3,3]內的最大值(影片演示)
clear; clc
%% 繪制函式的圖形
x = -3:0.01:3;
y = 11*sin(x) + 7*cos(5*x);
figure(1)
plot(x,y,'b-')
title('y = 11*sin(x) + 7*cos(5*x)')
hold on % 不關閉圖形,繼續在上面畫圖
%% 粒子群演算法中的預設引數(引數的設定不是固定的,可以適當修改)
n = 10; % 粒子數量
narvs = 1; % 變數個數
c1 = 2; % 每個粒子的個體學習因子,也稱為個體加速常數
c2 = 2; % 每個粒子的社會學習因子,也稱為社會加速常數
w = 0.9; % 慣性權重
K = 50; % 迭代的次數
vmax = 1.2; % 粒子的最大速度
x_lb = -3; % x的下界
x_ub = 3; % x的上界
%% 初始化粒子的位置和速度
x = zeros(n,narvs);
for i = 1: narvs
x(:,i) = x_lb(i) + (x_ub(i)-x_lb(i))*rand(n,1); % 隨機初始化粒子所在的位置在定義域內
end
v = -vmax + 2*vmax .* rand(n,narvs); % 隨機初始化粒子的速度(這里我們設定為[-vmax,vmax])
% 注意:這種寫法只支持2017及之后的Matlab,老版本的同學請自己使用repmat函式將向量擴充為矩陣后再運算,
% 即:v = -repmat(vmax, n, 1) + 2*repmat(vmax, n, 1) .* rand(n,narvs);
% 注意:x的初始化也可以用一行寫出來: x = x_lb + (x_ub-x_lb).*rand(n,narvs) ,原理和v的計算一樣
% 老版本同學可以用x = repmat(x_lb, n, 1) + repmat((x_ub-x_lb), n, 1).*rand(n,narvs)
%% 計算適應度
fit = zeros(n,1); % 初始化這n個粒子的適應度全為0
for i = 1:n % 回圈整個粒子群,計算每一個粒子的適應度
fit(i) = Obj_fun1(x(i,:)); % 呼叫Obj_fun1函式來計算適應度(這里寫成x(i,:)主要是為了和以后遇到的多元函式互通)
end
pbest = x; % 初始化這n個粒子迄今為止找到的最佳位置(是一個n*narvs的向量)
ind = find(fit == max(fit), 1); % 找到適應度最大的那個粒子的下標
gbest = x(ind,:); % 定義所有粒子迄今為止找到的最佳位置(是一個1*narvs的向量)
%% 在圖上標上這n個粒子的位置用于演示
h = scatter(x,fit,80,'*r'); % scatter是繪制二維散點圖的函式,80是我設定的散點顯示的大小(這里回傳h是為了得到圖形的句柄,未來我們對其位置進行更新)
%% 迭代K次來更新速度與位置
fitnessbest = ones(K,1); % 初始化每次迭代得到的最佳的適應度
for d = 1:K % 開始迭代,一共迭代K次
for i = 1:n % 依次更新第i個粒子的速度與位置
v(i,:) = w*v(i,:) + c1*rand(1)*(pbest(i,:) - x(i,:)) + c2*rand(1)*(gbest - x(i,:)); % 更新第i個粒子的速度
% 如果粒子的速度超過了最大速度限制,就對其進行調整
for j = 1: narvs
if v(i,j) < -vmax(j)
v(i,j) = -vmax(j);
elseif v(i,j) > vmax(j)
v(i,j) = vmax(j);
end
end
x(i,:) = x(i,:) + v(i,:); % 更新第i個粒子的位置
% 如果粒子的位置超出了定義域,就對其進行調整
for j = 1: narvs
if x(i,j) < x_lb(j)
x(i,j) = x_lb(j);
elseif x(i,j) > x_ub(j)
x(i,j) = x_ub(j);
end
end
fit(i) = Obj_fun1(x(i,:)); % 重新計算第i個粒子的適應度
if fit(i) > Obj_fun1(pbest(i,:)) % 如果第i個粒子的適應度大于這個粒子迄今為止找到的最佳位置對應的適應度
pbest(i,:) = x(i,:); % 那就更新第i個粒子迄今為止找到的最佳位置
end
if fit(i) > Obj_fun1(gbest) % 如果第i個粒子的適應度大于所有的粒子迄今為止找到的最佳位置對應的適應度
gbest = pbest(i,:); % 那就更新所有粒子迄今為止找到的最佳位置
end
end
fitnessbest(d) = Obj_fun1(gbest); % 更新第d次迭代得到的最佳的適應度
pause(0.1) % 暫停0.1s
h.XData = x; % 更新散點圖句柄的x軸的資料(此時粒子的位置在圖上發生了變化)
h.YData = fit; % 更新散點圖句柄的y軸的資料(此時粒子的位置在圖上發生了變化)
end
figure(2)
plot(fitnessbest) % 繪制出每次迭代最佳適應度的變化圖
xlabel('迭代次數');
disp('最佳的位置是:'); disp(gbest)
disp('此時最優值是:'); disp(Obj_fun1(gbest))
3、評價🎯

這個模塊的話說白了跟你們學校的綜測評分機制差不多,不過這個一般參雜主觀性太強,我們一開始學了,但是老師最后說不讓我們用(好像是用了,就會給文章的質量大打折扣),就無語......
劃重點:各位小伙伴在學的時候最好先咨詢一下老師你們賽區的評分規則!
🔑關于第一次比賽后的個人體會
7月1日下午,在結束了大一下學期的期末考試后,開始了為期一個多月的數學建模集訓,本次比賽我們學校一共有15支隊伍參賽,最后的正式比賽的時間為9月9日下午六點至9月12日晚上八點鐘,歷時74小時,
每支隊伍有三個人組成,負責的作業主要有分析問題并建立數學模型、利用matlab等數學編程軟體撰寫代碼跑資料、寫論文等,其中數學建模論文分為論文標題、摘要、問題的重述、模型假設、模型的建立、模型的求解、模型檢驗、模型的分析與評估、參考文獻以及附錄等十個方面,論文的好壞會直接影響最后能否獲獎,
每支隊伍的三個同學可以相互協商分工,我當時主要負責演算法和編程這塊以及輔助分析問題和建立數學模型,暑期的集訓時間非常緊張,需要在有限的時間掌握文獻檢索、演算法學習、分析問題的模型、以及latex的論文撰寫、還有最重要的一點就是隊友之間的磨合,這個在最后比賽的三天起著非常大的作用,所以在尋找隊友的時候要考慮到這一點,我當時的兩個隊友都是通過數學競賽認識的,大家都比較熟,合作起來會比較容易,
集訓期間每天會有老師來上一些課程,每天大約只有五六個小的時間是在上課的,其余時間都是自主學習,并且在集訓期間無特殊情況幾乎不會放假的,這個對參賽選手的意志力具有一定的挑戰性,

當時為了節省時間直接在比賽的教室打地鋪
數學建模比賽需要每一位參賽選手都認真、努力的去完成題目,甚至需要廢寢忘食的精神,比賽期間指導老師會安排比賽場地,我們學校是每個組一個教室,在影像樓的四五樓,關于作息時間的安排是因組而異的,當時我們組為了節約時間,直接帶上草席、被子去比賽場地打地鋪,學累了就躺在被子上睡一會,然后起來接著干,我當時是比賽期間的三個晚上基本上是處于凌晨三點睡六點起的狀態,在嚴重壓縮睡眠時間的同時還要保持白天清醒的作業狀態就需要自己提前準備好“物資”,當時比賽期間我是買了很多咖啡和功能飲料,這些是比賽期間續命的“裝備”,這三天的比賽節奏一定要把控好,因為本科組是ABC三個選題,三選一,每個選題都有三至四個小問,我們當時選的是C題,題目給了一個word檔案里面有四個小問和一個有十多萬組資料的excel表格,

當時跑資料的時候CPU在燃燒
比賽期間盡量在第一天的時候要完成選題和把握題目整體思路的作業,第二天需要完成第一小問,第二小問要基本完成,第三天需要開始題目的收尾作業,第四天需要不斷修改論文,打磨文章,在解決問題的同時,寫論文的同學要緊跟建模和編程的同學,這樣才能把握好比賽的節奏,在最后一天的下午我們基本上寫完了論文,經過一遍又一遍的檢查,修改自己的結題論文,最后提前半個小時交掉了結題論文,

三天的比賽終于結束了!!!
在10月10號的時候結果出來了,老天不負有心哇,最后拿到了獎,對于第一次參賽的我們莫不是一次極大的鼓舞,
最后,我想說的是數模比賽雖然具有一定的難度,需要付出大量的時間和精力去為比賽做準備,但其含金量也是眾所周知,參賽前需要提前了解數模競賽的相關事項再去尋找志同道合的隊友一起參賽,希望有更多的同學加入建模這個大家庭,共同努力、共同學習、共同進步,增進友誼,團結協作,勇于創新,一起為學校貢獻自己的一份力量,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/386675.html
標籤:其他
