前言

提醒:
文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。
其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展及意见建议,欢迎评论区讨论交流。

内容由AI辅助生成,仅经笔者审核整理,请甄别食用。

文章目录


一、VIKOR 方法概述

VIKOR(Multi-criteria Optimization and Compromise Solution)是由 Opricovic 提出的多准则决策(MCDM)方法,核心逻辑是通过“接近理想解的妥协解”排序方案。它结合“群体效用最大化”和“个体遗憾最小化”,适合解决多准则下的方案优选问题(如工程设计、供应链评估)。
在这里插入图片描述

二、核心步骤与公式(结合算法)

1. 输入:决策矩阵与准则权重
  • 决策矩阵A=(aij)n×m\mathbf{A} = (a_{ij})_{n \times m}A=(aij)n×mnnn准则数,mmm方案数,aija_{ij}aij是方案jjj在准则iii下的值)。
  • 准则权重wiw_iwi∑wi=1\sum w_i = 1wi=1,表示准则iii的重要性)。
2. 步骤 1:归一化决策矩阵(消除量纲)

对原始矩阵按列归一化,公式:
xˉij=aij∑j=1maij2\bar{x}_{ij} = \frac{a_{ij}}{\sqrt{\sum_{j=1}^m a_{ij}^2}} xˉij=j=1maij2aij

  • 作用:将不同量纲的准则值统一到[0,1][0,1][0,1]区间。
3. 步骤 2:确定理想解与负理想解

对每个准则iii,找到最优值fi∗f_i^*fi(最大化准则取最大值,最小化准则取最小值)和最劣值fi−f_i^-fi(反之):
fi∗=max⁡jxˉij,fi−=min⁡jxˉijf_i^* = \max_j \bar{x}_{ij}, \quad f_i^- = \min_j \bar{x}_{ij} fi=jmaxxˉij,fi=jminxˉij

4. 步骤 3:计算SjS_jSj(群体效用)与RjR_jRj(个体遗憾)
  • 群体效用SjS_jSj:方案jjj与理想解的“群体效用差”,公式:
    Sj=∑i=1nwi⋅fi∗−xˉijfi∗−fi−S_j = \sum_{i=1}^n w_i \cdot \frac{f_i^* - \bar{x}_{ij}}{f_i^* - f_i^-} Sj=i=1nwifififixˉij

    • 意义:SjS_jSj越小,方案对“群体效用”的贡献越大。
  • 个体遗憾RjR_jRj:方案jjj与理想解的“最大个体遗憾”,公式:
    Rj=max⁡i[wi⋅fi∗−xˉijfi∗−fi−]R_j = \max_i \left[ w_i \cdot \frac{f_i^* - \bar{x}_{ij}}{f_i^* - f_i^-} \right] Rj=imax[wifififixˉij]

    • 意义:RjR_jRj越小,方案的“最坏情况遗憾”越小。
5. 步骤 4:计算综合得分QjQ_jQj

融合SjS_jSjRjR_jRj,公式:
Qj=ν⋅Sj−S∗S−−S∗+(1−ν)⋅Rj−R∗R−−R∗Q_j = \nu \cdot \frac{S_j - S^*}{S^- - S^*} + (1-\nu) \cdot \frac{R_j - R^*}{R^- - R^*} Qj=νSSSjS+(1ν)RRRjR
其中:

  • S∗=min⁡jSjS^* = \min_j S_jS=minjSj(最优群体效用),S−=max⁡jSjS^- = \max_j S_jS=maxjSj(最劣群体效用);
  • R∗=min⁡jRjR^* = \min_j R_jR=minjRj(最优个体遗憾),R−=max⁡jRjR^- = \max_j R_jR=maxjRj(最劣个体遗憾);
  • ν\nuν:妥协系数(通常取0.50.50.5,平衡“群体效用”与“个体遗憾”)。
6. 步骤 5:方案排序

QjQ_jQj升序排序,QjQ_jQj越小,方案越优(越接近理想解的妥协解)。

三、关键特点与优势

  1. 妥协解逻辑
    同时考虑“群体效用最大化”(SjS_jSj)和“个体遗憾最小化”(RjR_jRj),避免单一目标的极端化。

  2. 参数ν\nuν的调节

    • ν=0.5\nu = 0.5ν=0.5:平衡群体与个体;
    • ν>0.5\nu > 0.5ν>0.5:侧重“群体效用”(多数规则);
    • ν<0.5\nu < 0.5ν<0.5:侧重“个体遗憾”(否决规则)。
  3. 适用场景
    适合“需平衡多方利益”的决策(如供应链中“成本、效率、风险”的权衡)。

