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

数学建模——评价决策类算法(层次分析法、Topsis)

一、层次分析法

概念原理

        通过相互比较确定各准则对于目标的权重, 及各方案对于每一准则的权重,这些权重在人的思维过程中通常是定性的, 而在层次分析法中则要给出得到权重的定量方法. 将方案层对准则层的权重及准则层对目标层的权重进行综合, 最终确定方案层对目标层的权重。

层次分析算法的基本步骤 

1、建立递阶层次结构模型

2、构造出各层次中的所有判断矩阵

3、一致性检验

4、求权重后进行评价

一致性检验

求解权重 

 例题

例题:某公司计划投资一个新项目,现有三个候选城市A、B、C可供选择。公司希望通过层次分析法来确定最佳投资地点。评价指标包括:经济发展水平、人力资源、基础设施、政策支持四个方面。

步骤1:建立递阶层次结构模型

目标层:选择最佳投资地点 准则层:经济发展水平、人力资源、基础设施、政策支持 方案层:城市A、城市B、城市C

步骤2:构造各层次中的所有判断矩阵

假设公司对四个评价指标的重要性进行了如下判断(1-9标度法):

经济发展水平:人力资源 = 3,基础设施 = 5,政策支持 = 7 人力资源:基础设施 = 2,政策支持 = 4 基础设施:政策支持 = 1

构造准则层判断矩阵P:

对于方案层,假设公司对三个城市在各评价指标下的表现进行了如下判断:

经济发展水平:A > B > C 人力资源:A > C > B 基础设施:B > A > C 政策支持:C > A > B

构造方案层判断矩阵Q1(经济发展水平):

构造方案层判断矩阵Q2(人力资源):

构造方案层判断矩阵Q3(基础设施):

构造方案层判断矩阵Q4(政策支持):

步骤3:一致性检验

首先计算判断矩阵的最大特征值和特征向量,然后计算一致性指标CI和一致性比例CR。

步骤4:求权重后进行评价

根据步骤3的计算结果,得到各评价指标和方案的权重,进而计算出各方案的综合得分,选择得分最高的方案。

import numpy as np# 计算最大特征值和特征向量
def cal_maxEigenvalue_and_Eigenvector(matrix):eigenvalues, eigenvectors = np.linalg.eig(matrix)max_index = np.argmax(eigenvalues)max_eigenvalue = eigenvalues[max_index]max_eigenvector = eigenvectors[:, max_index]return max_eigenvalue, max_eigenvector# 一致性检验
def consistency_check(matrix, n):max_eigenvalue, max_eigenvector = cal_maxEigenvalue_and_Eigenvector(matrix)CI = (max_eigenvalue - n) / (n - 1)RI = [0, 0, 0.58, 0.9, 1.12, 1.24, 1.32, 1.41, 1.45]  # 随机一致性指标CR = CI / RI[n - 1]if CR < 0.1:print("判断矩阵的一致性可以接受,CR = {:.4f}".format(CR))return max_eigenvector / np.sum(max_eigenvector)  # 归一化特征向量else:print("判断矩阵的一致性不可接受,CR = {:.4f}".format(CR))return None# 构造判断矩阵
P = np.array([[1, 1/3, 1/5, 1/7],[3, 1, 1/2, 1/4],[5, 2, 1, 1/3],[7, 4, 3, 1]])Q1 = np.array([[1, 3, 5],[1/3, 1, 3],[1/5, 1/3, 1]])Q2 = np.array([[1, 3, 5],[1/3, 1, 3],[1/5, 1/3, 1]])Q3 = np.array([[1, 1/3, 1/5],[3, 1, 3],[5, 1/3, 1]])Q4 = np.array([[1, 1/3, 1/5],[3, 1, 3],[5, 1/3, 1]])# 进行一致性检验并计算权重
weights_P = consistency_check(P, 4)
weights_Q1 = consistency_check(Q1, 3)
weights_Q2 = consistency_check(Q2, 3)
weights_Q3 = consistency_check(Q3, 3)
weights_Q4 = consistency_check(Q4, 3)# 如果一致性检验未通过,则无法继续计算
if weights_P is None or weights_Q1 is None or weights_Q2 is None or weights_Q3 is None or weights_Q4 is None:print("存在判断矩阵的一致性不可接受,请重新评估。")
else:# 计算各方案的综合得分scores = np.dot(weights_P, np.array([weights_Q1, weights_Q2, weights_Q3, weights_Q4]))print("各城市的综合得分:")for i, score in enumerate(scores):print("城市{}:{:.4f}".format(chr(65+i), score))# 选择得分最高的城市best_city_index = np.argmax(scores)print("最佳投资地点是:城市{}".format(chr(65+best_city_index)))

请注意,这段代码假设所有的判断矩阵都通过了一致性检验。在实际应用中,如果任何一个判断矩阵没有通过一致性检验,就需要重新评估矩阵中的元素,直到所有矩阵都通过一致性检验。

此外,代码中的RI数组是一个预定义的随机一致性指标,它依赖于矩阵的大小(即准则的数量)。如果准则层或方案层的元素数量超过9,那么需要查找额外的RI值。

