首页 > 编程知识 正文

Python层次分析法案例分析

时间:2023-11-21 09:42:58 阅读:288676 作者:UNLE

本文主要介绍使用Python实现层次分析法的方法,并以一个实际案例加深理解和掌握。

一、什么是层次分析法

层次分析法(AHP)是一种定量分析复杂决策问题的方法,它通过将一个决策问题仿照人的思维过程层层分解为若干个层次,从而获得问题的结构层次体系模型。

层次分析法的基本思想是把问题的复杂结构分解成若干个层次,从上到下逐层递进,直至最底层具体问题。该方法采用成对比较法来确定各层次指标之间的权重,然后将各层次指标的权值汇总得到最终权重。通过该方法得到的决策结果具有客观性和准确性,因此在决策分析、战略规划和风险评估等领域有着广泛应用。

二、Python中的层次分析法

Python中非常流行的AHP库是pyanp,它提供了层次分析法的核心算法和数据结构。首先需要使用pip安装该库:

pip install pyanp

接下来我们可以通过以下代码来实现AHP:

from pyanp import *
from pyanp.priority import Priority
from pyanp.values import *
    
#定义我们的结构层次
profile = Hierarchy("冰淇淋品牌选择") 
profile.add_level("标准")    #顶层root是默认添加的
profile.add_level("选择")    
profile.add_level("备选")
profile.add_level("可选")

#添加准则
stds = ["价格", "口感", "颜色", "品种"]
profile.add_children("标准", stds)  

#添加选择备选集合
profiles = ["哈根达斯", "雪糕皇后", "Baskin Robbins", "Ben & Jerry’s", "米兰达"]
profile.add_children("备选", profiles)

#添加指标
c1 = ["高", "稍高", "一般", "略低", "低"]
c2 = ["好吃", "不错", "一般", "不好吃",  "难以下咽"]
c3 = ["白", "黄", "红", "绿", "棕"]
c4 = ["巧克力", "芒果", "草莓", "抹茶", "香草"]
  
#对于每个标准,分配一组值
profile.add_values("价格", make_priority(numeric_values(c1)))
profile.add_values("口感", make_priority(numeric_values(c2)))
profile.add_values("颜色", make_priority(numeric_values(c3)))
profile.add_values("品种", make_priority(numeric_values(c4)))

#对每个备选品种也进行组内比较,比较每个备选品种在各个标准下的得分
b_values = {
    "哈根达斯": [3, 5, 4, 3],
    "雪糕皇后": [4, 4, 3, 5],
    "Baskin Robbins": [5, 3, 5, 2],
    "Ben & Jerry’s": [2, 5, 2, 4],
    "米兰达": [1, 2, 1, 1]
}
for profile in profiles:
    pr = Priority(profile + "选择")
    for std, vals in b_values.items():
        pr.set_value(std, vals[profiles.index(profile)])
    profile.set_priority(pr)

#计算最终权重
final_weights = pairwise_compare(profile)

for p, w, wf in final_weights.top_n():
    print(p, w, wf)

三、实例演示:如何选择最好的手机

为了更好地理解和掌握AHP的实现过程,我们可以使用一个实际的案例——如何选择最好的手机。

手机选择涉及到多个因素,如价格、外观、屏幕分辨率、电池续航能力等等。一般来说,选择手机的过程非常复杂,所以用AHP来解决这一问题非常合适。下面我们通过Python代码来演示选择最好的手机的过程:

from pyanp import *
from pyanp.priority import Priority
from pyanp.values import *

profile = Hierarchy("选择最好的手机") 
profile.add_level("标准")
profile.add_level("选择")
profile.add_level("备选")
profile.add_level("可选")

#添加准则
stds = ["价格", "外观", "屏幕分辨率", "电池续航能力"]
profile.add_children("标准", stds)  

#添加备选和可选手机
profiles = ["华为", "小米", "苹果", "三星"]
profile.add_children("备选", profiles)
left = ["VIVO", "OPPO", "联想", "红米", "realme"]
profile.add_children("可选", left)

#添加标准指标比较值
c1 = [1500, 2000, 2500, 3000, 3500, 4000]
c2 = ["尺寸小", "体积小巧", "平凡一般", "样式别致", "尺寸大", "庞大沉重"]
c3 = ["480p", "720p", "1080p", "2K", "4K"]
c4 = ["6h以下", "6h-10h", "10h-18h", "18h以上"]

hv_profile = {"华为": [1500, "平凡一般", "2K", "10h-18h"], "小米": [2500, "平凡一般", "1080p", "18h以上"],
              "苹果": [4000, "平凡一般", "2K", "10h-18h"], "三星": [3000, "样式别致", "720p", "6h以下"]}
    
lv_profile = {"VIVO": [1500, "尺寸小", "480p", "18h以上"], "OPPO": [2000, "体积小巧", "720p", "6h以下"],
              "联想": [2000, "平凡一般", "720p", "10h-18h"], "红米": [2500, "尺寸大", "1080p", "10h-18h"],
              "realme": [3000, "庞大沉重", "2K", "6h-10h"]}

for profile in profiles:
    pr = Priority(profile + "选择")
    for std, idx in enumerate(stds):
        pr.set_value(idx, hv_profile[profile][std])
    profile.set_priority(pr)

for profile in left:
    pr = Priority(profile + "选择")
    for std, idx in enumerate(stds):
        pr.set_value(idx, lv_profile[profile][std])
    profile.set_priority(pr)

final_weights = pairwise_compare(profile)

for p, w, wf in final_weights.top_n():
    print(p, w, wf)

四、总结

层次分析法是一种非常实用的、广泛使用的决策分析方法,它可以解决在某个特定层次上的决策问题。Python中pyanp库提供了层次分析法的核心算法和数据结构,可以方便地实现该算法。

通过本文,我们对层次分析法的基本使用以及实际案例进行了详细的阐述,相信读者可以更好地理解和掌握该算法。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。