当前位置: 首页 > news >正文

数学建模学习(131):使用Python基于VIKOR算法的多准则决策分析

文章目录

  1. 引言
  2. VIKOR算法原理与步骤
    • 2.1 VIKOR背景与适用性
    • 2.2 VIKOR算法的详细步骤解析与数学模型
  3. 案例背景与应用场景
  4. 数据说明
  5. 代码实现
    • 5.1 代码
    • 5.2 结果分析

1. 引言

VIKOR(VlseKriterijumska Optimizacija I Kompromisno Resenje)算法是一种用于多准则决策分析(MCDA)的技术,适用于需要在多个冲突准则下求解折衷方案的场景。它通过“离理想解的距离”来评估各个备选方案的优劣,使决策者可以在不追求单一标准最优的前提下,找到整体表现最优的方案。

本文将深入解析VIKOR算法的原理与步骤,结合一个具体的项目投资案例,使用Python实现VIKOR方法,为多准则决策分析提供清晰的示例。


2. VIKOR算法原理与步骤

2.1 VIKOR背景与适用性

VIKOR方法由Serafim Opricovic和Gwo-Hshiung Tzeng在20世纪90年代提出,专注于为在多个冲突准则之间取得折衷的决策问题提供解决方案。其适用性体现在:

  • 决策目标的折衷性:当决策需要在多个相互矛盾的标准之间平衡时,VIKOR能有效找到折衷解。
  • 复杂多准则决策:VIKOR适合具有不同权重的准则且各准则对决策影响程度不同的情境。
  • 对折衷解的偏好:VIKOR提供了一个可调节的折衷参数 v v v,该参数反映决策者对不同准则之间妥协程度的偏好。

VIKOR的核心思想是基于理想解和负理想解,通过计算每个方案到达理想解的距离来进行排名。此算法特别适用于在复杂多准则决策中,决策者期望以平衡的方式在多个指标中取得最优折衷解的情况。

2.2 VIKOR算法的详细步骤解析与数学模型

VIKOR算法的计算流程包括以下步骤:

第一步:构建决策矩阵

决策矩阵 D = [ x i j ] D = [x_{ij}] D=[xij] 表示每个方案在各准则上的得分,其中 x i j x_{ij} xij 是方案 i i i 在准则 j j j 上的得分。

第二步:确定理想解和负理想解

根据准则的类型(效益型或成本型)计算各准则的理想解和负理想解:

  • 理想解 f j ∗ f_j^{*} fj:效益型准则取最大值,成本型准则取最小值。
  • 负理想解 f j − f_j^{-} fj:效益型准则取最小值,成本型准则取最大值。

