Python 数学建模——Vikor 多标准决策方法

news2024/11/23 7:26:59

文章目录

    • 前言
    • 原理
    • 步骤
    • 代码实例

前言

  Vikor 归根到底其实属于一种综合评价方法。说到综合评价方法,TOPSIS(结合熵权法使用)、灰色关联度分析、秩和比法等方法你应该耳熟能详。Vikor 未必比这些方法更出色,但是可以拓展我们的视野。接下来先介绍 Vikor 方法的原理,再结合一个例子使用 Vikor 方法进行 Python 建模。

原理

  Vikor 方法是一种基于多个标准,选择最好的(折中的)策略的方法。非常类似于 TOPSIS 综合评价方法
  多标准决策(MCDM)问题描述为:现有 n n n 个可行方案,每个方案均有 m m m 个指标,用 f i j f_{ij} fij 表示第 i i i 个方案的第 j j j 个指标。现在要求出多准则意义上的最佳(折衷)解决方案。例如,现在有 A 1 − A 4 A_1-A_4 A1A4 四架飞机(即 n = 4 n=4 n=4),每架飞机有 m = 6 m=6 m=6 个指标,如下表所示,请你选出多准则意义上最好的飞机。

飞机编号最大速度飞行半径最大负载费用可靠性灵敏度
A 1 A_1 A1 2.0 2.0 2.0 1500 1500 1500 20000 20000 20000 5500000 5500000 5500000 0.5 0.5 0.5 1 1 1
A 2 A_2 A2 2.5 2.5 2.5 2700 2700 2700 18000 18000 18000 6500000 6500000 6500000 0.3 0.3 0.3 0.5 0.5 0.5
A 3 A_3 A3 1.8 1.8 1.8 2000 2000 2000 21000 21000 21000 4500000 4500000 4500000 0.7 0.7 0.7 0.7 0.7 0.7
A 4 A_4 A4 2.2 2.2 2.2 1800 1800 1800 20000 20000 20000 5000000 5000000 5000000 0.5 0.5 0.5 0.5 0.5 0.5

这是司守奎等的《Python 数学实验与建模》上的一个例题。

步骤

  Vikor 评价法的步骤如下:

  1. 对每个指标 f i j f_{ij} fij 进行处理,使得处理后的指标都是极大型指标,仍用 f i j f_{ij} fij 表示。无需归一化、无量纲化。

极大型指标指的是值越大越好的指标,如效率、产能、可靠性等,又称“效益型指标”。相对地,极小型指标指的是值越小越好的指标,如能耗、费用等,又称“成本性指标”。还有一类中间型指标,其值太大太小都不好,位于一个区间才合适,例如人的 BMI。

  1. 对每个指标确定正理想解 f j + = max ⁡ 1 ≤ i ≤ n ( f i j ) {{f}_{j}^{+}}={\max\limits_{1\le i\le n}(}{{f}_{ij}}) fj+=1inmax(fij) ,以及负理想解 f j − = min ⁡ 1 ≤ i ≤ n ( f i j ) {{f}_{j}^{-}}={\min\limits_{1\le i\le n}(}{{f}_{ij}}) fj=1inmin(fij)
  2. 对于每个方案,计算 S S S 值(综合距离,表示方案与正理想解之间的综合距离)和 R R R 值(个体最大距离,表示方案在最不利标准下与正理想解之间的距离): S i = ∑ j = 1 m w j ( f j + − f i j ) f j + − f j − S_i=\sum_{j=1}^{m}{\cfrac{w_j(f_j^+-f_{ij})}{f_j^+-f_j^-}} Si=j=1mfj+fjwj(fj+fij) R i = max ⁡ 1 ≤ j ≤ m ( w j ( f j + − f i j ) f j + − f j − ) R_i=\max\limits_{1\leq j\leq m}\left(\cfrac{w_j(f_j^+-f_{ij})}{f_j^+-f_j^-}\right) Ri=1jmmax(fj+fjwj(fj+fij))这里 w j w_j wj 是给每个标注取的权重,默认情况下那么都取 1 / m 1/m 1/m
  3. 计算每个方案的 Q Q Q 值,这个值是综合所有方案的 S S S 值与 R R R 值得出的结果: Q i = v × S i − S + S − − S + + ( 1 − v ) × R i − R + R − − R + {{Q}_{i}}=v\times \frac{{{S}_{i}}-{{S}^{+}}}{{{S}^{-}}-{{S}^{+}}}+(1-v)\times \frac{{{R}_{i}}-{{R}^{+}}}{{{R}^{-}}-{{R}^{+}}} Qi=v×SS+SiS++(1v)×RR+RiR+其中,
    • S + = min ⁡ 1 ≤ i ≤ n ( S i ) S^+=\min\limits_{1\leq i\leq n}(S_i) S+=1inmin(Si) S − = max ⁡ 1 ≤ i ≤ n ( S i ) S^-=\max\limits_{1\leq i\leq n}(S_i) S=1inmax(Si) R + = min ⁡ 1 ≤ i ≤ n ( R i ) R^+=\min\limits_{1\leq i\leq n}(R_i) R+=1inmin(Ri) R − = max ⁡ 1 ≤ i ≤ n ( R i ) R^-=\max\limits_{1\leq i\leq n}(R_i) R=1inmax(Ri)
    • v v v 是一个在 0 0 0 1 1 1 之间的权重,通常取 0.5 0.5 0.5,表示 S S S 值和 R R R 值的平衡。当 v > 0.5 v>0.5 v>0.5 时,表示根据最大群体效用的决策机制进行决策;当 v < 0.5 v<0.5 v<0.5 时,表示根据最小个体遗憾的决策机制进行决策。数学建模时,这个 v v v 可能适合拿来灵敏度分析。
  4. 对这个 Q Q Q 值进行升序排序,就是各个方案的最终排名。一般取 Q Q Q 值最小的为最优。

