1 數學建模的任務分配
(1)數學建模三大塊:建模+編程+寫做
(2)模型講解
• 簡單例子
• 寫做訓練
編程
2 簡介
層次分析法(The analytic hierarchy process 簡稱AHP)建模比賽中最基礎的模型之一,其主要用於解決評價類問題(例如:選擇哪一種方案最好、哪位運動員或者員工表現得更優秀)
AHP的主要特色是經過創建遞階層次結構,把人類的判斷轉化爲若干因素兩兩之間重要度的比較上,從而把難於量化的定性判斷轉化爲可操做的重要度的比較上面。在許多狀況下,決策者能夠直接使用AHP進行決策,極大的提升了決策的有效性、可靠性和可行性,但其本質是一種思惟方式,它把複雜問題分解成多個組成因素,又將這些因素按支配關係分別造成遞階層次結構,經過兩兩比較但方法肯定決策方案相對重要度但總排序。整個過程體現來人類決策思惟的基本特徵,即分解、判斷、綜合,克服來其餘方法迴避決策者主觀判斷的缺點。
微信
3 模型介紹
3.1 評價類問題
高考畢業了,小明選擇去哪一個學校
思考問題的思路以下:
ide
3.2 拿到建模問題
優先在知網(萬方、百度學術、谷歌學術)上搜一下相關文獻
若是沒有找到相關文獻,則和小組成員來場頭腦風暴+在平臺上搜索別人或者專家的見解。
函數
3.3 推薦搜索網站
虫部落-快搜
優先級:
• 谷歌搜索
• 微信搜索
• 知乎搜索
例如本題咱們能夠搜索關鍵字:
旅遊選擇因素、根據什麼因素來選擇旅遊景點、旅遊景點評價指標。
學習
3.4 肯定好指標
3.5 肯定指標權重
(1)採用分而治之的思想
問題:一次性考慮五個指標之間的關係,每每考慮不周
解決方法:兩兩指標進行比較,最終根據兩兩比較的結果進行推算權重。
網站
(2)分而治之的思想
(3)獲得判斷矩陣
(4)再對每一個指標進行填寫判斷矩陣
(5)解決判斷矩陣中不一致現象
• 先介紹一下什麼叫一致矩陣
spa
• 一致矩陣特色:各行和各列成倍數關係
.net
• 一致矩陣的定義
3d
• 一致性檢驗
原理:檢驗咱們構造的矩陣和一致性矩陣是否有太大的差異
code
• 一致性檢驗的步驟
若是一致性檢驗大於0.1,那就須要修正矩陣。
• 兩個小問題
• 計算一致矩陣的權重
(6)計算判斷矩陣的權重
方法一:算術平均化求權重
• 算術平均法求權重的步驟:
• 步驟的數學表示(可放到論文中)
方法二:幾何平均法
方法三:特徵值法求權重
• 將計算結果填入權重表(特徵值法最經常使用)
• 代碼實現求權重矩陣
%層次分析代碼 disp('請輸入判斷矩陣A(n階)'); A=input('A='); 【n,n】=size(A); x=ones(n,100); y=ones(n,100); m=zeros(1,100); m(1)=max(x(:,1)); y(:,1)=x(:,1); x(:,2)=A*y(:,1); m(2)=max(x(:,2)); y(:,2)=x(:,2)/m(2); p=0.0001;i=2;k=abs(m(2)-m(1)); while k>p i=i+1; x(:,i)=A*y(:,i-1); m(i)=max(x(:,i)); y(:,i)=x(:,i)/m(i); k=abs(m(i)-m(i-1)); end a=sum(y(:,i)); w=y(:,i)/a; t=m(i); disp('權向量');disp(w); disp('最大特徵值');disp(t); %如下是一致性檢驗 CI=(t-n)/(n-1);RI=【0 0 0.52 0.89 1.12 1.26 1.36 1.41 1.46 1.49 1.52 1.54 1.56 1.58 1.59】; CR=CI/RI(n); if CR<0.10 disp('此矩陣的一致性能夠接受!'); disp('CI=');disp(CI); disp('CR=');disp(CR); else disp('此矩陣的一致性不能夠接受!'); end
(7)Excel能夠方便計算矩陣權重
F4能夠鎖定單元格,日後拖動計算公式,那鎖定的那個單元格不會變。
4 層次分析法完整建模過程
4.1 第一步-創建層次結構圖
生成層次結構圖方法
方法一:PPT的SmartArt來生成層次結構圖
方法二:專業 畫圖軟件億圖圖示(或processon)
4.2 第二步-構造判斷矩陣
由於評價矩陣有主觀性(能搜資料,參考專家的就參考專家的,沒有也不要亂寫),在論文撰寫時,能夠直接給出權重矩陣。例如別人的優秀論文
4.3 第三步-計算判斷矩陣相對權重
4.4 第四步-計算合成權重排序
5 層次分析法的侷限性
6 模型拓展
(1)層次分析法還適用於最後一層是1對2(這裏的2表示大於1小於方案層全部的方案數量),但不是上面舉例中1對3(3表示方案層中全部方案數量)
(2)還適用於一個準則對應本身的多個方案。
7 代碼實現層次分析法
ccfx_Learn.m
%% 注意:在論文寫做中,應該先對判斷矩陣進行一致性檢驗,而後再計算權重,由於只有判斷矩陣經過了一致性檢驗,其權重纔是有意義的。 %% 在下面的代碼中,咱們先計算了權重,而後再進行了一致性檢驗,這是爲了順應計算過程,事實上在邏輯上是說不過去的。 %% 所以你們本身寫論文中若是用到了層次分析法,必定要先對判斷矩陣進行一致性檢驗。 %% 並且要說明的是,只有非一致矩陣的判斷矩陣才須要進行一致性檢驗。 %% 若是你的判斷矩陣自己就是一個一致矩陣,那麼就沒有必要進行一致性檢驗。 %% 輸入判斷矩陣 clear;clc disp('請輸入判斷矩陣A: ') % A = input('判斷矩陣A=') A =[1 1 4 1/3 3; 1 1 4 1/3 3; 1/4 1/4 1 1/3 1/2; 3 3 3 1 3; 1/3 1/3 2 1/3 1] % matlab矩陣有兩種寫法,能夠直接寫到一行: % [1 1 4 1/3 3;1 1 4 1/3 3;1/4 1/4 1 1/3 1/2;3 3 3 1 3;1/3 1/3 2 1/3 1] % 也能夠寫成多行: [1 1 4 1/3 3; 1 1 4 1/3 3; 1/4 1/4 1 1/3 1/2; 3 3 3 1 3; 1/3 1/3 2 1/3 1] % 兩行之間以分號結尾(最後一行的分號可加可不加),同行元素之間以空格(或者逗號)分開。 %% 方法1:算術平均法求權重 % 第一步:將判斷矩陣按照列歸一化(每個元素除以其所在列的和) Sum_A = sum(A) [n,n] = size(A) % 也能夠寫成n = size(A,1) % 由於咱們的判斷矩陣A是一個方陣,因此這裏的r和c相同,咱們能夠就用同一個字母n表示 SUM_A = repmat(Sum_A,n,1) %repeat matrix的縮寫 % 另一種替代的方法以下: SUM_A = []; for i = 1:n %循環哦,這一行後面不能加冒號(和Python不一樣),這裏表示循環n次 SUM_A = [SUM_A; Sum_A] end clc;A SUM_A Stand_A = A ./ SUM_A % 這裏咱們直接將兩個矩陣對應的元素相除便可 % 第二步:將歸一化的各列相加(按行求和) sum(Stand_A,2) % 第三步:將相加後獲得的向量中每一個元素除以n便可獲得權重向量 disp('算術平均法求權重的結果爲:'); disp(sum(Stand_A,2) / n) % 首先對標準化後的矩陣按照行求和,獲得一個列向量 % 而後再將這個列向量的每一個元素同時除以n便可(注意這裏也能夠用./哦) %% 方法2:幾何平均法求權重 % 第一步:將A的元素按照行相乘獲得一個新的列向量 clc;A Prduct_A = prod(A,2) % prod函數和sum函數相似,一個用於乘,一個用於加 dim = 2 維度是行 % 第二步:將新的向量的每一個份量開n次方 Prduct_n_A = Prduct_A .^ (1/n) % 這裏對每一個元素進行乘方操做,所以要加.號哦。 ^符號表示乘方哦 這裏是開n次方,因此咱們等價求1/n次方 % 第三步:對該列向量進行歸一化便可獲得權重向量 % 將這個列向量中的每個元素除以這一個向量的和便可 disp('幾何平均法求權重的結果爲:'); disp(Prduct_n_A ./ sum(Prduct_n_A)) %% 方法3:特徵值法求權重 % 第一步:求出矩陣A的最大特徵值以及其對應的特徵向量 clc [V,D] = eig(A) %V是特徵向量, D是由特徵值構成的對角矩陣(除了對角線元素外,其他位置元素全爲0) Max_eig = max(max(D)) %也能夠寫成max(D(:))哦~ % 那麼怎麼找到最大特徵值所在的位置了? 須要用到find函數,它能夠用來返回向量或者矩陣中不爲0的元素的位置索引。 % 那麼問題來了,咱們要獲得最大特徵值的位置,就須要將包含全部特徵值的這個對角矩陣D中,不等於最大特徵值的位置全變爲0 % 這時候能夠用到矩陣與常數的大小判斷運算 D == Max_eig [r,c] = find(D == Max_eig , 1) % 找到D中第一個與最大特徵值相等的元素的位置,記錄它的行和列。 % 第二步:對求出的特徵向量進行歸一化便可獲得咱們的權重 V(:,c) disp('特徵值法求權重的結果爲:'); disp( V(:,c) ./ sum(V(:,c)) ) % 咱們先根據上面找到的最大特徵值的列數c找到對應的特徵向量,而後再進行標準化。 %% 計算一致性比例CR clc CI = (Max_eig - n) / (n-1); RI=[0 0 0.52 0.89 1.12 1.26 1.36 1.41 1.46 1.49 1.52 1.54 1.56 1.58 1.59]; %注意哦,這裏的RI最多支持 n = 15 CR=CI/RI(n); disp('一致性指標CI=');disp(CI); disp('一致性比例CR=');disp(CR); if CR<0.10 disp('由於CR < 0.10,因此該判斷矩陣A的一致性能夠接受!'); else disp('注意:CR >= 0.10,所以該判斷矩陣A須要進行修改!'); end % % 注意:代碼文件僅供參考,必定不要直接用於本身的數模論文中 % % 國賽對於論文的查重要求很是嚴格,代碼雷同也算做抄襲 % % 視頻中提到的附件可在售後羣(購買後收到的那個有道雲筆記中有加入方式)的羣文件中下載。包括講義、代碼、優秀的做業、我視頻中推薦的資料等。 % % 關注個人微信公衆號《數學建模學習交流》,後臺發送「軟件」兩個字,可得到常見的建模軟件下載方法;發送「數據」兩個字,可得到建模數據的獲取方法;發送「畫圖」兩個字,可得到數學建模中常見的畫圖方法。另外,也能夠看看公衆號的歷史文章,裏面發佈的都是對你們有幫助的技巧。 % % 購買更多優質精選的數學建模資料,可關注個人微信公衆號《數學建模學習交流》,在後臺發送「買」這個字便可進入店鋪(個人微店地址:https://weidian.com/?userid=1372657210)進行購買。 % % 視頻價格不貴,但價值很高。單人購買觀看只須要58元,三人購買人均僅需46元,視頻自己也是下載到本地觀看的,因此請你們不要侵犯知識產權,對視頻或者資料進行二次銷售。 % % 如何修改代碼避免查重的方法:https://www.bilibili.com/video/av59423231(必看)