五、与其他 MCDM 方法的对比

方法核心差异点适用场景
VIKOR强调“妥协解”,平衡群体效用与个体遗憾,适合需兼顾多方利益的决策供应链优化、公共政策决策
TOPSIS通过“距离理想解的相对位置”排序,侧重“接近度”,对异常值敏感数据波动小的决策场景
COPRAS区分最大化/最小化准则,通过相对显著性强化最小化准则的影响工程设计、成本敏感型决策

六、总结

VIKOR 是一种**兼顾“群体利益”与“个体遗憾”**的多准则决策方法,核心通过SjS_jSj(群体效用)、RjR_jRj(个体遗憾)和QjQ_jQj(综合得分)排序方案。其公式设计体现了“妥协优化”思想,尤其适合需平衡多方诉求的复杂决策场景(如城市规划、项目投资)。

简单示例

下面是一个使用VIKOR优化方法的MATLAB实现。这个示例解决了一个经典的"供应商选择"问题,通过VIKOR方法在多个准则下对备选方案进行排序和选择。

%% VIKOR(Multi-criteria Optimization and Compromise Solution)优化方法示例
clear; clc; close all;%% 1. 定义问题数据
% 备选方案(供应商)
alternatives = {'供应商A', '供应商B', '供应商C', '供应商D', '供应商E'};
num_alternatives = length(alternatives);% 评价准则
criteria = {'价格', '质量', '交货期', '服务水平', '环保性'};
num_criteria = length(criteria);% 准则权重(可通过AHP等方法确定)
weights = [0.25, 0.20, 0.15, 0.20, 0.20];% 决策矩阵(方案在各准则下的表现)
% 注:"价格"为最小化准则,其余为最大化准则
decision_matrix = [80, 7, 9, 8, 7;    % 供应商A90, 8, 7, 9, 8;    % 供应商B70, 9, 6, 7, 9;    % 供应商C60, 6, 8, 6, 6;    % 供应商D85, 7, 10, 8, 8;   % 供应商E
];% 标记准则类型(1=最大化,0=最小化)
criteria_type = [0, 1, 1, 1, 1];% VIKOR妥协系数(通常取0.5,平衡群体效用与个体遗憾)
v = 0.5;%% 2. VIKOR计算流程
% 步骤1:归一化决策矩阵(向量归一化)
normalized_matrix = zeros(size(decision_matrix));
for j = 1:num_criteriaif criteria_type(j) == 1  % 最大化准则normalized_matrix(:,j) = decision_matrix(:,j) / norm(decision_matrix(:,j));else  % 最小化准则normalized_matrix(:,j) = min(decision_matrix(:,j)) ./ decision_matrix(:,j);normalized_matrix(:,j) = normalized_matrix(:,j) / norm(normalized_matrix(:,j));end
end% 步骤2:确定理想解和负理想解
f_star = zeros(1, num_criteria);
f_minus = zeros(1, num_criteria);
for j = 1:num_criteriaif criteria_type(j) == 1  % 最大化准则f_star(j) = max(normalized_matrix(:,j));f_minus(j) = min(normalized_matrix(:,j));else  % 最小化准则f_star(j) = min(normalized_matrix(:,j));f_minus(j) = max(normalized_matrix(:,j));end
end% 步骤3:计算S和R值
S = zeros(num_alternatives, 1);
R = zeros(num_alternatives, 1);
for i = 1:num_alternativesfor j = 1:num_criteriaS(i) = S(i) + weights(j) * (f_star(j) - normalized_matrix(i,j)) / (f_star(j) - f_minus(j));temp_R = weights(j) * (f_star(j) - normalized_matrix(i,j)) / (f_star(j) - f_minus(j));if temp_R > R(i)R(i) = temp_R;endend
end% 步骤4:计算Q值
S_star = min(S);
S_minus = max(S);
R_star = min(R);
R_minus = max(R);Q = zeros(num_alternatives, 1);
for i = 1:num_alternativesQ(i) = v * (S(i) - S_star) / (S_minus - S_star) + (1-v) * (R(i) - R_star) / (R_minus - R_star);
end% 步骤5:排序
[Q_sorted, sort_idx] = sort(Q, 'ascend');
S_sorted = S(sort_idx);
R_sorted = R(sort_idx);%% 3. 可视化结果
% 3.1 决策矩阵热图
figure('Position', [100, 100, 1000, 800]);
subplot(2, 2, 1);
imagesc(decision_matrix);
title('原始决策矩阵');
xlabel('准则');
ylabel('方案');
set(gca, 'XTick', 1:num_criteria, 'XTickLabel', criteria);
set(gca, 'YTick', 1:num_alternatives, 'YTickLabel', alternatives);
colorbar;
for i = 1:num_alternativesfor j = 1:num_criteriatext(j, i, num2str(decision_matrix(i,j)), 'HorizontalAlignment', 'center', 'FontSize', 10);end
end% 3.2 准则权重饼图
subplot(2, 2, 2);
pie(weights, criteria);
title('准则权重分布');% 3.3 S、R、Q值对比图
subplot(2, 2, 3);
bar_width = 0.25;
x = 1:num_alternatives;
bar(x - bar_width, S, bar_width, 'b', 'DisplayName', 'S (群体效用)');
hold on;
bar(x, R, bar_width, 'r', 'DisplayName', 'R (个体遗憾)');
bar(x + bar_width, Q, bar_width, 'g', 'DisplayName', 'Q (综合得分)');
hold off;
title('S、R、Q值对比');
xlabel('方案');
ylabel('值');
set(gca, 'XTick', 1:num_alternatives, 'XTickLabel', alternatives);
legend;
grid on;% 3.4 VIKOR排序结果
subplot(2, 2, 4);
barh(1:num_alternatives, Q_sorted);
title('VIKOR排序结果');
xlabel('Q值 (越小越好)');
ylabel('方案 (按排名)');
set(gca, 'YTick', 1:num_alternatives, 'YTickLabel', alternatives(sort_idx));
grid on;% 添加标签显示具体Q值
for i = 1:num_alternativestext(Q_sorted(i)+0.01, i, sprintf('%.4f', Q_sorted(i)), 'HorizontalAlignment', 'left', 'VerticalAlignment', 'middle');
end%% 4. 输出结果
fprintf('\n===== VIKOR优化结果汇总 =====\n');
fprintf('\n1. 准则权重:\n');
for i = 1:num_criteriafprintf('   %s: %.2f\n', criteria{i}, weights(i));
endfprintf('\n2. 各方案评估结果:\n');
fprintf('   方案\t\tS值\t\tR值\t\tQ值\n');
for i = 1:num_alternativesfprintf('   %s\t%.4f\t\t%.4f\t\t%.4f\n', alternatives{i}, S(i), R(i), Q(i));
endfprintf('\n3. VIKOR推荐排序:\n');
for i = 1:num_alternativesfprintf('   第%d名: %s (Q值: %.4f)\n', i, alternatives{sort_idx(i)}, Q_sorted(i));
end% 检查是否满足VIKOR接受条件
if (Q_sorted(2) - Q_sorted(1) >= 1/(num_alternatives-1)) && ...(Q_sorted(1) == S_sorted(1) || Q_sorted(1) == R_sorted(1))fprintf('\n4. 接受条件检查: 方案 %s 为唯一最优妥协解\n', alternatives{sort_idx(1)});
elsefprintf('\n4. 接受条件检查: 存在多个妥协解或需进一步分析\n');
end