参考文献:VIKOR方法_vikor方法简介-CSDN博客

代码实例

  就使用上面评价飞机的那个例子。首先观察到费用是一个极小型指标,需要极大化。书上直接给出了使用比例变换法将所有指标极大归一化的结果,因此下面的代码中直接使用这个结果:

import pandas as pd
import numpy as np
from sklearn import preprocessing
import matplotlib.pyplot as plt

# 这个就是极大归一化后的数据
data = pd.DataFrame([[0.8,0.5556,0.9524,0.8182,0.7143,1],
                    [1,1,0.8571,0.6923,0.4286,0.5],
                    [0.72,0.7407,1,1,1,0.7],
                    [0.88,0.6667,0.9524,0.9,0.7143,0.5]])


# 确定正负理想解
f_best = data.max(axis = 0)
f_worst = data.min(axis = 0)
# 计算 S 和 R
S = []
R = []
for i in range(data.index.size):
    S.append(sum((f_best - data.iloc[i,:])/(f_best - f_worst))/data.columns.size)
    R.append(max((f_best - data.iloc[i,:])/(f_best - f_worst))/data.columns.size)

# 计算 Q
S = np.array(S)
R = np.array(R)
qq = [[],[],[],[]]
v_arr = np.linspace(0,1,1000)
for v in v_arr:
    Q = 0
    if(S.max() - S.min() != 0):
        Q += v * (S - S.min()) / (S.max() - S.min())
    if(R.max() - R.min() != 0):
        Q += (1 - v) * (R - R.min()) / (R.max() - R.min())
    for i in range(len(Q)):
        qq[i].append(Q[i])

# 作图部分
plt.rc('text',usetex = True)
plt.plot(v_arr,qq[0],label = '$A_1$')
plt.plot(v_arr,qq[1],label = '$A_2$')
plt.plot(v_arr,qq[2],label = '$A_3$')
plt.plot(v_arr,qq[3],label = '$A_4$')
plt.xlabel('$v$')
plt.ylabel('$Q_i$')
plt.legend()
plt.show()

  上面的代码,我尝试了 ( 0 , 1 ) (0,1) (0,1) 中的许多 v v v 值,作出了 Q i ( i = 1 , 2 , 3 , 4 ) Q_i(i=1,2,3,4) Qi(i=1,2,3,4) 关于 v v v 的图线,如下图所示:

  可以看出,无论 v v v 怎么选,结果都是固定的: A 3 > A 1 > A 4 > A 2 {{A}_{3}}>{{A}_{1}}>{{A}_{4}}>{{A}_{2}} A3>A1>A4>A2。这和熵权法的结果一样,而 TOPSIS 的结果是 A 3 > A 1 > A 2 > A 4 {{A}_{3}}>{{A}_{1}}>{{A}_{2}}>{{A}_{4}} A3>A1>A2>A4。总而言之 Vikor 还是个比较不错的方法。

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

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

相关文章

从GreaterWMS学习仓库管理系统

前言 客户并不知道&#xff08;确切地&#xff09;他们需要什么&#xff1f; 需要通过需求分析工具和技术&#xff0c;利用宽进严出的需求池&#xff0c;需求验证使用原型测试&#xff0c;场景分析&#xff0c;专家评审&#xff0c;交叉检查等手段&#xff0c;经过充分验证的需…

牛耕分解+形态学分割 全覆盖路径规划(二)Part1. 分割

书接上文&#xff1a;牛耕分解形态学分割 全覆盖路径规划&#xff08;一&#xff09; 前置文章1&#xff1a;房屋区域分割算法 Morphological Segmentation 前置文章2&#xff1a;牛耕覆盖算法 Boustrophedon Coverage Path Planning 项目地址&#xff1a;ipa320 / ipa_cove…

基于Kubernetes部署Spark:spark on kubernetes

什么是spark&#xff1f; spark是一种基于内存的快速、通用、可扩展的的数据分析计算引擎。 Hadoop、Hive、Spark是什么关系&#xff1f; 大数据技术生态中&#xff0c;Hadoop、Hive、Spark是什么关系&#xff1f;| 通俗易懂科普向_哔哩哔哩_bilibili Hadoop 与 HDFS (Hado…

【腾讯云】AI驱动TDSQL-C Serveress 数据库技术实战营-如何是从0到1体验电商可视化分析小助手得统计功能,一句话就能输出目标统计图

欢迎来到《小5讲堂》 这是《腾讯云》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 背景效果图流程图创建数据库基本信息数据库配置设置密码控制台开启…

腾讯联合多所高校出品!AI游戏生成模型 GameGen-O 轻松生成高质量游戏元素

最近&#xff0c;香港和中国的几所大学与腾讯联合研发了一个名为 GameGen-O 的 AI 模型&#xff0c;专门用于创建开放世界视频游戏的模拟。 GameGen-O 的功能不仅仅限于生成高质量的游戏内容&#xff0c;它还模拟了多种游戏引擎的特性&#xff0c;能够创造出丰富多样的游戏元素…

字符分类函数和字符串函数

Hello~,欢迎大家来到我的博客进行学习&#xff01; 目录 1.字符分类函数&#x1f618;1.1解释以及使用&#x1f92f;1.2将字符分类函数组合使用&#x1f47b;2 .字符转换函数&#x1f9d0; 1.字符分类函数&#x1f618; 1.1解释以及使用&#x1f92f; 在键盘上敲的字符有许多…

揭秘高效日志管理:解锁数据宝藏,驱动业务精准决策

作者简介&#xff1a;我是团团儿&#xff0c;是一名专注于云计算领域的专业创作者&#xff0c;感谢大家的关注 座右铭&#xff1a; 云端筑梦&#xff0c;数据为翼&#xff0c;探索无限可能&#xff0c;引领云计算新纪元 个人主页&#xff1a;团儿.-CSDN博客 目录 前言&#…

duckdb 连接postgres 和 jdbc 的使用

why&#xff1f; 主要是特别快 嵌入式&#xff0c;不需要服务器&#xff0c;使用超级方便 扩展机制灵活&#xff0c;可以直接读取CSV、JSON、Parquet等文件 Parquet文件格式详解&#xff08;含行、列式存储区别&#xff09;_parquet格式-CSDN博客 采用列式存储&#xff08;用…

边缘计算网关:连接中心计算与边缘设备的重要桥梁-天拓四方

一、边缘计算网关&#xff1a;重新定义信息高速公路的“路标” 边缘计算网关&#xff0c;作为边缘计算生态系统中的核心组件&#xff0c;不仅承载着数据传输的功能&#xff0c;更是智能信息处理的关键节点。它通过分布式计算架构&#xff0c;将数据处理任务前置到网络边缘&…

JDK 收费了,怎么应对?难道 JDK 8 一直用下去吗?

最近遇到一个问题&#xff1a;Oracle JDK 8 在 ARM 机器上性能特别差&#xff01; 我的第一直觉就是是不是 JDK 8 在 ARM 不兼容&#xff1f; 为了研究这个问题&#xff0c;我探究了一圈&#xff0c;主要是找找有没有同行遇到这个问题&#xff0c;在找的过程中呢&#xff0c;发…

基于vue框架的宠物领养系统l3a76(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,宠物信息,宠物领养,宠物品种,团队信息,入团申请,团队活动 开题报告内容 基于Vue框架的宠物领养系统开题报告 一、引言 随着宠物文化的普及和人们对宠物情感的日益加深&#xff0c;宠物领养已成为社会关注的热点之一。然而&#…

# 大模型的第一个杀手级应用场景出来了

大家终于都意识到大模型首先改变的是软件行业自己&#xff0c;而软件的根基是代码生成。代码生成第一波就是AI辅助开发&#xff0c;这个会是大模型第一个杀手级应用。大家苦苦逼问自己的大模型杀手级应用&#xff0c;为什么会是辅助编程&#xff0c;这里说下什么&#xff1a; 必…

利用shuji还原webpack打包源码

0 前言 前段时间做一个银行的项目&#xff0c;是在别人已经打过好多次的基础上继续打&#xff0c;而且时间很短&#xff0c;也是没办法要有产出&#xff0c;这个银行很多站点都是webpack打包&#xff0c;就新学了一个点&#xff1a;利用shuji获取webpack打包站源码&#xff08…

2025届京东校招薪酬全面上调,加薪20%!

就在近日京东官方发布声明&#xff0c;今年 2025 届校招岗位的薪资将全面上调&#xff0c;再次加薪&#xff01;其中&#xff0c;采销、技术、产品等核心岗位薪酬上调不低于20%&#xff0c;产研类岗位更狠&#xff0c;算法岗平均起薪涨幅超75%&#xff0c;硬件和设计等岗位起薪…

2024年06月中国电子学会青少年软件编程(图形化)等级考试试卷(一级)答案 + 解析

青少年软件编程&#xff08;图形化&#xff09;等级考试试卷&#xff08;一级&#xff09; 分数&#xff1a;100 题数&#xff1a;37 一、单选题 音乐Video Game1的时长将近8秒&#xff0c;点击一次角色&#xff0c;下列哪个程序不能完整地播放音乐两次&#xff1f;&#xff0…

java实现根据延迟法定退休政策计算退休年龄

一、计算规则 从2025年1月1日起&#xff0c;男职工和原法定退休年龄为五十五周岁的女职工&#xff0c;法定退休年龄每四个月延迟一个月&#xff0c;分别逐步延迟至六十三周岁和五十八周岁&#xff1b;原法定退休年龄为五十周岁的女职工&#xff0c;法定退休年龄每二个月延迟一…

应急响应实战---是谁修改了我的密码?

前言&#xff1a;此次应急响应为真实案例&#xff0c;客户反馈无法通过密码登录服务器&#xff0c;疑似服务器被入侵 0x01 如何找回密码&#xff1f; 客户服务器为windows server2019&#xff0c;运维平台为PVE平台&#xff1b;实际上无论是windows系统或者是linux系统&#…

从简单分析到智能问数,Smartbi AIChat让数据回归业务

大数据产业创新服务媒体 ——聚焦数据 改变商业 在某科技公司&#xff0c;资深数据分析师李晨&#xff08;化名&#xff09;正忙于分析新产品的市场表现。面对传统自助式BI工具&#xff0c;李晨在功能界面中手动设置各种查询条件&#xff0c;进行了一番复杂的拖拉拽操作&#…

spring模块(六)spring监听器(3)广播与异步问题

发布事件和监听器之间默认是同步的&#xff1b;监听器则是广播形式。demo&#xff1a; event&#xff1a; package com.listener.demo.event;import com.listener.demo.dto.UserLogDTO; import org.springframework.context.ApplicationEvent;public class MyLogEvent extends…

界面控件DevExpress中文教程:如何PDF图形对象的可见性?

DevExpress拥有.NET开发需要的所有平台控件&#xff0c;包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress 近期重要版本v24.1已正式发布&#xff0c;该版本拥有众多新产…