久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python實(shí)現(xiàn)AHP算法的方法實(shí)例(層次分析法)

瀏覽:2日期:2022-07-11 17:25:59

一、層次分析法原理

層次分析法(Analytic Hierarchy Process,AHP)由美國(guó)運(yùn)籌學(xué)家托馬斯·塞蒂(T. L. Saaty)于20世紀(jì)70年代中期提出,用于確定評(píng)價(jià)模型中各評(píng)價(jià)因子/準(zhǔn)則的權(quán)重,進(jìn)一步選擇最優(yōu)方案。該方法仍具有較強(qiáng)的主觀性,判斷/比較矩陣的構(gòu)造在一定程度上是拍腦門決定的,一致性檢驗(yàn)只是檢驗(yàn)拍腦門有沒有自相矛盾得太離譜。

相關(guān)的理論參考可見:wiki百科

二、代碼實(shí)現(xiàn)

需要借助Python的numpy矩陣運(yùn)算包,代碼最后用了一個(gè)b1矩陣進(jìn)行了調(diào)試,相關(guān)代碼如下,具體的實(shí)現(xiàn)流程已經(jīng)用詳細(xì)的注釋標(biāo)明,各位小伙伴有疑問的歡迎留言和我一起討論。

import numpy as npclass AHP: ''' 相關(guān)信息的傳入和準(zhǔn)備 ''' def __init__(self, array): ## 記錄矩陣相關(guān)信息 self.array = array ## 記錄矩陣大小 self.n = array.shape[0] # 初始化RI值,用于一致性檢驗(yàn) self.RI_list = [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] # 矩陣的特征值和特征向量 self.eig_val, self.eig_vector = np.linalg.eig(self.array) # 矩陣的最大特征值 self.max_eig_val = np.max(self.eig_val) # 矩陣最大特征值對(duì)應(yīng)的特征向量 self.max_eig_vector = self.eig_vector[:, np.argmax(self.eig_val)].real # 矩陣的一致性指標(biāo)CI self.CI_val = (self.max_eig_val - self.n) / (self.n - 1) # 矩陣的一致性比例CR self.CR_val = self.CI_val / (self.RI_list[self.n - 1]) ''' 一致性判斷 ''' def test_consist(self): # 打印矩陣的一致性指標(biāo)CI和一致性比例CR print('判斷矩陣的CI值為:' + str(self.CI_val)) print('判斷矩陣的CR值為:' + str(self.CR_val)) # 進(jìn)行一致性檢驗(yàn)判斷 if self.n == 2: # 當(dāng)只有兩個(gè)子因素的情況 print('僅包含兩個(gè)子因素,不存在一致性問題') else: if self.CR_val < 0.1: # CR值小于0.1,可以通過一致性檢驗(yàn)print('判斷矩陣的CR值為' + str(self.CR_val) + ',通過一致性檢驗(yàn)')return True else: # CR值大于0.1, 一致性檢驗(yàn)不通過print('判斷矩陣的CR值為' + str(self.CR_val) + '未通過一致性檢驗(yàn)')return False ''' 算術(shù)平均法求權(quán)重 ''' def cal_weight_by_arithmetic_method(self): # 求矩陣的每列的和 col_sum = np.sum(self.array, axis=0) # 將判斷矩陣按照列歸一化 array_normed = self.array / col_sum # 計(jì)算權(quán)重向量 array_weight = np.sum(array_normed, axis=1) / self.n # 打印權(quán)重向量 print('算術(shù)平均法計(jì)算得到的權(quán)重向量為:n', array_weight) # 返回權(quán)重向量的值 return array_weight ''' 幾何平均法求權(quán)重 ''' def cal_weight__by_geometric_method(self): # 求矩陣的每列的積 col_product = np.product(self.array, axis=0) # 將得到的積向量的每個(gè)分量進(jìn)行開n次方 array_power = np.power(col_product, 1 / self.n) # 將列向量歸一化 array_weight = array_power / np.sum(array_power) # 打印權(quán)重向量 print('幾何平均法計(jì)算得到的權(quán)重向量為:n', array_weight) # 返回權(quán)重向量的值 return array_weight ''' 特征值法求權(quán)重 ''' def cal_weight__by_eigenvalue_method(self): # 將矩陣最大特征值對(duì)應(yīng)的特征向量進(jìn)行歸一化處理就得到了權(quán)重 array_weight = self.max_eig_vector / np.sum(self.max_eig_vector) # 打印權(quán)重向量 print('特征值法計(jì)算得到的權(quán)重向量為:n', array_weight) # 返回權(quán)重向量的值 return array_weightif __name__ == '__main__': # 給出判斷矩陣 b = np.array([[1, 1 / 3, 1 / 8], [3, 1, 1 / 3], [8, 3, 1]]) # 算術(shù)平均法求權(quán)重 weight1 = AHP(b).cal_weight_by_arithmetic_method() # 幾何平均法求權(quán)重 weight2 = AHP(b).cal_weight__by_geometric_method() # 特征值法求權(quán)重 weight3 = AHP(b).cal_weight__by_eigenvalue_method()

總結(jié)

到此這篇關(guān)于python實(shí)現(xiàn)AHP算法(層次分析法)的文章就介紹到這了,更多相關(guān)python AHP算法(層次分析法)內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 日本激情视频在线播放 | 亚洲一区二区三区中文字幕 | 亚洲a人| 久久久久九九九九九 | 亚洲日韩欧美一区二区在线 | 免费在线成人av | 久久久99久久久国产自输拍 | 成人片免费看 | 国产一区二区三区四区视频 | 日韩不卡一区 | 日韩在线视频一区 | 精品999 | 二区在线观看 | 国产精品久久久久久久久久免费 | 中文字幕免费视频观看 | 国产高清自拍 | 亚洲精品国产第一综合99久久 | 日韩欧美在线播放 | 精品久久一区 | 国产综合亚洲精品一区二 | 久久免费视频国产 | 精品一区不卡 | 久久99精品国产.久久久久 | 日本成人高清视频 | 精品国产乱码久久久久久久软件 | 九九综合 | www.99热.com | av网站在线免费观看 | 亚洲一区在线日韩在线深爱 | 亚洲人人舔人人 | 91成人免费看 | 91精品国产自产精品男人的天堂 | 久久激情五月丁香伊人 | 成人av网址在线观看 | 亚洲午夜精品片久久www慈禧 | 亚洲精品一区在线观看 | 色黄视频在线观看 | 91九色麻豆 | 玖草资源| 91精品国产91久久久久久密臀 | 免费国产一区二区 |