數學建模:層次分析法實例以及代碼

博主聯系方式:
QQ:1540984562
QQ交流群:892023501
群里會有往屆的smarters和電賽選手,群里也會不時分享一些有用的資料,有問題可以在群里多問問。

目錄

  • 層次分析法的思想
  • 層次分析法步驟
  • 具體案例(市政工程項目建設決策)
    • 1.問題提出
    • 2.建立遞階層次結構
    • 3.構造判斷矩陣(成對比較陣)并賦值
    • 4.層次單排序(計算權向量)與檢驗(一致性檢驗)
      • 計算權向量
      • 一致性檢驗
    • 5.層次總排序(組合權向量)與檢驗(一致性檢驗)
    • 6.結果分析
    • 7.層次分析法的優缺點
  • 層次分析法的代碼實現(matlab)

層次分析法的思想

層次分析法的思想:將所有要分析的問題層次化
根據問題的性質和所要到達的總目標,將問題分為不同的組成因素,并按照這些因素間的關聯影響即其隸屬關系,將因素按不同層次聚集組合,形成一個多層次分析結構模型
最后,對問題進行優劣比較排序.

層次分析法步驟

1、找準各因素之間的隸屬度關系,建立遞階層次結構
2、構造判斷矩陣,并賦值
3、層次單排序(計算權向量)與檢驗(一致性檢驗)
4、層次總排序(組合權向量)與檢驗(一致性檢驗)
5、結果分析

具體案例(市政工程項目建設決策)

1.問題提出

市政部門管理人員需要對修建一項市政工程項目進行決策,可選擇的方案是修建通往旅游區的高速路(簡稱建高速路)或修建城區地鐵(簡稱建地鐵)。除了考慮經濟效益外,還要考慮社會效益環境效益等因素,即是多準則決策問題,考慮運用層次分析法解決。

2.建立遞階層次結構

1、明確決策目標:“合理建設市政工程,使綜合效益最高”。

2、為了實現這一目標,需要考慮的主要準則有三個,即經濟效益社會效益環境效益
還必須考慮直接經濟效益間接經濟效益方便日常出行方便假日出行減少環境污染改善城市面貌等因素(準則),從相互關系上分析,這些因素隸屬于主要準則,因此放在下一層次考慮,并且分屬于不同準則。

3、解決方案,即建高速路或建地鐵,這兩個因素作為措施層元素放在遞階層次結構的最下層。

這樣遞階層次就形成了:
在這里插入圖片描述

3.構造判斷矩陣(成對比較陣)并賦值

1、構造判斷矩陣的方法:
每一個具有向下隸屬關系的元素(被稱作準則)作為判斷矩陣的第一個元素(位于左上角),隸屬于它的各個元素依次排列在其后的第一行第一列
如下圖所示:
在這里插入圖片描述
2、如何對判斷矩陣進行賦值:
向填寫人(專家)反復詢問:針對判斷矩陣的準則,其中兩個元素兩兩比較哪個重要,重要多少,對重要性程度按1-9賦值。
(可以類比模糊PID中的隸屬程度,都是人為設定的,也是被人詬病的一個地方)
在這里插入圖片描述
設填寫后的判斷矩陣為A=(aij)n×n,判斷矩陣具有如下性質:

(1) aij>0
(2) aji=1/ aji
(3) aii=1

判斷矩陣具有對稱性,因此在填寫時,通常先填寫aii=1部分,然后再僅需判斷及填寫上三角形或下三角形的n(n-1)/2個元素就可以了。
在特殊情況下,判斷矩陣可以具有傳遞性,即滿足等式:aij*ajk=aik .
當上式對判斷矩陣所有元素都成立時,則稱該判斷矩陣為一致性矩陣。
對于上述的例子,可以構造出下面的判斷矩陣:
在這里插入圖片描述

4.層次單排序(計算權向量)與檢驗(一致性檢驗)

計算權向量

對于專家填寫后的判斷矩陣,利用一定數學方法進行層次排序。
層次單排序是指每一個判斷矩陣各因素針對其準則的相對權重,所以本質上是計算權向量。
這里簡要介紹和法:
對于一致性判斷矩陣,每一列歸一化后就是相應的權重。
對于非一致性判斷矩陣,每一列歸一化后近似其相應的權重,在對這n個列向量求取算術平均值作為最后的權重。

公式: 在這里插入圖片描述
在層層排序中,要對判斷矩陣進行一致性檢驗。判斷矩陣可以具有傳遞性和一致性。一般情況下,并不要求判斷矩陣嚴格滿足這一性質。

