COPRAS(Complex Proportional Assessment)简介与简单示例
前言
提醒:
文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。
其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展及意见建议,欢迎评论区讨论交流。
内容由AI辅助生成,仅经笔者审核整理,请甄别食用。
文章目录
- 前言
- 一、COPRAS 方法概述
- 二、核心步骤与公式详解
- **1. 输入层:决策矩阵与准则权重**
- **2. 预处理层:归一化与加权**
- **3. 准则分类层:区分最大化/最小化**
- **4. 核心计算层:相对显著性与综合得分**
- **5. 决策层:排序与选择**
- 三、关键特点与优势
- 四、与其他 MCDM 方法的对比
- 六、应用扩展
- 总结
- 简单示例
- 代码说明:
一、COPRAS 方法概述
COPRAS(Complex Proportional Assessment) 是由 Zavadskas 和 Kaklauskas 于 1996 年提出的多准则决策(MCDM)方法,用于解决多准则(含最大化、最小化混合)下的方案评估问题。其核心逻辑是通过归一化、加权聚合、区分准则类型,计算方案的综合得分QiQ_iQi,得分越高的方案越优。
二、核心步骤与公式详解
1. 输入层:决策矩阵与准则权重
-
决策矩阵:X=(xi,j)n×m\mathbf{X} = (x_{i,j})_{n \times m}X=(xi,j)n×m
- nnn:方案数(如 3 个投资项目)
- mmm:准则数(如“收益”“成本”“风险”)
- xi,jx_{i,j}xi,j:第iii个方案在第jjj个准则下的原始值
-
准则权重:qjq_jqj(j=1,2,…,mj = 1,2,\dots,mj=1,2,…,m)
- 满足∑j=1mqj=1\sum_{j=1}^m q_j = 1∑j=1mqj=1,通常由 AHP、熵权法等确定
2. 预处理层:归一化与加权
步骤 1:归一化决策矩阵
xˉi,j=xi,j∑i=1nxi,j\bar{x}_{i,j} = \frac{x_{i,j}}{\sum_{i=1}^n x_{i,j}} xˉi,j=∑i=1nxi,jxi,j
- 作用:消除量纲影响,将不同单位的准则值映射到[0,1][0,1][0,1]区间
步骤 2:加权归一化矩阵
x^i,j=xˉi,j×qj\hat{x}_{i,j} = \bar{x}_{i,j} \times q_j x^i,j=xˉi,j×qj
- 作用:突出重要准则的影响
3. 准则分类层:区分最大化/最小化
假设前kkk个准则为最大化准则(如“收益”),后m−km-km−k个为最小化准则(如“成本”):
- 最大化准则聚合:
Pi=∑j=1kx^i,jP_i = \sum_{j=1}^k \hat{x}_{i,j} Pi=j=1∑kx^i,j - 最小化准则聚合:
Ri=∑j=k+1mx^i,jR_i = \sum_{j=k+1}^m \hat{x}_{i,j} Ri=j=k+1∑mx^i,j
4. 核心计算层:相对显著性与综合得分
步骤 1:计算基准值RminR_{\text{min}}Rmin
Rmin=miniRiR_{\text{min}} = \min_i R_i Rmin=iminRi
- 意义:最小化准则的最优值(理想下限)
步骤 2:计算综合得分QiQ_iQi
Qi=Pi+Rmin⋅∑i=1nRiRi⋅∑i=1nRminRiQ_i = P_i + \frac{R_{\text{min}} \cdot \sum_{i=1}^n R_i}{R_i \cdot \sum_{i=1}^n \frac{R_{\text{min}}}{R_i}} Qi=Pi+Ri⋅∑i=1nRiRminRmin⋅∑i=1nRi
- 公式拆解:
- 前半部分PiP_iPi:反映最大化准则的贡献
- 后半部分:通过RminR_{\text{min}}Rmin对最小化准则进行非线性修正,突出“更优方案应在最小化准则上表现更突出”
5. 决策层:排序与选择
按QiQ_iQi降序排列,得分最高的方案为最优解。
三、关键特点与优势
特点 | 说明 |
---|---|
混合准则支持 | 同时处理最大化(如“收益”)和最小化(如“成本”)准则,覆盖复杂决策场景 |
相对显著性设计 | 通过RminR_{\text{min}}Rmin放大最小化准则的影响差异,强化“低成本优势” |
计算透明度高 | 从归一化到最终得分的步骤清晰,便于理解和解释决策逻辑 |
工程适用性强 | 适合工程领域的多目标优化(如供应链设计、项目评估) |
四、与其他 MCDM 方法的对比
方法 | 核心差异点 | 适用场景 |
---|---|---|
COPRAS | 通过RminR_{\text{min}}Rmin强化最小化准则的相对影响,适合需“权衡收益与成本”的场景 | 工程设计、供应链优化 |
AHP | 侧重通过成对比较确定准则权重,是“权重分配工具” | 权重确定阶段 |
TOPSIS | 通过“距离理想解的相对位置”排序,对异常值敏感 | 数据波动小的决策场景 |
WASPAS | 融合线性加权(WSM)与非线性乘积(WPM),兼顾多种决策逻辑 | 复杂非线性决策问题 |
六、应用扩展
COPRAS 常与其他方法结合:
- 与 AHP 结合:AHP 确定准则权重,COPRAS 计算方案得分
- 与模糊理论结合:处理不确定环境下的决策(如专家判断的模糊性)
- 与机器学习结合:通过历史数据训练权重,优化 COPRAS 模型
总结
COPRAS 是一种结构化、透明化的多准则决策方法,通过数学公式清晰区分“收益”与“成本”类准则的影响,特别适合工程和管理领域的方案优选问题。其核心优势在于突出最小化准则的相对重要性,使决策结果更符合“低成本优先”的实际需求。
简单示例
以下是一个使用 COPRAS 优化方法的 MATLAB 实现示例,包含完整的计算流程和可视化功能。这个示例解决了一个经典的"旅游目的地选择"问题,通过 COPRAS 方法在多个准则下对备选方案进行排序和选择。
%% COPRAS(Complex Proportional Assessment)优化方法示例
clear; clc; close all;%% 1. 定义问题数据
% 备选方案(旅游目的地)
alternatives = {'桂林', '黄山', '北戴河', '张家界'};
num_alternatives = length(alternatives);% 评价准则
criteria = {'景色', '费用', '交通便利性', '住宿条件', '餐饮特色'};
num_criteria = length(criteria);% 准则权重(可通过AHP等方法确定)
weights = [0.25, 0.20, 0.15, 0.20, 0.20];% 决策矩阵(方案在各准则下的表现)
% 注:"费用"为最小化准则,其余为最大化准则
decision_matrix = [9, 7, 8, 7, 8; % 桂林8, 6, 6, 8, 7; % 黄山7, 9, 9, 6, 6; % 北戴河9, 5, 5, 9, 9 % 张家界
];% 标记准则类型(1=最大化,0=最小化)
criteria_type = [1, 0, 1, 1, 1];%% 2. COPRAS计算流程
% 步骤1:归一化决策矩阵
normalized_matrix = zeros(size(decision_matrix));
for j = 1:num_criteriaif criteria_type(j) == 1 % 最大化准则normalized_matrix(:,j) = decision_matrix(:,j) / sum(decision_matrix(:,j));else % 最小化准则normalized_matrix(:,j) = min(decision_matrix(:,j)) ./ decision_matrix(:,j);end
end% 步骤2:加权归一化矩阵
weighted_matrix = normalized_matrix .* repmat(weights, num_alternatives, 1);% 步骤3:区分最大化和最小化准则的贡献
max_criteria = find(criteria_type == 1);
min_criteria = find(criteria_type == 0);P = sum(weighted_matrix(:,max_criteria), 2); % 最大化准则的总贡献
R = sum(weighted_matrix(:,min_criteria), 2); % 最小化准则的总贡献% 步骤4:计算R_min
R_min = min(R);% 步骤5:计算COPRAS得分
Q = zeros(num_alternatives, 1);
for i = 1:num_alternativesdenominator = 0;for k = 1:num_alternativesdenominator = denominator + (R_min / R(k));endQ(i) = P(i) + (R_min * sum(R)) / (R(i) * denominator);
end% 步骤6:计算相对效率
relative_efficiency = Q / max(Q) * 100;% 步骤7:排序
[~, sort_idx] = sort(Q, 'descend');%% 3. 可视化结果
% 3.1 决策矩阵热图
figure('Position', [100, 100, 800, 600]);
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');end
end% 3.2 准则权重饼图
subplot(2, 2, 2);
pie(weights, criteria);
title('准则权重分布');% 3.3 COPRAS得分条形图
subplot(2, 2, 3);
bar(Q);
title('COPRAS得分对比');
xlabel('方案');
ylabel('得分');
set(gca, 'XTick', 1:num_alternatives, 'XTickLabel', alternatives);
for i = 1:num_alternativestext(i, Q(i), sprintf('%.3f', Q(i)), 'HorizontalAlignment', 'center', 'VerticalAlignment', 'bottom');
end% 3.4 方案排序结果
subplot(2, 2, 4);
barh(1:num_alternatives, Q(sort_idx));
title('方案排序结果');
xlabel('COPRAS得分');
ylabel('方案(按排名)');
set(gca, 'YTick', 1:num_alternatives, 'YTickLabel', alternatives(sort_idx));
for i = 1:num_alternativestext(Q(sort_idx(i)), i, sprintf('%.3f (%.1f%%)', Q(sort_idx(i)), relative_efficiency(sort_idx(i))), ...'HorizontalAlignment', 'left', 'VerticalAlignment', 'middle'); % 修改此处
end%% 4. 输出结果
fprintf('\n===== COPRAS优化结果汇总 =====\n');
fprintf('\n1. 准则权重:\n');
for i = 1:num_criteriafprintf(' %s: %.2f\n', criteria{i}, weights(i));
endfprintf('\n2. 方案评估得分:\n');
for i = 1:num_alternativesfprintf(' %s: %.4f (相对效率: %.2f%%)\n', alternatives{i}, Q(i), relative_efficiency(i));
endfprintf('\n3. 推荐排序:\n');
for i = 1:num_alternativesfprintf(' 第%d名: %s (得分: %.4f)\n', i, alternatives{sort_idx(i)}, Q(sort_idx(i)));
end
代码说明:
-
问题定义:
- 4个备选方案(旅游目的地):桂林、黄山、北戴河、张家界
- 5个评价准则:景色、费用、交通便利性、住宿条件、餐饮特色
- 准则权重:通过专家判断或AHP方法预先确定
- 准则类型:"费用"为最小化准则,其余为最大化准则
-
COPRAS计算流程:
- 归一化处理:针对不同类型准则采用不同归一化方法
- 加权聚合:计算各方案在最大化和最小化准则上的贡献
- 核心公式:计算R_min和综合得分Q
- 相对效率:将得分转换为百分比形式便于比较
-
可视化功能:
- 决策矩阵热图:直观展示原始数据
- 准则权重饼图:显示各准则重要性分布
- COPRAS得分条形图:对比各方案得分
- 方案排序结果:按得分从高到低展示
-
结果输出:
- 详细列出各方案得分和相对效率
- 给出推荐排序结果
运行结果