运行上述代码将给出每个城市的综合得分,并确定最佳投资地点。这个过程体现了层次分析法的核心步骤,包括建立模型、构造判断矩阵、一致性检验和权重计算。

二、Topsis算法

模型原理

基本步骤

原始矩阵正向化

正向化矩阵标准化 

 计算得分并归一化

 例题

假设某公司需要从三个供应商(A、B、C)中选择一个作为长期合作伙伴。评价指标包括:价格、质量、交货时间和售后服务。以下是供应商在每个指标上的原始评分(价格越低越好,其他指标越高越好):

首先,我们将价格指标正向化,因为价格是成本型指标,越低越好,而其他指标是效益型指标,越高越好。

正向化后的矩阵X’:

X' = [[1/10, 85, 3, 90],[1/12, 90, 5, 85],[1/11, 88, 4, 88]]

对正向化后的矩阵进行标准化处理,得到标准化矩阵R。

X_prime = np.array([[1/10, 85, 3, 90],[1/12, 90, 5, 85],[1/11, 88, 4, 88]])# 计算每列的平方和
squared_sums = np.sum(X_prime**2, axis=0)# 标准化矩阵R
R = X_prime / np.sqrt(squared_sums)

假设每个指标的权重相等,即每个指标的权重为1/4。

# 权重向量W
W = np.array([1/4, 1/4, 1/4, 1/4])# 计算加权得分
V = R * W

归一化得分:

# 计算得分向量V的平方和
v_squared_sums = np.sum(V**2, axis=1)# 归一化得分
S = V / np.sqrt(v_squared_sums)[:, np.newaxis]

 完整代码:

import numpy as np# 原始矩阵正向化
X_prime = np.array([[1/10, 85, 3, 90],[1/12, 90, 5, 85],[1/11, 88, 4, 88]])# 标准化矩阵R
squared_sums = np.sum(X_prime**2, axis=0)
R = X_prime / np.sqrt(squared_sums)# 权重向量W
W = np.array([1/4, 1/4, 1/4, 1/4])# 计算加权得分
V = R * W# 归一化得分
v_squared_sums = np.sum(V**2, axis=1)
S = V / np.sqrt(v_squared_sums)[:, np.newaxis]# 输出归一化得分
print("各供应商的归一化得分:")
for i, s in enumerate(S):print(f"供应商 {chr(65+i)}: {s}")

相关文章:

数学建模——评价决策类算法(层次分析法、Topsis)

一、层次分析法 概念原理 通过相互比较确定各准则对于目标的权重, 及各方案对于每一准则的权重&#xff0c;这些权重在人的思维过程中通常是定性的, 而在层次分析法中则要给出得到权重的定量方法. 将方案层对准则层的权重及准则层对目标层的权重进行综合, 最终确定方案层对目标…...

KEEPALIVED 全csdn最详细----理论+实验(干货扎实,包教会的)

环境准备 主机名IP虚拟IP&#xff08;VIP&#xff09;功能ka1172.25.254.10172.25.254.100keepalived服务ka2172.25.254.20172.25.254.100keepalived服务realserver1172.25.254.110web服务realserver2172.25.254.120web服务 注意一定要关闭selinux,和防火墙&#xff0c;不然在…...

微信云开发云存储全部下载

一、安装 首先按照这个按照好依赖 安装 | 云开发 CloudBase - 一站式后端云服务 npm i -g cloudbase/cli 二、登录 tcb login 下载 首先在你要下载到的本地文件内创建一个名为&#xff1a;cloudbaserc.json 的json文件。 填入你的id {"envId":"你的云开发环…...

vos3000怎样对接voip落地语音网关呢?卡机和O口网关的配置技巧有哪些?

很多朋友没有接触过vos系统的使用&#xff0c;那么vos3000如何对接voip落地网关呢&#xff1f;卡机的配置技巧有哪些&#xff1f; VOS3000系统是针对中小等规模VoIP运营业务提供的支撑系统。 语音网关 落地网关分O口网关&#xff0c;S口网关&#xff0c;和全网通GOIP语音网关。…...

MySQL数据库专栏(四)数据库操作

1、创建数据库 create database if not exists [数据库名称] character set [字符集] COLLATE [排序规则]; 例如&#xff1a;create database if not exists db_demo character set utf8mb4 COLLATE utf8mb4_general_ci; if not exists&#xff1a;判断数据库是否存在&#x…...

Python编写Word文档

目录 0. 安装依赖 1. 创建word文档 2. 添加标题、居中、字体16大小 3. 添加标题一 4. 添加一段话并设置字体颜色 封装函数 5. 换页 6. 插入表格 0. 安装依赖 python-docx1.1.2 1. 创建word文档 from docx import Documentdoc Document() 2. 添加标题、居中、字体1…...

聚星文社AI工具

聚星文社AI工具是一款基于人工智能技术的文学创作辅助工具。聚星文社AI工具https://docs.qq.com/doc/DRU1vcUZlanBKR2xy 它能够帮助作者生成文字内容、自动校对、提供创作灵感等功能。 通过聚星文社AI工具&#xff0c; 作者可以更快速地完成文学作品的创作&#xff0c;提高创…...

