最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年09月09日 10:25:30   作者:今夜月-半彎  
這篇文章主要給大家介紹了關(guān)于python實(shí)現(xiàn)AHP算法(層次分析法)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、層次分析法原理

層次分析法(Analytic Hierarchy Process,AHP)由美國運(yùn)籌學(xué)家托馬斯·塞蒂(T. L. Saaty)于20世紀(jì)70年代中期提出,用于確定評價(jià)模型中各評價(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 np
class 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)
    # 矩陣最大特征值對應(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):
    # 將矩陣最大特征值對應(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_weight


if __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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PyQt5實(shí)現(xiàn)QLineEdit添加clicked信號(hào)的方法

    PyQt5實(shí)現(xiàn)QLineEdit添加clicked信號(hào)的方法

    今天小編就為大家分享一篇PyQt5實(shí)現(xiàn)QLineEdit添加clicked信號(hào)的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Python3 Click模塊的使用方法詳解

    Python3 Click模塊的使用方法詳解

    這篇文章主要介紹了Python3 Click模塊的使用方法詳解,需要的朋友可以參考下
    2020-02-02
  • 4種方法教你利用Python發(fā)現(xiàn)數(shù)據(jù)的規(guī)律

    4種方法教你利用Python發(fā)現(xiàn)數(shù)據(jù)的規(guī)律

    發(fā)現(xiàn)數(shù)據(jù)的規(guī)律是數(shù)據(jù)分析和數(shù)據(jù)科學(xué)中非常重要的一個(gè)步驟。這篇文章主要給大家整理了4個(gè)可以發(fā)現(xiàn)數(shù)據(jù)規(guī)律的方法,希望對大家有所幫助
    2023-03-03
  • JS+HTML實(shí)現(xiàn)在線圖片水印添加工具

    JS+HTML實(shí)現(xiàn)在線圖片水印添加工具

    在社交媒體和內(nèi)容創(chuàng)作日益頻繁的今天,如何保護(hù)原創(chuàng)內(nèi)容、展示品牌身份成了一個(gè)不得不面對的問題,本文將實(shí)現(xiàn)一個(gè)完全基于 HTML + CSS 構(gòu)建的現(xiàn)代化圖片水印在線工具,希望對大家有所幫助
    2025-04-04
  • Python實(shí)現(xiàn)輕松找出兩個(gè)列表不同之處

    Python實(shí)現(xiàn)輕松找出兩個(gè)列表不同之處

    在日常編程中,需要比較兩個(gè)列表并找出它們之間差異是一種常見需求,在本文中,我們將深入探討Python中查找兩個(gè)列表差異值的方法,需要的小伙伴可以參考下
    2023-12-12
  • Python實(shí)現(xiàn)輕松切割MP3文件

    Python實(shí)現(xiàn)輕松切割MP3文件

    有時(shí)我們需要將大型MP3文件切割成較小的部分以便上傳或發(fā)送,所以本文為大家整理了可以輕松切割MP3文件的Python腳本,希望對大家有所幫助
    2023-06-06
  • 使用Python?VTK?完成圖像切割

    使用Python?VTK?完成圖像切割

    這篇文章主要介紹了使用Python?VTK?完成圖像切割,文章內(nèi)容基于python的相關(guān)資料展開對主題的詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-04-04
  • python-docx讀取模板文檔并填充數(shù)據(jù)

    python-docx讀取模板文檔并填充數(shù)據(jù)

    python-docx?是開源的一個(gè)?Python?庫,用于讀取、創(chuàng)建和更新Microsoft?Word?2007+(.docx)文件,下面我們就來看看如何利用python-docx讀取模板文檔并填充數(shù)據(jù)吧
    2024-11-11
  • Python執(zhí)行ping操作的簡單方法

    Python執(zhí)行ping操作的簡單方法

    本文主要介紹了Python執(zhí)行ping操作的簡單方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python jieba 中文分詞與詞頻統(tǒng)計(jì)的操作

    Python jieba 中文分詞與詞頻統(tǒng)計(jì)的操作

    這篇文章主要介紹了Python jieba 中文分詞與詞頻統(tǒng)計(jì)的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03

最新評論

嘉兴市| 西华县| 保靖县| 巩义市| 普陀区| 博乐市| 陈巴尔虎旗| 开江县| 互助| 汾西县| 绥棱县| 五莲县| 滦南县| 同仁县| 襄城县| 横峰县| 义马市| 剑阁县| 依兰县| 武安市| 昌乐县| 页游| 黑山县| 绥滨县| 钟祥市| 玉门市| 芦山县| 徐闻县| 惠州市| 砀山县| 大城县| 新野县| 南开区| 磐石市| 泸溪县| 兰坪| 陵川县| 化州市| 凌海市| 杭州市| 尼玛县|