但從人類認識規律看,一個正確的判斷矩陣重要性排序是有一定邏輯規律的,例如若A比B重要,B又比C重要,則從邏輯上講,A應該比C明顯重要,若兩兩比較時出現A比C重要的結果,則該判斷矩陣違反了一致性準則,在邏輯上是不合理的。

因此在實際中要求判斷矩陣滿足大體上的一致性,需進行一致性檢驗。只有通過檢驗,才能說明判斷矩陣在邏輯上是合理的,才能繼續對結果進行分析。

一致性檢驗

第一步,計算一致性指標CI
在這里插入圖片描述
第二步,查表確定相應的平均隨機一致性指標RI
據判斷矩陣不同階數查下表,得到平均隨機一致性指標RI:
在這里插入圖片描述
第三步,計算一致性比例CR并進行判斷:
在這里插入圖片描述
當C.R.<0.1時,認為判斷矩陣的一致性是可以接受的,C.R.>0.1時,認為判斷矩陣不符合一致性要求,需要對該判斷矩陣進行重新修正。

圖1
圖2
可以看出,所有單排序的C.R.<0.1,認為每個判斷矩陣的一致性都是可以接受的。

5.層次總排序(組合權向量)與檢驗(一致性檢驗)

總排序是指每一個判斷矩陣各因素針對目標層(最上層)的相對權重。這一權重的計算采用從上而下的方法,逐層合成。
文字性描述公式如下:
在這里插入圖片描述

計算過程如下,更好理解過程:
P(C1/A) = P(C1/B1) * P(B1/A) = 0.5 * 0.1429 = 0.07145
CR(C1/A) = CR(C/B) * CR(B/A) = 0 * 0 = 0
P(D1/A) = P(D1/C1) * P(C1/B1) * P(B1/A)
+ P(D1/C2) * P(C2/B1) * P(B1/A)
+ P(D1/C3) * P(C3/B2) * P(B2/A)
+ P(D1/C4) * P(C4/B2) * P(B2/A)
+ P(D1/C5) * P(C5/B3) * P(B3/A)
+ P(D1/C6) * P(C6/B3) * P(B3/A)
=0.8333 * 0.5 * 0.1429
+0.75 * 0.5 * 0.1429
+0.1667 * 0.75 * 0.4286
+0.8750 * 0.25 * 0.4286
+0.1667 * 0.75 * 0.4286
+0.8333 * 0.25 * 0.4286

在這里插入圖片描述

6.結果分析

從方案層總排序的結果看,建地鐵(D2)的權重(0.6592)遠遠大于建高速路(D1)的權重(0.3408),因此,最終的決策方案是建地鐵。
根據層次排序過程分析決策思路:

1、對于準則層B的3個因子,直接經濟效益(B1)的權重最低(0.1429),社會效益(B2)和環境效益(B3)的權重都比較高(皆為0.4286),說明在決策中比較看重社會效益和環境效益
2、對于不看重的經濟效益,其影響的兩個因子直接經濟效益(C1)、間接帶動效益(C2)單排序權重都是建高速路遠遠大于建地鐵,對于比較看重的社會效益和環境效益,其影響的四個因子中有三個因子的單排序權重都是建地鐵遠遠大于建高速路,由此可以推出,建地鐵方案由于社會效益和環境效益較為突出,權重也會相對突出
3、從準則層C總排序結果也可以看出,方便日常出行(C3)、減少環境污染(C5)是權重值較大的,而如果單獨考慮這兩個因素,方案排序都是建地鐵遠遠大于建高速路。

由此我們可以分析出決策思路:
即決策比較看重的是社會效益和環境效益,不太看重經濟效益;(總結準則層B)
因此對于具體因子,方便日常出行和減少環境污染成為主要考慮因素,對于這兩個因素,都是建地鐵方案更佳,(總結準則層C)由此,最終的方案選擇建地鐵也就順理成章了。

7.層次分析法的優缺點

優點:
(1)系統性:層次分析把研究對象作為一個系統,按照分解、比較判斷、綜合的思維方式進行決策,成為繼機理分析、統計分析之后發展起來的系統分析的重要工具。
(2)實用性:層次分析把定性和定量方法結合起來,能處理許多許多用傳統的最優化技術無法著手的實際問題,應用范圍很廣。同時,這種方法將決策者和決策分析者相互溝通,決策者甚至可以直接應用它,這就增加了決策者的了解和掌握。
(3)簡潔性:具有中等文化程度的人即可了解層次分析的基本原理和掌握它的基本步驟,計算也非常簡便,并且所得的結果簡單明確,容易為決策者了解和掌握。

缺點:囿舊:只能從原有方案中選優,不能生成新方案;粗略:它的比較、判斷直到結果都是粗糙的,不適于精度要求很高的問題;主觀:從建立層次結構模型到給出成對比較矩陣,人的主觀因素的作用很大,這就使得決策結果可能難以為眾人接受。當然,采取專家群體判斷的辦法是克服這個缺點的一種途徑。