代码说明:

  1. 问题定义

    • 5个备选方案(供应商A-E)
    • 5个评价准则:价格、质量、交货期、服务水平、环保性
    • 准则权重:通过专家判断或AHP方法预先确定
    • 准则类型:"价格"为最小化准则,其余为最大化准则
    • 妥协系数v:默认0.5,平衡群体效用与个体遗憾
  2. VIKOR计算流程

    • 归一化处理:针对不同类型准则采用不同归一化方法
    • 确定理想解和负理想解:对每个准则分别计算
    • 计算S值(群体效用)和R值(个体遗憾)
    • 计算综合得分Q值:融合S和R
    • 排序:按Q值升序排列
  3. 可视化功能

    • 决策矩阵热图:直观展示原始数据
    • 准则权重饼图:显示各准则重要性分布
    • S、R、Q值对比图:横向比较各方案在不同指标下的表现
    • VIKOR排序结果:按Q值从低到高展示
  4. 结果输出

    • 详细列出各方案的S、R、Q值
    • 给出推荐排序结果
    • 检查是否满足VIKOR接受条件(条件1和条件2)

运行结果
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法训练营Day18】二叉树part8

文章目录修剪二叉搜索树将有序数组转换为二叉搜索树把二叉搜索树转换为累加树修剪二叉搜索树 题目链接&#xff1a;669. 修剪二叉搜索树 解题逻辑&#xff1a; 因为在删除的同时要保证相对结构&#xff0c;所以我们不能沿用上一篇文章中的删除逻辑&#xff0c;新的删除逻辑为&…

【C++篇】“内存泄露”的宝藏手段:智能指针

目录 智能指针的使用场景分析 RAII和智能指针的设计思路 C标准库智能指针的使用 auto_ptr的使用&#xff1a; unique_ptr的使用&#xff1a; shared_ptr的使用&#xff1a; 模拟shared_ptr: 定制删除器&#xff1a; shared_ptr的循环引用 weak_ptr 智能指针的使用场景…

【密码学】4. 分组密码

目录分组密码分组密码概述Feistel 密码结构数据加密标准&#xff08;DES&#xff09;差分密码分析与线性密码分析分组密码的运行模式国际数据加密算法&#xff08;IDEA&#xff09;高级加密标准&#xff08;AES&#xff0c;Rijndael&#xff09;中国商用密码 SM4祖冲之密码&…

单片机(STM32-WIFI模块)

一、WIFI模块介绍 1. ESP12-F模组介绍 1.1 简介 ESP12-F模组&#xff08;安信可&#xff08;Ai-Thinker&#xff09;ESP8266系列模组&#xff09;是一款基于乐鑫&#xff08;Espressif&#xff09;公司ESP8266芯片的Wi-Fi无线通信模块&#xff0c;广泛应用于物联网&#xff0…

PyTorch 数据类型和使用

关于PyTorch的数据类型和使用的学习笔记 系统介绍了PyTorch的核心数据类型Tensor及其应用。Tensor作为多维矩阵数据容器&#xff0c;支持0-4维数据结构&#xff08;标量到批量图像&#xff09;&#xff0c;并提供了多种数值类型&#xff08;float32/int64等&#xff09;。通过…

[python刷题模板] LogTrick

[python刷题模板] LogTrick 一、 算法&数据结构1. 描述2. 复杂度分析3. 常见应用4. 常用优化二、 模板代码1. 特定或值的最短子数组2. 找特定值3. 找位置j的最后一次被谁更新4. 问某个或和的数量三、其他四、更多例题五、参考链接一、 算法&数据结构 1. 描述 LogTric…

Vim与VS Code

Vim is a clone, with additions, of Bill Joys vi text editor program for Unix. It was written by Bram Moolenaar based on source for a port of the Stevie editor to the Amiga and first released publicly in 1991.其实这个本身不是 IDE &#xff08;只有在加入和配置…

[2025CVPR-图象分类方向]CATANet:用于轻量级图像超分辨率的高效内容感知标记聚合

​1. 研究背景与动机​ ​问题​&#xff1a;Transformer在图像超分辨率&#xff08;SR&#xff09;中计算复杂度随空间分辨率呈二次增长&#xff0c;现有方法&#xff08;如局部窗口、轴向条纹&#xff09;因内容无关性无法有效捕获长距离依赖。​现有局限​&#xff1a; SPI…

课题学习笔记3——SBERT

1 引言在构建基于知识库的问答系统时&#xff0c;"语义匹配" 是核心难题 —— 如何让系统准确识别 "表述不同但含义相同" 的问题&#xff1f;比如用户问 "对亲人的期待是不是欲&#xff1f;"&#xff0c;系统能匹配到知识库中 "追名逐利是欲…

在Word和WPS文字中把全角数字全部改为半角

大部分情况下我们在Word或WPS文字中使用的数字或标点符号都是半角&#xff0c;但是有时不小心按错了快捷键或者点到了输入法的全角半角切换图标&#xff0c;就输入了全角符号和数字。不用担心&#xff0c;使用它们自带的全角、半角转换功能即可快速全部转换回来。一、为什么会输…

数据结构的基本知识

一、集合框架1、什么是集合框架Java集合框架(Java Collection Framework),又被称为容器(container),是定义在java.util包下的一组接口(interfaces)和其实现类(classes).主要表现为把多个元素(element)放在一个单元中,用于对这些元素进行快速、便捷的存储&#xff08;store&…

WebStack-Hugo | 一个静态响应式导航主题

WebStack-Hugo | 一个静态响应式导航主题 #10 shenweiyan announced in 1.3-折腾 WebStack-Hugo | 一个静态响应式导航主题#10 ​编辑shenweiyan on Oct 23, 2023 6 comments 7 replies Return to top shenweiyan on Oct 23, 2023 Maintainer Via&#xff1a;我给自己…

01 基于sklearn的机械学习-机械学习的分类、sklearn的安装、sklearn数据集、数据集的划分、特征工程中特征提取与无量纲化

文章目录机械学习机械学习分类1. 监督学习2. 半监督学习3. 无监督学习4. 强化学习机械学习的项目开发步骤scikit-learn1 scikit-learn安装2 sklearn数据集1. sklearn 玩具数据集鸢尾花数据集糖尿病数据集葡萄酒数据集2. sklearn现实世界数据集20 新闻组数据集3. 数据集的划分特…

携全双工语音通话大模型亮相WAIC,Soul重塑人机互动新范式

近日&#xff0c;WAIC 2025在上海隆重开幕。作为全球人工智能领域的顶级盛会&#xff0c;本届WAIC展览聚焦底层能力的演进与具体垂类场景的融合落地。坚持“模应一体”方向、立足“AI社交”的具体场景&#xff0c;Soul App此次携最新升级的自研端到端全双工语音通话大模型亮相&…

第2章 cmd命令基础:常用基础命令(1)

Hi~ 我是李小咖&#xff0c;主要从事网络安全技术开发和研究。 本文取自《李小咖网安技术库》&#xff0c;欢迎一起交流学习&#x1fae1;&#xff1a;https://imbyter.com 本节介绍的命令有目录操作&#xff08;cd&#xff09;、清屏操作&#xff08;cls&#xff09;、设置颜色…

Java 10 新特性解析

Java 10 新特性解析 文章目录Java 10 新特性解析1. 引言2. 本地变量类型推断&#xff08;JEP 286&#xff09;2.1. 概述2.2. 使用场景2.3. 限制2.4. 与之前版本的对比2.5. 风格指南2.6. 示例代码2.7. 优点与注意事项3. 应用程序类数据共享&#xff08;JEP 310&#xff09;3.1. …

【WRF工具】服务器中安装编译GrADS

目录 安装编译 GrADS 所需的依赖库 conda下载库包 安装编译 GrADS 编译前检查依赖可用性 安装编译 GrADS 参考 安装编译 GrADS 所需的依赖库 以统一方式在 $HOME/WRFDA_LIBS/grads_deps 下安装所有依赖: # 选择一个目录用于安装所有依赖库 export DIR=$HOME/WRFDA_LIBS库包1…

数据结构之队列(C语言)

1.队列的定义&#xff1a; 队列&#xff08;Queue&#xff09;是一种基础且重要的线性数据结构&#xff0c;遵循先进先出&#xff08;FIFO&#xff09;​​ 原则&#xff0c;即最早入队的元素最先出队&#xff0c;与栈不同的是出队列的顺序是固定的。队列具有以下特点&#xff…

C#开发基础之深入理解“集合遍历时不可修改”的异常背后的设计

前言 欢迎关注【dotnet研习社】&#xff0c;今天我们聊聊一个基础问题“集合已修改&#xff1a;可能无法执行枚举操作”背后的设计。 在日常 C# 开发中&#xff0c;我们常常会操作集合&#xff08;如 List<T>、Dictionary<K,V> 等&#xff09;。一个新手开发者极…

【工具】图床完全指南:从选择到搭建的全方位解决方案

前言 在数字化内容创作的时代&#xff0c;图片已经成为博客、文档、社交媒体等平台不可或缺的元素。然而&#xff0c;如何高效、稳定地存储和分发图片资源&#xff0c;一直是内容创作者面临的重要问题。图床&#xff08;Image Hosting&#xff09;作为专门的图片存储和分发服务…