思科OSPF动态路由配置8

#路由协议实现# #任务八OSPF动态路由配置8# 开放式最短路径优先&#xff08;Open Shortest Path First,OSPF&#xff09;协议是目前网络中应用最广泛的动态路由协议之一。它也属于内部网关路由协议&#xff0c;能够适应各种规模的网络环境&#xff0c;是典型的链路状态路由协…...

C++(10)类语法分析(1)

C(10)之类语法分析(1) Author: Once Day Date: 2024年8月17日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 源码分析_Once-Day的博客-CSDN博客 …...

python语言day6 os random datetime .ini文件

os&#xff1a; 获取运行当前py文件的绝对路径&#xff1a; abspath中添加路径&#xff0c;会直接和绝对路径拼接。 folder_path os.path.abspath("") print(folder_path) 路径拼接&#xff1a; mac系统路径&#xff1a;file/TranslucentTB win系统路径&#xff1a;…...

powershell 终端 执行 pnpm -v报错

1.问题描述&#xff1a; 明明全局已安装 pnpm &#xff0c;但在vscode默认终端 powershell 执行 pnpm -v 却报错&#xff1a; 2.问题根因&#xff1a; 原因是 PowerShell 执行策略问题。 3.解决方案&#xff1a; 以管理员身份运行 PowerShell 查看 PowerShell 的执行策略…...

最新保姆级Anaconda和Pycharm安装激活过程(2024最新版本)

Anaconda和Pycharm安装过程 Anaconda安装过程第一步第二步第三步第四步第五步第六步第七步第八步第九步Pycharm 安装过程&#xff1a;第一步第二步第三步第四步第五步第六步---激活过程第七步第八步第九步第十步第十一步第十二步第十三步第十四步Anaconda和Pycharm软件百度网盘…...

虚幻5|布料模拟

打开骨骼网格体 1.Mass Prooerties 如果给角色施加风力&#xff0c;密度越大越难飘&#xff0c;相反密度越小飘动浮度也小 2.Material Proerties Edge Stiffness,对衣服的折痕处的调整&#xff0c;其值越大就越能维持原本的折痕&#xff0c;相反折痕就会变小&#xff0c;但…...

K8S 存储

K8S&#xff08;Kubernetes&#xff09;的存储是容器化应用程序中非常重要的一部分&#xff0c;它帮助用户在不同场景下管理和存储数据。K8S提供了多种存储方式&#xff0c;以满足不同的存储需求。以下是对K8S存储的详细解析&#xff1a; 一、K8S存储类型 K8S的存储类型主要分…...

Kafka Manager支持jdk1.8的部署和使用

一、Kafka Manager简介 Kafka Manager 可能是现在能找到的最好的可视化的Kafka管理工具, 感谢Yahoo的开源; 使用Kafka Manager, 基本上之前需要运行Kafka相应命令行工具的工作现在都可以可视化的完成:创建Topic, 调整消息保存时长, Partition数量等等配置;管理Topic, 包括Reas…...

vmware和virtualbox优缺点

vmware和virtualbox优缺点 &#xff0c;都可以搭建本地虚拟机&#xff0c;他们有什么优缺点&#xff0c;两个都用过 &#xff0c;本次打算直接用virtualbox搭建本地虚拟机&#xff0c;比较轻量级 VirtualBox的优点&#xff1a; 免费使用&#xff1a;VirtualBox是一…...

[C++进阶]二叉树进阶的一些面试题(一)

首先我们先回忆我们过去学的二叉树和最近学的二叉搜索树,来完成下面的题目: 606. 根据二叉树创建字符串 这道题属于与基础题,首先我们观察输入输出样例可以得到如果root->left为空,root->right不为空时,我们的空格仍然需要保留,如果当前节点有两个孩子&#xff0c;那我…...

【Python单元测试】学习笔记1

文章目录 01-单元测试基础什么是单元测试常用的文件结构运行单元测试 02. 断言函数03. Test Fixtures什么是Test Fixtures模块级别的Fixtures类级别的Fixtures方法级别的Fixtures 04.Mock python单元测试学习笔记1&#xff1a;https://blog.csdn.net/qq_42761751/article/detai…...

NVDLA专题10:具体模块介绍——Planar Data Processor

概述 平面数据处理器(Planar Data Processor, PDP)沿宽x高的前两个维度平面执行操作&#xff0c;在NVDLA版中&#xff0c;PDPD旨在实现池化层&#xff0c;module定义在NV_NVDLA_pdp.v。支持最大、最小和平均池化方法。平面内的几个相邻输入元素将被发送到非线性函数来计算一个…...

面向财商人群的AI垂直产品 —— AI股票助手

在数字化转型的大潮中,AI技术正在重塑各行各业,尤其是金融市场。对于那些渴望在瞬息万变的股市中保持敏锐洞察力的金融分析师、投资者及股票爱好者来说,一款强大而智能的工具显得尤为重要。今天,我们将向大家介绍一款专为财商人群打造的AI垂直产品——AI股票助手。 一、产…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...