層次分析法的代碼實現(matlab)

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>pi=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);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.10disp('此矩陣的一致性可以接受!');disp('CI=');disp(CI);disp('CR=');disp(CR);
end

使用示例:
將上面代碼保存名為test1,并在點運行的時候添加到路徑;
輸入的A矩陣是要以向量的形式輸入的;
之后按下回車即可,可以看到和之前的第4步得到的結果是一樣的。
在這里插入圖片描述
通過不斷的使用這個式子計算相應矩陣(準則層B到準則層C、準則層C到方案層D)的權向量,最后可以得到最終的結果。
簡單的修改上面的程序,傳入參數為矩陣,免得每次都要打。

function w= test1(A)
% 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>pi=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);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.10disp('此矩陣的一致性可以接受!');disp('CI=');disp(CI);disp('CR=');disp(CR);
end

輸入:

Array1=[1 1/3 1/3;3 1 1;3 1 1];
Array2=[1 1;1 1];
Array3=[1 3;1/3 1];
Array4=[1 3;1/3 1];
Array5=[1 5;1/5 1];
Array6=[1 3;1/3 1];
Array7=[1 1/5;5 1];
Array8=[1 7;1/7 1];
Array9=[1 1/5;5 1];
Array10=[1 1/3;7 1];A=test1(Array1);
B1=test1(Array2);
B2=test1(Array3); 
B3=test1(Array4);
C1=test1(Array5);
C2=test1(Array6);
C3=test1(Array7);
C4=test1(Array8);
C5=test1(Array9);
C6=test1(Array10);

得到相應的矩陣:
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377690.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377690.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377690.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c 僵尸進程_演示僵尸進程的C程序

c 僵尸進程僵尸進程 (Zombie process) A process which has finished its execution but still has an entry in the process table to report to its parent process is known as a zombie process. 一個已經完成執行但仍在進程表中具有要報告給其父進程的條目的進程稱為僵尸進…

探秘IntelliJ IDEA 13測試版新功能——調試器顯示本地變量

IntelliJ IDEA在業界被公認為最好的Java開發平臺之一&#xff0c;JetBrains公司將在12月正式發布IntelliJ IDEA 13版本。 現在&#xff0c;小編將和大家一起探秘密IntelliJ IDEA 13測試版本新功能——調試器顯示本地變量。這個功能非常強大&#xff0c;調試器可以顯示變量&…

C# Windows Form下的控件的Validator(數據驗證)

由于偶爾的一個想法&#xff0c;謀生了一個做一個windows form下的Validator控件&#xff0c;或者直接說類吧&#xff01; 因為webform下的Validator控件太好用了。哈哈&#xff0c;直接看代碼&#xff01; 下面這個類&#xff0c;主要是一個簡單的驗證類&#xff0c;不過只是起…

七、流水查詢---記錄用戶登錄信息

一、數據庫的建立 在fiber_yy數據庫下創建yy_user_record表 可以先手動填入幾條數據信息 初始數據庫信息 username為用戶賬號 sex為用戶注冊所填寫的性別 phone為用戶手機號 time為用戶登錄該系統的時間 二、頁面的設計 登錄注冊頁面我就不演示了&#xff0c;前幾篇博文…

leetcode 455. 分發餅干 思考分析

目錄題目自己的思路以及AC代碼參考思路題目 假設你是一位很棒的家長&#xff0c;想要給你的孩子們一些小餅干。但是&#xff0c;每個孩子最多只能給一塊餅干。 對每個孩子 i&#xff0c;都有一個胃口值 g[i]&#xff0c;這是能讓孩子們滿足胃口的餅干的最小尺寸&#xff1b;并…

c++ cdi+示例_C ++'not'關鍵字和示例

c cdi示例"not" is an inbuilt keyword that has been around since at least C98. It is an alternative to ! (Logical NOT) operator and it mostly uses with the conditions. “ not”是一個內置關鍵字&#xff0c;至少從C 98起就存在。 它是替代&#xff01; …

【second】Flatten Binary Tree to Linked List

