數學建模方法-層次分析法


 一、引言

  為了准備9月份的華為杯-數學建模比賽,在這個過程中,博主在網上學習了十種數學建模的方法。並根據自己的理解寫下來。在這一篇章中,要講述的是“層次分析法”。首先在講解“層次分析法”之間,需要講解的一個概念是由Santy提出的“一致矩陣法”。那么什么是“一致矩陣法”呢,大家好好看咯,我們要開始了。。

二、一致矩陣法

  一致矩陣法,聽起來好像很難的樣子,其實不然,實際上就是一種將人們對事物的主觀感覺用數學的形式表達的方法。比如說有三種水果,蘋果、香蕉和芒果。對博主而言,我覺得芒果是我的最愛,香蕉其次,蘋果排最后,那么根據我的喜好程度可以列出芒果>香蕉>蘋果的順序。但是在數學建模中,我們總不能直接這樣講,這樣講沒有數字出現,別人不願意接受。因此,一致矩陣法就是針對這種情況而產生的。好了,接下來是枯燥的內容了,大家要准備好了哦。

  一致矩陣法的核心思想有兩個:

  • 不把所有的因素放在一起比較,而是兩兩互相比較
  • 采用相對尺度,以盡可能減少性質不同的諸因素相互比較的困難,以提高准確度。

  以上兩點是什么意思呢。別急,接下來就要深入淺出的講解了,包你看懂。。

  首先大家要了解一個表,叫成對比較陣標度表,如下圖所示:

成對比較陣標度表
1 表示兩個因素相比,具有同樣重要性
3 表示兩個因素相比,一個因素比另一個因素稍微重要
5 表示兩個因素相比,一個因素比另一個因素明顯重要
7 表示兩個因素相比,一個因素比另一個因素強烈重要
9 表示兩個因素相比,一個因素比另一個因素極端重要
2, 4, 6, 8 上述兩相移判斷的中值
倒數 因素i與j比較的判斷a,則因素j與i比較的判斷aji=1/aij

  這是什么意思呢,簡單講,像我前面說的,我自己覺得好吃程度是芒果 > 香蕉 > 蘋果,那么,根據一致矩陣法,我需要創建一個3×3的矩陣,首先我先假定芒果= C1,香蕉= C2,蘋果= C3,則

  C1 C2 C3
C1 1 3 7
C2 1/3   1
C3 1/7  1/5   1

    上面那個表是什么意思呢,聽我慢慢道來:

    首先我們看第一行,1 3 7 分別表示:

  1:C1跟C1相比,是具有同樣重要(這不是廢話嗎,芒果跟芒果當然一樣好吃啦);

  3:C1跟C2相比,稍微重要(即我覺得芒果比香蕉好吃一些);

  7:C1跟C3相比,強烈重要(即我覺得芒果比蘋果好吃太多了);

  接着看第二行:為什么有一個1/3呢,這是表示:

  C2跟C1相比的值,應該等於C1跟C2相比的倒數(這是規定);

  因此,在根據我們的主觀意識給這個矩陣填好相應的系數后,再根據倒數規則補充剩下的空格。就能完成我們這個一致性矩陣。

  也許大家會講,那這個主觀意識很重要誒。是的沒錯,層次分析法其實就是一種比較主觀的方法。所以,在填入你所需要的標度數時,盡量查閱多一些文獻,這樣結果會更加准確。

  好的,講完層次分析法所需要的基礎知識后,接下來我們要介紹層次分析法的使用了。大家不要跑神哦!

三、層次分析法

  好了,現在我們來講講這個“層次分析法”是什么東東。我先拋出一個官方的定義,再舉例說明。

  官方定義:層次分析法根據問題的性質和要達到的總目標,將問題分解為不同的組成因素,並按照因素間的相互關聯影響以及隸屬關系將因素按不同層次聚集組合,形成一個多層次的分析結構模型,從而最終使問題歸結為最底層(供決策的方案、措施等)相對於最高層(總目標)的相對重要權重的確定或相對優劣次序的排定。其中:

  • 最高層:決策的目的、要解決的問題
  • 最底層:決策時的備選方案
  • 中間層:考慮的因素、決策的准則。

    好了,現在我們來舉例說明究竟這個“層次分析法”是什么以及如何構架一個層次結構模型吧。。

問題:【選擇旅游地】如何在3個目的地按照景色、費用、居住條件等因素進行選擇。

解法:

  1.首先,在這個問題中,我們要解決的問題就是選擇旅游地,不妨設為Z,這就是我們的最高層 = Z;

  2.接着,在題目中,我們旅游地的可選擇只有三個,分別設為B1,B2,B3。這就是我們的最底層;

  3.最后就是我們的中間層,根據定義,中間層就該是景色、費用、居住、飲食、旅途這些條件,分別設為A1,A2,A3,A4,A5

  接下來我們就開始構建層次模型吧。如下圖所示

  大家這時候應該體會到了層次分析法是什么樣的一種方法了吧。如果這時還不明白的請看回官方定義。

  好了,也就是,通過計算出各個層之間的權重,根據權重來得出我們要的結果。

  那么權重該怎么確定呢,大家還記得前面說的一致矩陣法嗎,我們需要通過一致矩陣法寫出成對比較矩陣,然后將成對比較矩陣代入我們的一個matlab的代碼里面,就能算出權重了。

3.1 確定權重

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(w);
%以下是一致性檢驗(暫時不講解這個概念,下次再補充)
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);
end

  只要將成對檢驗理論輸入我們的MATLAB代碼,就能求解出權重。

  就B1對總目標的權重來說,其計算公式應該為O= B1對A1的權重×A1對Z的權重+……+B1對A5的權重×A5對Z的權重(5項)。

  接着我們只要分別也算出B2和B3對總目標的權重O2和O3。最后比較O1O2和O3的大小即可。

  我們假設最后算出的結果是O3  > O1  > O2。那么最后的決策應是去B3。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM