【理想解法学习笔记】

news2025/3/12 2:15:40

目录

    • 理想解法
      • 原理简介
      • 算法步骤
      • 属性值规范化方法
      • 代码示例

理想解法

原理简介

 TOPSIS(Technique for Order Preference by Simi larity to IdealSolution)法是一种逼近理想解的排序方法。其基本的处理思路是:首先建立初始化决策矩阵,而后基于规范化后的初始矩阵,找出有限方案中的最优方案和最劣方案(也就是正、负理想解),然后分别计算各个评价对象与最优方案和最劣方案的距离,获得各评价方案与最优方案的相对接近程度,最后进行排序,并以此作为评价方案优劣的依据。

 设多属性决策方案集为 D = { d 1 , d 2 , . . . , d m } D=\left \{ d_1,d_2,...,d_m \right \} D={d1,d2,...,dm},衡量方案优劣的属性变量为 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn。,这时方案集 D D D中的每个方案 d i ( i = 1 , 2 , ⋯ , m ) d_i(i=1,2,⋯,m) di(i=12m) n n n个属性值构成的向量是 [ a i 1 , a i 2 , . . . , a i n ] \left [ a_{i1},a_{i2},...,a_{in} \right ] [ai1,ai2,...,ain],它作为 n n n维空间中的一个点,能唯一地表征方案 d i d_i di。正理想解 C ∗ C^* C是一个方案集 D D D中并不存在的虚拟的最佳方案,它的每个属性值都是决策矩阵中该属性的最优值;而负理想解 C 0 C^0 C0则是虚拟的最差方案,它的每个属性值都是决策矩阵中该属性的最差值。在 n n n维空间中,将方案集 D D D中的各备选方案 d i d_i di.与正理想解 C ∗ C^* C和负理想解 C 0 C^0 C0的距离进行比较,既靠近正理想解又远离负理想解的方案就是方案集D中的最优方案,并可以据此排定方案集D中各备选方案的优先序。对比备选方案和理想解需要定义适合的距离测度,TOPSIS所用的是欧几里得距离。

算法步骤