遞歸 void flatten(TreeNode *root) {// Note: The Solution object is instantiated only once and is reused by each test case.flat(root);}TreeNode* flat(TreeNode* root){if(!root)return NULL;TreeNode* left_tail flat(root->left);TreeNode* right_tail flat(ro…

八、流水查詢---記錄紡織品出庫信息

一、數據庫的建立 在fiber_yy數據庫下創建yy_textile_record表 可以先手動填入幾條數據信息 初始數據庫信息 第一條數據的username是空格不是null number為織物的品號(唯一的) stock為出貨量 username為哪個賬號 time為出貨時間 二、頁面的完善 登錄注冊頁面我就不演示…

應用程序欄【WP7學習札記之九】

本節是WP7學習札記的第九篇&#xff0c;講的是系統托盤和應用程序欄&#xff0c;具體內容是系統托盤和應用程序欄的介紹&#xff0c;如何分別使用C#、xaml以及Expression Blend生成應用程序欄&#xff0c;應用程序欄的透明度以及對屏幕方向改變的支持。摘要如下&#xff1a; 系…

橢圓曲線密碼學導論pdf_橢圓曲線密碼學

橢圓曲線密碼學導論pdf歷史 (History) The use of elliptic curves in cryptography was advised independently by Neal Koblitz and Victor S. Miller in 1985. Elliptic curve cryptography algorithms entered large use from 2004 to 2005. 1985年&#xff0c; Neal Kobli…

leetcode 第 216 場周賽 整理

目錄1662. 檢查兩個字符串數組是否相等題目自己代碼5606. 具有給定數值的最小字符串題目自己代碼貪心算法1664. 生成平衡數組的方案數題目自己代碼動態規劃優化1665. 完成所有任務的最少初始能量題目思路1662. 檢查兩個字符串數組是否相等 題目 給你兩個字符串數組 word1 和 …

九、忘記密碼功能的實現

一、頁面設計 login頁面&#xff0c;和第二篇博文(用戶登錄和注冊)頁面基本一樣&#xff0c;只不過多了一個按鈕 其中忘記密碼&#xff1f;點我找回 為button3 retrieve_password頁面 change_password頁面 頁面如下&#xff1a; 二、數據庫 因為是忘記密碼&#xff0c;…

Android中對手機文件進行讀寫

參考張澤華視頻 &#xff08;一&#xff09;讀寫手機內存卡中的文件 對手機中的文件進行讀寫操作&#xff0c;或者新增一個文件時&#xff0c;可直接使用openFileOutput / openFileInput 得到文件的輸出、輸入流。 FileOutputStream fos this.openFileOutput("private.…

聯軸器選型_聯軸器| 軟件工程

聯軸器選型耦合 (Coupling) In general terms, the term coupling is defined as a thing that joins together two objects. If we talk about software development, then the term coupling is related to the connection between two modules, i.e. how tight interaction …

劍指 Offer 10- I. 斐波那契數列 (從重疊子問題到備忘錄到dp數組迭代解法)

目錄題目描述1、暴力遞歸法的重疊子問題2、備忘錄解法3、dp數組迭代算法4、滾動數組優化5、參考鏈接題目描述 寫一個函數&#xff0c;輸入 n &#xff0c;求斐波那契&#xff08;Fibonacci&#xff09;數列的第 n 項。斐波那契數列的定義如下&#xff1a; F(0) 0, F(1) 1 F…

C# 收郵件

C#沒有內置收郵件的類&#xff0c;參考網絡上的代碼&#xff0c;針對POP3協議服務器使用 Jmail組件來收郵件&#xff0c;針對IMAP協議服務器使用LumiSoft.Net 。 另外&#xff0c;一般免費郵箱需要在郵箱設置中開啟 POP3&#xff08;或IMAP&#xff09;、 SMTP服務才可以使用非…

HDU- 1754 I Hate It

http://acm.hdu.edu.cn/showproblem.php?pid1754 記住那讓自己wa的地方。 I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 29300 Accepted Submission(s): 11615 Problem Description很多學校流行…

mcq 隊列_MCQ | 軟件生命周期模型

mcq 隊列Q1. Which of the following models is best suited when the requirements of the software are not decided and also the user is not sure about how he wants the user interface to look like? Q1。 當不確定軟件的需求并且用戶不確定自己希望用戶界面看起來如何…

十、紡織品庫存管理系統全部功能展示

一、系統主頁面—Form1 系統運行加載頁面&#xff0c;主要包含三個功能&#xff0c;①登錄、②注冊、③退出系統 程序運行圖&#xff1a; 登錄功能&#xff0c;跳轉到登錄頁面 注冊功能&#xff0c;跳轉到注冊頁面 退出系統&#xff0c;程序結束運行 代碼如下&#xff1a; …

leetcode 376. 擺動序列 思考分析

目錄題目思路分析代碼總結題目 如果連續數字之間的差嚴格地在正數和負數之間交替&#xff0c;則數字序列稱為擺動序列。第一個差&#xff08;如果存在的話&#xff09;可能是正數或負數。少于兩個元素的序列也是擺動序列。 例如&#xff0c; [1,7,4,9,2,5] 是一個擺動序列&am…