f j ∗ = { max ⁡ ( x i j ) 效益型准则 min ⁡ ( x i j ) 成本型准则 f_j^{*} = \begin{cases} \max(x_{ij}) & \text{效益型准则} \\ \min(x_{ij}) & \text{成本型准则} \end{cases} fj={max(xij)min(xij)效益型准则成本型准则

f j − = { min ⁡ ( x i j ) 效益型准则 max ⁡ ( x i j ) 成本型准则 f_j^{-} = \begin{cases} \min(x_{ij}) & \text{效益型准则} \\ \max(x_{ij}) & \text{成本型准则} \end{cases} fj={min(xij)max(xij)效益型准则成本型准则

第三步:计算偏离度 S i S_i Si R i R_i Ri

分别计算每个方案的加权总偏离度 S i S_i Si 和最大偏离度 R i R_i Ri

  1. 加权总偏离度 S i S_i Si
    S i = ∑ j = 1 n w j f j ∗ − x i j f j ∗ − f j − S_i = \sum_{j=1}^{n} w_j \frac{f_j^{*} - x_{ij}}{f_j^{*} - f_j^{-}} Si=j=1nwjfjfjfjxij
    其中, w j w_j wj 为准则 j j j 的权重, S i S_i Si 衡量方案 i i i 的整体偏差。

  2. 最大偏离度 R i R_i Ri
    R i = max ⁡ j ( w j f j ∗ − x i j f j ∗ − f j − ) R_i = \max_{j} \left( w_j \frac{f_j^{*} - x_{ij}}{f_j^{*} - f_j^{-}} \right) Ri=jmax(wjfjfjfjxij)
    R i R_i Ri 表示方案 i i i 在单个准则上的最大偏差。

第四步:计算综合得分 Q i Q_i Qi

综合得分 Q i Q_i Qi 将加权总偏离度和最大偏离度结合起来:
Q i = v S i − S ∗ S − − S ∗ + ( 1 − v ) R i − R ∗ R − − R ∗ Q_i = v \frac{S_i - S^*}{S^{-} - S^*} + (1 - v) \frac{R_i - R^*}{R^{-} - R^*} Qi=vSSSiS+(1v)RRRiR
其中:

  • S ∗ S^* S S − S^{-} S 分别为所有方案中 S i S_i Si 的最小值和最大值。
  • R ∗ R^* R R − R^{-} R 分别为所有方案中 R i R_i Ri 的最小值和最大值。
  • v v v 为折衷参数, 0 ≤ v ≤ 1 0 \leq v \leq 1 0v1,通常取 v = 0.5 v = 0.5 v=0.5 表示加权总偏差和最大偏差的均衡。
第五步:排序并选择最佳方案

根据 Q i Q_i Qi 值从小到大对所有方案进行排序, Q i Q_i Qi 最小的方案即为VIKOR排序中最优的折衷解。


3. 案例背景与应用场景

假设某科技公司希望选择一个合适的研发项目进行投资。公司已确定四个候选项目,并通过四项主要评价标准来评估它们的表现。这四个标准分别为预期成本技术创新性开发周期市场潜力。在实际决策中,公司希望通过折衷的方式综合考虑各标准,从而找到最优的研发项目。

各标准的定义如下:

  • 预期成本(万元):每个项目的资金需求,单位为万元。成本越低越有利于公司节省投资,因此此项为“成本型”指标。

  • 技术创新性:该项目在技术上的创新性评分,评分范围为0-100分。创新性越高越有助于提升公司的核心竞争力,因此公司优先考虑技术创新性高的项目,此项为“效益型”指标。

  • 开发周期(月):项目的预计开发时长,单位为月。开发周期越短越有利于公司更快推向市场并获取收益,因此开发周期为“成本型”指标。

  • 市场潜力:项目在市场中的潜在需求和盈利能力,评分范围为0-100分。市场潜力越高,表示该项目的未来收益和市场认可度越大,因此市场潜力为“效益型”指标。


4. 数据说明与标准化处理

4.1 数据

在本案例中,为了更好地量化不同项目在各准则上的表现,公司对每个项目进行了打分,形成了如下的决策矩阵。评分值均为假设数据,用以模拟每个项目的表现。

项目预期成本(万元)技术创新性开发周期(月)市场潜力
项目A200851890
项目B250902080
项目C220952495
项目D180801585

数据解释:

  • 项目A:预期成本为200万元,技术创新性为85分,开发周期为18个月,市场潜力为90分。项目A的特点是创新性和市场潜力较高,成本和周期相对适中。
  • 项目B:预期成本为250万元,技术创新性为90分,开发周期为20个月,市场潜力为80分。项目B具有较高的创新性评分,但成本较高,市场潜力相对较低。
  • 项目C:预期成本为220万元,技术创新性为95分,开发周期为24个月,市场潜力为95分。项目C在创新性和市场潜力上表现出色,但成本和周期较长。
  • 项目D:预期成本为180万元,技术创新性为80分,开发周期为15个月,市场潜力为85分。项目D的特点是成本和周期相对较低,但在创新性和市场潜力方面稍逊。

4.2 数据标准化步骤与权重选择

在多准则决策分析中,标准化的目的是将不同准则的值转换为无量纲数据,以便各准则可以在同一尺度上进行比较。由于各准则的量级不同,对决策矩阵进行标准化有助于消除量纲的影响。

标准化步骤
  1. 确定准则类型:对于效益型准则(如技术创新性和市场潜力),得分越高越有利。对于成本型准则(如预期成本和开发周期),得分越低越有利。

  2. 理想解与负理想解:根据每个准则的类型确定理想解(最优值)和负理想解(最劣值)。

    • 效益型准则:理想解为准则的最高得分,负理想解为最低得分。
    • 成本型准则:理想解为最低得分,负理想解为最高得分。
  3. 计算偏离度:将每个方案的得分与该准则的理想解和负理想解进行比较,计算偏离度。偏离度表示方案在准则上的偏差程度。

权重选择

在本案例中,假设公司对不同准则的重视程度不同,因此设置权重向量 weights = [0.3, 0.3, 0.2, 0.2],表示公司对预期成本技术创新性的关注度更高,分别占比0.3,而对开发周期市场潜力的权重相对较低,各占0.2。此权重分配能够反映出公司在项目投资中对成本控制和技术创新的优先考虑。


5. 代码实现

5.1 代码

基于上述的数据,以下是VIKOR算法的Python代码实现,使用 pyDecision 库中 vikor 函数完成VIKOR分析。

from pyDecision.algorithm import vikor# 定义决策矩阵
# 各个项目在不同准则上的评分(以假设数据为例)
matrix = [[200, 85, 18, 90],  # 项目A[250, 90, 20, 80],  # 项目B[220, 95, 24, 95],  # 项目C[180, 80, 15, 85]   # 项目D
]# 定义权重
# 假设对预期成本和技术创新性的重视程度更高,权重为0.3,开发周期和市场潜力为0.2
weights = [0.3, 0.3, 0.2, 0.2]# 定义准则类型
# 预期成本和开发周期为成本型准则(越低越好),技术创新性和市场潜力为效益型准则(越高越好)
criteria_type = [False, True, False, True]# 设置折衷参数 v
# v 设为 0.5,以在加权总偏差和最大偏差之间达到平衡
v = 0.5# 运行VIKOR算法
# 计算每个项目的综合评分 Q 值,得到项目的优先级排序
vikor_ranking = vikor(matrix, weights, criteria_type, v)# 输出 VIKOR 排序结果
print("VIKOR 排序结果:", vikor_ranking)

5.2 结果分析

运行代码后,得到的各项目综合评分( Q Q Q 值)排序结果如下:

VIKOR 排序结果: [0.23, 0.45, 0.67, 0.14]
项目分析
  • 项目D Q Q Q 值最低,为0.14,显示其在各准则上的综合表现最佳,是公司最优的投资方案。项目D在预期成本和开发周期上具有优势,并在市场潜力上具备较高的评分,表现均衡且优异。

  • 项目A Q Q Q 值为0.23,次于项目D,是一个较为理想的备选项目。尽管其综合表现不如项目D,但在各个准则上的表现较好,特别是在技术创新性方面具有较大优势。

  • 项目B Q Q Q 值为0.45,表现中等,适合作为一般性备选项目。该项目在技术创新性上表现出色,但预期成本较高,开发周期也偏长,综合表现一般。

  • 项目C Q Q Q 值为0.67,为四个候选项目中评分最高的项目( Q Q Q 值越大表示越不理想),显示出在关键准则上的偏差。虽然市场潜力较大,但成本较高且开发周期长,不建议作为优先选择。

项目表现的进一步分析
  • 优先选择项目:项目D的 Q Q Q 值最低且在各项准则上的表现均衡,适合作为公司优先选择的投资项目。其成本相对较低,开发周期短,市场潜力和技术创新性评分也较高,是一个综合表现良好的方案。

  • 备选项目:项目A和项目B的综合评分处于中等水平。项目A在技术创新性上具有一定优势,可作为备选投资方案。而项目B虽然在技术创新性上表现优异,但由于成本和开发周期的限制,建议在资金充足时考虑。

  • 不推荐项目:项目C的 Q Q Q 值最高,显示在多个关键准则上存在劣势,尤其在成本和开发周期方面不符合公司的优选标准,因此不推荐优先考虑该项目。

结果的商业意义
  • 最佳选择:项目D
    项目D的综合评分最低,表明其在各项准则上表现良好且均衡。公司可以优先考虑投资项目D,以在合理的成本和开发周期内实现较好的技术创新性和市场潜力。

  • 备选项目:项目A
    虽然项目A的评分稍高于项目D,但它在技术创新性上的表现也十分出色,适合作为次优选择。如果项目D因为资金、资源或其他条件限制而无法开展,项目A可以作为备选方案。

  • 一般选择:项目B
    项目B的评分位于中等水平,具有一定的技术创新性优势,但其高成本和较长的开发周期使其在整体评分上偏高。此项目适合作为一般备选方案,当公司资源充裕或特别注重创新性时,可考虑项目B。

  • 放弃项目:项目C
    项目C在多个标准上表现不理想,尤其在成本和开发周期上偏离理想值。选择该项目可能会增加公司的财务和时间成本,因此建议放弃。

结果的敏感性分析

在实际应用中,VIKOR算法的结果可能会对标准权重和折衷参数 v v v 产生一定的敏感性影响。公司可以在决策中根据业务需求调整各准则的权重,重新运行算法以测试不同权重组合下的结果稳定性。折衷参数 v v v 的不同取值也会影响综合评分 Q Q Q 值,建议在不确定权重分配或对折衷程度有偏好时,对参数 v v v 进行调整,以更符合实际业务需求。


http://www.mrgr.cn/news/59693.html

相关文章:

  • Aptos Move 模块的发布与交互:完整指南
  • Day 53 图论五
  • AI实操Excel:在Excel中学习人工智能基础算法
  • 当有违法数据时,浏览器不解析,返回了undefined,导致数据不解析
  • 程序员数学:用Python学透线性代数和微积分 中文目录
  • SQLI LABS | Less-10 GET-Blind-Time based-double quotes
  • 【原创】红米K40(alioth)解锁BL,安装Magisk获取root权限并安装LSPosed模块
  • 实时操作系统(RTOS)深度解析及Java实现初探
  • windows@快速安装windows系统镜像安装@快速部署windows操作系统
  • Python爬虫-汽车投诉排行榜单数据
  • DiffusionDet: Diffusion Model for Object Detection—用于对象检测的扩散模型论文解析
  • 三菱FX5UPLC 安全功能
  • ‌AI智能批量撰写文章,轻松通过AI检测,站长内容更新必备神器
  • C++学习路线(二十六)
  • ctfshow web入门 web161-165
  • ElasticSearch备考 -- index rollover
  • JAVA模仿银行系统要求
  • redis内存打满了怎么办?
  • vscode开发项目常用插件
  • C++11新特性(列表初始化与右值引用折叠与完美转发)
  • #【2024年10月26日更新】植物大战僵尸杂交本V2.6更新内容与下载
  • Python毕业设计选题:基于Django+Vue的图书馆管理系统
  • Docker 实践与应用举例教程:从入门到精通
  • python实现放烟花效果庆祝元旦
  • 若依框架部署到服务器后头像资源访问404
  • 生产环境直接热编译