【數學建模】1層次分析法模型部分

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(必看)

8 全國大學生數學建模競賽論文模版下載

全國大學生數學建模競賽論文模版下載

相關文章
相關標籤/搜索