假设初始的决策矩阵 A A A为:
A = [ a 11 … a 1 j … a 1 n ⋮ ⋮ ⋮ ⋮ ⋮ a i 1 … a i j … a i n ⋮ ⋮ ⋮ ⋮ ⋮ a m 1 … a m j … a m n ] A=\begin{bmatrix} a_{11}& \dots& a_{1j}& \dots &a_{1n} \\ \vdots& \vdots& \vdots& \vdots&\vdots\\ a_{i1}& \dots& a_{ij}& \dots &a_{in}\\ \vdots& \vdots& \vdots& \vdots&\vdots\\ a_{m1}& \dots& a_{mj}& \dots &a_{mn}\\ \end{bmatrix} A=a11ai1am1a1jaijamja1nainamn
(1)对初始决策矩阵 A A A的所有备选方案的每一个属性进行规范化处理,即对 A A A的每一个列向量 [ a 1 j , a 2 j , . . . , a m j ] T , j ∈ 1 , . . . , n \left [ a_{1j},a_{2j},...,a_{mj} \right ]^T,j\in 1,...,n [a1j,a2j,...,amj]T,j1,...,n规范化处理得到规范化的决策矩阵 B = ( b i j ) m × n B=\left ( b_{ij} \right )_{m\times n} B=(bij)m×n.
b i j = a i j ∑ i = 1 m a i j 2 , i = 1 , . . . , m , j = 1 , . . . , n b_{ij}=\frac{a_{ij}}{\sqrt{\sum_{i=1}^{m}a_{ij}^2}},i=1,...,m,j=1,...,n bij=i=1maij2 aij,i=1,...,m,j=1,...,n
(2)构造加权规范阵,假设 n n n个属性的权重构成的权重向量为 ω = [ ω 1 , ω 2 , . . . , ω n ] ⊤ \omega=\left [ \omega_1,\omega_2,...,\omega_n \right ]^\top ω=[ω1,ω2,...,ωn],将规范化的决策矩阵 B = ( b i j ) m × n B=\left ( b_{ij} \right )_{m\times n} B=(bij)m×n的每一行与权重向量对应相乘即得到加权规范阵 C = ( c i j ) m × n C=\left ( c_{ij} \right )_{m\times n} C=(cij)m×n
c i j = b i j ∗ ω j , j = 1 , . . . , n , i = 1 , . . . , m c_{ij}=b_{ij}\ast \omega_j,j=1,...,n,i=1,...,m cij=bijωj,j=1,...,n,i=1,...,m
(3)确定正理想解 C ∗ C^* C和负理想解 C 0 C^0 C0,对于成本型属性,选择最小值,对于效益型属性,选择最大值。遍历 C C C的每一列 C j ( j = 1 , . . . , n ) C_j(j=1,...,n) Cj(j=1,...,n),根据指标类型选择每一列的最大值或最小值。
c j ∗ = { max ⁡ { C j } , j 为 效 益 型 指 标 min ⁡ { C j } , j 为 成 本 型 指 标 c_{j}^*=\begin{cases} \max\left \{ C_{j} \right \},j为效益型指标 \\ \min\left \{ C_{j} \right \},j为成本型指标 \end{cases} cj={max{Cj},jmin{Cj},j

c j 0 = { min ⁡ { C j } , j 为 效 益 型 指 标 max ⁡ { C j } , j 为 成 本 型 指 标 c_{j}^0=\begin{cases} \min\left \{ C_{j} \right \},j为效益型指标 \\ \max\left \{ C_{j} \right \},j为成本型指标 \end{cases} cj0={min{Cj},jmax{Cj},j

其中 c j ∗ , c j 0 c_j^*,c_j^0 cj,cj0分别表示正、负理想解的第 j j j个元素取值。

(4)计算各方案到两个理想解的距离,即计算加权规范阵 C C C的每一行 C i ( i = 1 , . . . , m ) C_i(i=1,...,m) Ci(i=1,...,m)与理想解 C ∗ , C 0 C^*,C^0 C,C0的距离。

  • 距离正理想解的距离 s i ∗ s_i^* si
    s i ∗ = ∑ j = 1 n ( c i j − c j ∗ ) 2 s_i^*=\sqrt{\sum_{j=1}^{n}\left ( c_{ij}-c_j^* \right )^2 } si=j=1n(cijcj)2

  • 距离负理想解的距离 s i 0 s_i^0 si0
    s i 0 = ∑ j = 1 n ( c i j − c j 0 ) 2 s_i^0=\sqrt{\sum_{j=1}^{n}\left ( c_{ij}-c_j^0 \right )^2 } si0=j=1n(cijcj0)2

(5)计算各方案的排序指标值,按照指标值大小确定方案排序
f i ∗ = s i 0 s i 0 + s i ∗ , i = 1 , . . . , m f_i^*=\frac{s_i^0}{s_i^0+s_i^*},i=1,...,m fi=si0+sisi0,i=1,...,m

属性值规范化方法

数据的预处理又称属性值的规范化。

作用:

  • 在综合评价之前将属性的类型作一致化处理使得表中任-属性下性能越优的方案变换后的属性值越大;
  • 在用各种多属性决策方法进行分析评价时需要排除量纲的选用对决策或评估结果的影响;
  • 为了便于采用各种多属性决策与评估方法进行评价’需要把属性值表中的数值归一化,即把表中数值均变换到 [ 0 , 1 ] \left [ 0,1 \right ] [0,1]区间上。

常见方法:

设原始的决策矩阵为 A = ( a i j ) m × n A=\left ( a_{ij} \right )_{m\times n} A=(aij)m×n,变化后的决策矩阵为 B = ( b i j ) m × n B=\left ( b_{ij} \right )_{m\times n} B=(bij)m×n

  • 标准化处理

    在实际问题中,不同变量的测量单位往往不同,为了消除量纲效应,使每个变量都具有同等的表现力,数据分析中常对数据进行标准化处理,即
    b i j = a i j − μ j s j , i = 1 , . . . , m , j = 1 , . . . , n b_{ij}=\frac{a_{ij}-\mu_{j}}{s_j},i=1,...,m,j=1,...,n bij=sjaijμj,i=1,...,m,j=1,...,n
    其中 μ j = 1 m ∑ i = 1 m a i j \mu_{j}=\frac{1}{m}\sum_{i=1}^{m}a_{ij} μj=m1i=1maij表示第 j j j列均值, s j = 1 m − 1 ∑ i = 1 m ( a i j − u j ) 2 s_j=\sqrt{\frac{1}{m-1}\sum_{i=1}^{m}\left ( a_{ij}-u_j \right )^2} sj=m11i=1m(aijuj)2 表示第 j j j列方差, j = 1 , . . . , n j=1,...,n j=1,...,n

  • 线性变换

    • 效益型属性
      b i j = a i j a j m a x , j = 1 , . . . , n b_{ij}=\frac{a_{ij}}{a_j^{max}},j=1,...,n bij=ajmaxaij,j=1,...,n
      其中 a j m a x a_j^{max} ajmax表示决策矩阵 A A A j j j列的最大值。

    • 成本型属性
      b i j = 1 − a i j a j m a x , j = 1 , . . . , n b_{ij}=1-\frac{a_{ij}}{a_j^{max}},j=1,...,n bij=1ajmaxaij,j=1,...,n

  • 标准0-1变换

    • 效益型属性
      b i j = a i j − a j m i n a j m a x − a j m i n , j = 1 , . . . , n b_{ij}=\frac{a_{ij}-a_j^{min}}{a_j^{max}-a_j^{min}},j=1,...,n bij=ajmaxajminaijajmin,j=1,...,n
      其中 a j m a x , a j m i n a_j^{max},a_j^{min} ajmax,ajmin分别表示初始的决策矩阵 A A A j j j列的最大值、最小值。

    • 成本型属性
      b i j = a j m a x − a i j a j m a x − a j m i n , j = 1 , . . . , n b_{ij}=\frac{a_j^{max}-a_{ij}}{a_j^{max}-a_j^{min}},j=1,...,n bij=ajmaxajminajmaxaij,j=1,...,n

  • 区间属性变换

    对于区间属性,设第 j j j个属性最优属性区间为 [ a j 0 , a j ∗ ] \left [ a_j^0,a_j^* \right ] [aj0,aj],无法容忍下限为 a j l b a_j^{lb} ajlb,无法容忍上限为 a j u b a_j^{ub} ajub,则
    b i j = { 1 − ( a j 0 − a i j ) ( a j 0 − a j l b )  ,  a j l b ≤ a i j < a j 0 1  ,  a j 0 ≤ a i j ≤ a j ∗ 1 − ( a i j − a j ∗ ) ( a j u b − a j ∗ )  ,  a j ∗ < a i j ≤ a j u b 0  ,  o t h e r b_{ij}=\begin{cases} 1-\frac{\left ( a_j^0-a_{ij} \right ) }{\left ( a_j^0-a_j^{lb} \right )} & \text{ , } a_j^{lb}\le a_{ij}< a_j^0 \\ 1& \text{ , } a_j^{0}\le a_{ij}\le a_j^* \\ 1-\frac{\left ( a_{ij}-a_{j}^* \right ) }{\left ( a_j^{ub}-a_j^{*} \right )}& \text{ , } a_j^*< a_{ij}\le a_j^{ub} \\ 0& \text{ , } other \end{cases} bij=1(aj0ajlb)(aj0aij)11(ajubaj)(aijaj)0 , ajlbaij<aj0 , aj0aijaj , aj<aijajub , other

  • 向量规范化
    b i j = a i j ∑ i = 1 m a i j 2 , j = 1 , . . . , n b_{ij}=\frac{a_{ij}}{\sqrt{\sum_{i=1}^{m}a_{ij}^2} },j=1,...,n bij=i=1maij2 aij,j=1,...,n
    规范化后,各方案同一属性值的平方和为1。

代码示例

​  假设现有5个高校的数据,需要根据这些数据对高校进行评估。

人均专著/(本/人)生师比科研经费/(万元每年)逾期毕业率/%
10.1550004.7
20.2660005.6
30.4770006.7
40.910100002.3
51.224001.8

​  对上面的4个指标进行分析,人均专著、科研经费属于效益型指标,逾期毕业率属于成本型指标,而生师比属于区间型指标,假设生师比最优区间为 [ 5 , 6 ] \left [ 5,6 \right ] [56],无法容忍下限为2,无法容忍上限为12,需要对其中一些指标进行转换。给出python代码如下:

import numpy as np

A = np.array([[0.1, 5, 5000, 4.7],
              [0.2, 6, 6000, 5.6],
              [0.4, 7, 7000, 6.7],
              [0.9, 10, 10000, 2.3],
              [1.2, 2, 400, 1.8]])

# 师生比的最优区间
opt_range = [5, 6]
# 师生比的容忍上下限
to_lb = 2
to_ub = 12

# 属性的权向量
omega = np.array([0.2, 0.3, 0.4, 0.1])

# 对师生比进行区间属性进行规范化处理
def range_trans(param, opt_range, lb, ub):
    """
    :param param: 待转换的元素值
    :param opt_range: 最优区间
    :param lb: 无法容忍下限
    :param ub: 无法容忍上限
    :return:
    """
    if lb <= param < opt_range[0]:
        return 1 - (opt_range[0] - param)/(opt_range[0] - lb)
    elif param <= opt_range[1]:
        return 1
    elif param <= ub:
        return 1 - (param - opt_range[1])/(ub - opt_range[1])
    else:
        return 0

# Press the green button in the gutter to run the script.
if __name__ == '__main__':

    # 方案数m,属性数n
    m, n = np.shape(A)

    # 对师生比作区间变换
    for i in range(m):
        A[i, 1] = range_trans(A[i, 1], opt_range, to_lb, to_ub)

    # 对逾期毕业率做标准0-1变换
    a4_max = max(A[:, 3])
    a4_min = min(A[:, 3])
    for i in range(m):
        A[i, 3] = (a4_max - A[i, 3])/(a4_max - a4_min)

    # 属性进行向量规范化
    B = np.zeros([m, n])
    for i in range(m):
        for j in range(n):
            B[i, j] = A[i, j] / np.linalg.norm(A[:, j])

    # 构建加权规范阵
    omega_mat = np.tile(omega, (m, 1))
    C = B * omega_mat

    # 求正、负理想解。前两个属性以及第三个
    max_vec = np.amax(C, axis=0)
    min_vec = np.amin(C, axis=0)

    # 计算各方案与正、负理想解之间的距离
    res_array = np.zeros([m])
    for i in range(m):
        d0 = np.linalg.norm(max_vec - C[i, :])
        d1 = np.linalg.norm(min_vec - C[i, :])
        res_array[i] = d1/(d0 + d1)
    print(res_array.tolist())

运行结果如下:

[0.5240156414355697, 0.5725615802335773, 0.61086314578445, 0.7027067250301631, 0.32916727350419983]

从运行结果上来看,数值越大说明对该高校的评估结果越好,具体的排名为 [ 4 , 3 , 2 , 1 , 5 ] \left [ 4,3,2,1,5 \right ] [4,3,2,1,5],因此第4所高校总体来说评价最好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2313502.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

98.在 Vue3 中使用 OpenLayers 根据 Resolution 的不同显示不同的地图

在 Vue3 中使用 OpenLayers 根据 Resolution 的不同显示不同的地图 前言 在 Web GIS&#xff08;地理信息系统&#xff09;应用开发中&#xff0c;地图的 Resolution&#xff08;分辨率&#xff09;是一个重要的概念。不同的 Resolution 适用于不同的地图层级&#xff0c;有时…

unity学习64,第3个小游戏:一个2D跑酷游戏

目录 学习参考 素材资源导入 1 创建项目 1.1 创建1个2D项目 1.2 导入素材 2 背景图bg 2.0 bg素材 2.1 创建背景 2.2 修改素材&#xff0c;且修改摄像机等 2.2.1 修改导入的原始prefab素材 2.2.2 对应调整摄像机 2.2.3 弄好背景 2.3 背景相关脚本实现 2.3.1 错误…

在本地部署DeepSeek等大模型时,需警惕的潜在安全风险

在本地部署DeepSeek等大模型时&#xff0c;尽管数据存储在本地环境&#xff08;而非云端&#xff09;&#xff0c;但仍需警惕以下潜在安全风险&#xff1a; 1. 模型与数据存储风险 未加密的存储介质&#xff1a;若训练数据、模型权重或日志以明文形式存储&#xff0c;可能被物…

【redis】string类型相关操作:SET、GET、MSET、MGET、SETNX、SETEX、PSETEX

文章目录 二进制存储编码转换SET 和 GETSETGET MSET 和 MGETSETNX、SETEX 和 PSETEX Redis 所有的 key 都是字符串&#xff0c;value 的类型是存在差异的 二进制存储 Redis 中的字符串&#xff0c;直接就是按照二进制数据的方式存储的 不仅仅可以存储文本数据&#xff0c;还可…

GaussDB安全配置指南:从认证到防御的全方面防护

一、引言 随着企业数据规模的扩大和云端化进程加速&#xff0c;数据库安全性成为运维的核心挑战之一。GaussDB作为一款高性能分布式数据库&#xff0c;提供了丰富的安全功能。本文将从 ​认证机制、权限控制、数据加密、审计日志​ 等维度&#xff0c;系统性地讲解如何加固 Ga…

Ubuntu20.04搭建gerrit code review

一、环境准备 1. 安装 Java 环境‌ Gerrit 依赖 Java 运行环境&#xff08;推荐 JDK 8&#xff09;&#xff1a; sudo apt install openjdk-11-jdk 验证安装&#xff1a; java -version ‌2. 安装 Git sudo apt install git ‌3. 可选依赖 数据库‌&#xff1a;Gerrit …

MacOS安装FFmpeg和FFprobe

按照网上很多教程安装&#xff0c;结果都失败了&#xff0c;后来才发现是路径问题&#xff0c;其实安装过程很简单&#xff08;无奈&#xff09; 第一步&#xff1a; 在官网下载 打开页面后&#xff0c;可以看到FFmpeg、FFprobe、FFplay和FFserver的下载图标 第二步&#xff1…

Redis7系列:设置开机自启

前面的文章讲了Redis和Redis Stack的安装&#xff0c;随着服务器的重启&#xff0c;导致Redis 客户端无法连接。原来的是Redis没有配置开机自启。此文记录一下如何配置开机自启。 1、修改配置文件 前面的Redis和Redis Stack的安装的文章中已经讲了redis.config的配置&#xf…

SpringAI介绍及本地模型使用方法

博客原文地址 前言 Spring在Java语言中一直稳居高位&#xff0c;与AI的洪流碰撞后也产生了一些有趣的”化学反应“&#xff0c;当然你要非要说碰撞属于物理反应也可以&#xff0c; 在经历了一系列复杂的反应方程后&#xff0c;Spring家族的新成员——SpringAI&#xff0c;就…

Unity 基础知识总结(持续更新中...)

引擎基础 Unity有哪几个主要窗口&#xff1f; Scene窗口 用于场景搭建和UI界面拼接 Game窗口 游戏运行预览 Hierarchy窗口 查看和调整场景对象层级结构 Project窗口 游戏工程资源 Inspector创建 属性查看器&#xff0c;属性设置、脚本组件挂载 Unity提供了几种光源…

IDEA接入阿里云百炼中免费的通义千问[2025版]

安装deepseek 上一篇文章IDEA安装deepseek最新教程2025中说明了怎么用idea安装codeGPT插件&#xff0c;并接入DeepSeek&#xff0c;无奈接入的官方api已经不能使用了&#xff0c;所以我们尝试从其他地方接入 阿里云百炼https://bailian.console.aliyun.com/ 阿里云百炼‌是阿…

3.03-3.09 Web3 游戏周报:Sunflower Land 周留存率 74.2%,谁是本周最稳链游?

回顾上周的区块链游戏概况&#xff0c;查看 Footprint Analytics 与 ABGA 最新发布的数据报告。 【3.03–3.09】Web3 游戏行业动态 Sui 背后开发公司 Mysten Labs 宣布收购游戏开发平台 ParasolYescoin 创始人因合伙人纠纷被警方带走&#xff0c;案件升级为刑事案件Animoca B…

NVIDIA k8s-device-plugin源码分析与安装部署

在《kubernetes Device Plugin原理与源码分析》一文中&#xff0c;我们从源码层面了解了kubelet侧关于device plugin逻辑的实现逻辑&#xff0c;本文以nvidia管理GPU的开源github项目k8s-device-plugin为例&#xff0c;来看看设备插件侧的实现示例。 一、Kubernetes Device Pl…

langChainv0.3学习笔记(初级篇)

LangChain自0.1版本发布以来&#xff0c;已经历了显著的进化&#xff0c;特别是向AI时代的适应性提升。在0.1版本中&#xff0c;LangChain主要聚焦于提供基本的链式操作和工具集成&#xff0c;帮助开发者构建简单的语言模型应用。该版本适用于处理简单任务&#xff0c;但在应对…

聚焦两会:科技与发展并进,赛逸展2025成创新新舞台

在十四届全国人大三次会议和全国政协十四届三次会议期间&#xff0c;代表委员们围绕多个关键议题展开深入讨论&#xff0c;为国家未来发展谋篇布局。其中&#xff0c;技术竞争加剧与经济转型需求成为两会焦点&#xff0c;将在首都北京举办的2025第七届亚洲消费电子技术贸易展&a…

Ubuntu 24.04 安装与配置 JetBrains Toolbox 指南

&#x1f4cc; 1. JetBrains Toolbox 介绍 JetBrains Toolbox 是 JetBrains 开发的工具管理器&#xff0c;可用于安装、更新和管理 IntelliJ IDEA、PyCharm、WebStorm、CLion 等。本指南记录了 JetBrains Toolbox 在 Ubuntu 24.04 上的 安装、路径调整、权限管理 及 遇到的问题…

【AI】神经网络|机器学习——图解Transformer(完整版)

Transformer是一种基于注意力机制的序列模型,最初由Google的研究团队提出并应用于机器翻译任务。与传统的循环神经网络(RNN)和卷积神经网络(CNN)不同,Transformer仅使用自注意力机制(self-attention)来处理输入序列和输出序列,因此可以并行计算,极大地提高了计算效率…

【VUE2】第二期——生命周期及工程化

目录 1 生命周期 1.1 介绍 1.2 钩子 2 可视化图表库 3 脚手架Vue CLI 3.1 使用步骤 3.2 项目目录介绍 3.3 main.js入口文件代码介绍 4 组件化开发 4.1 组件 4.2 普通组件注册 4.2.1 局部注册 4.2.2 全局注册 1 生命周期 1.1 介绍 Vue生命周期&#xff1a;就是…

贪心算法三

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;了解什么是贪心算法&#xff0c;并且掌握贪心算法。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! >…

猫耳大型活动提效——组件低代码化

1. 引言 猫耳前端在开发活动的过程中&#xff0c;经历过传统的 pro code 阶段&#xff0c;即活动页面完全由前端开发编码实现&#xff0c;直到 2020 年接入公司内部的低代码活动平台&#xff0c;满足了大部分日常活动的需求&#xff0c;运营可自主配置活动并上线&#xff0c;释…