You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在pyDecision中为MAUT的7个主准则设置权重

问题:MAUT中基于主准则分配测量准则权重的实现方法

我正在进行一项**MAUT(多属性效用理论)**练习,参考pyDecision示例,但不清楚如何设置权重。我的评估矩阵包含68个测量准则,它们分属7个不同的主准则,我希望为这7个主准则设置权重,而非每个测量准则。数据集的准则分布如下:

  • 前5个值属于第1个主准则
  • 接下来4个属于第2个主准则
  • 再接下来14个属于第3个主准则
  • 之后11个属于第4个主准则
  • 随后20个属于第5个主准则
  • 接下来11个属于第6个主准则
  • 最后3个属于第7个主准则

请问该如何实现?以下是我的代码:

# Required Libraries
import pyDecision
import numpy as np

from pyDecision.algorithm import maut_method

weights = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0] #This is the tricky part. It should sum up to 1

#Here I have 68 criterion types, one for every measurement criteria
criterion_type    = ['min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'max', 'max', 'max', 'max', 'max', 'max', 'max', 'max', 'max', 'max', 'min', 'max', 'min']

# Load Utility Functions: 'exp'; 'ln'; 'log'; 'quad' or 'step' 
# Possibly the amount of utility functions defined here should be 68 as well?
utility_functions = ['exp', 'exp', 'exp', 'exp', 'exp', 'exp', 'exp', 'exp', 'exp', 'exp']

# In this dataset, every value is a measurement criteria, and every row belongs to one of the five decision alternatives
dataset = np.array([
                    [1, 1, 1, 1, 1, 2, 2, 2, 3, 59.4, 4.13, 4, 4, 2, 3, 4, 1, 1, 1, 1, 1, 1, 1, 1550, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.43, 187, 1.87e-05, 0.0698, 0.149, 1, 0.0398, 1, 1, 1, 1, 1, 1, 315, 6030, 1, 2910, 0.00134, 1, 183, 27.2, 30.6, 3, 48, 3, 23, 14, 3.3, 1, 3.65, 0.025, 2, 0.0], #A1
[1, 1, 1, 1, 1, 2, 2, 2, 3, 57.5, 5.04, 3, 3, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 198, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 357, 4.13e-05, 0.551, 1.47, 1, 0.12, 1, 1, 1, 1, 1, 1, 768, 8760, 1, 5770, 0.0214, 1, 218, 28, 32, 3.4, 22.1, 3, 27, 17, 13, 5, 8.936, 0.304, 2, 0.0], #A2
[1, 1, 1, 1, 1, 2, 2, 2, 3, 57.5, 5.04, 3, 3, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 198, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 357, 4.13e-05, 0.551, 1.47, 1, 0.12, 1, 1, 1, 1, 1, 1, 768, 8760, 1, 5770, 0.0214, 1, 218, 20, 30, 6.2, 26.1, 3, 27, 17, 13, 5, 8.936, 0.304, 2, 0.0], #A3
[1, 1, 1, 1, 1, 2, 2, 2, 3, 54.9, 2.58, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 8.7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.53, 216, 1.78e-05, 0.0706, 0.199, 1, 0.0364, 1, 1, 1, 1, 1, 1, 312, 5830, 1, 3400, 0.00133, 1, 227, 15, 19, 5.4, 20.8, 2, 21.5, 18.5, 8.6, 2.1, 1.125, 0.41, 2, 0.0], #A4
[1, 1, 1, 1, 1, 2, 2, 2, 3, 54.9, 2.58, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 8.7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.53, 216, 1.78e-05, 0.0706, 0.199, 1, 0.0364, 1, 1, 1, 1, 1, 1, 312, 5830, 1, 3400, 0.00133, 1, 227, 16, 22, 9.1, 41.2, 2, 21.5, 18.5, 8.6, 2.1, 1.125, 0.41, 2, 0.0] #A5
                   ])

# Call MAUT Function
rank = maut_method(dataset, weights, criterion_type, utility_functions, step_size, graph = True)

解决方案

1. 基于主准则推导测量准则权重

pyDecision的maut_method要求传入每个测量准则的权重,因此需要先给7个主准则分配权重(总和为1),再将主准则权重均分到下属的测量准则上:

  • 先定义主准则权重,比如:main_weights = [0.15, 0.1, 0.2, 0.15, 0.2, 0.15, 0.05](可根据实际需求调整,确保总和为1)
  • 根据各主准则下的测量准则数量,计算每个测量准则的权重:主准则权重 ÷ 该主准则下测量准则的数量

2. 补全效用函数列表

utility_functions的长度必须和测量准则数量(68)一致,可根据每个准则的特性选择'exp'、'ln'、'log'等,也可以统一设置(比如全部使用'exp')。

3. 修正后的完整代码

# Required Libraries
import pyDecision
import numpy as np

from pyDecision.algorithm import maut_method

# 1. 定义主准则权重(总和为1)
main_weights = [0.15, 0.1, 0.2, 0.15, 0.2, 0.15, 0.05]
# 各主准则下的测量准则数量
criterion_counts = [5, 4, 14, 11, 20, 11, 3]

# 2. 推导每个测量准则的权重
weights = []
for mw, cnt in zip(main_weights, criterion_counts):
    # 将主准则权重均分到下属测量准则
    weights.extend([mw / cnt] * cnt)

# 确认权重总和为1(浮点误差可忽略)
assert abs(sum(weights) - 1.0) < 1e-6, "权重总和必须为1"

# 3. 补全效用函数列表(示例:全部使用'exp')
utility_functions = ['exp'] * 68

# 原有的准则类型和数据集
criterion_type    = ['min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'min', 'max', 'max', 'max', 'max', 'max', 'max', 'max', 'max', 'max', 'max', 'min', 'max', 'min']
dataset = np.array([
                    [1, 1, 1, 1, 1, 2, 2, 2, 3, 59.4, 4.13, 4, 4, 2, 3, 4, 1, 1, 1, 1, 1, 1, 1, 1550, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.43, 187, 1.87e-05, 0.0698, 0.149, 1, 0.0398, 1, 1, 1, 1, 1, 1, 315, 6030, 1, 2910, 0.00134, 1, 183, 27.2, 30.6, 3, 48, 3, 23, 14, 3.3, 1, 3.65, 0.025, 2, 0.0], #A1
[1, 1, 1, 1, 1, 2, 2, 2, 3, 57.5, 5.04, 3, 3, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 198, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 357, 4.13e-05, 0.551, 1.47, 1, 0.12, 1, 1, 1, 1, 1, 1, 768, 8760, 1, 5770, 0.0214, 1, 218, 28, 32, 3.4, 22.1, 3, 27, 17, 13, 5, 8.936, 0.304, 2, 0.0], #A2
[1, 1, 1, 1, 1, 2, 2, 2, 3, 57.5, 5.04, 3, 3, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 198, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 357, 4.13e-05, 0.551, 1.47, 1, 0.12, 1, 1, 1, 1, 1, 1, 768, 8760, 1, 5770, 0.0214, 1, 218, 20, 30, 6.2, 26.1, 3, 27, 17, 13, 5, 8.936, 0.304, 2, 0.0], #A3
[1, 1, 1, 1, 1, 2, 2, 2, 3, 54.9, 2.58, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 8.7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.53, 216, 1.78e-05, 0.0706, 0.199, 1, 0.0364, 1, 1, 1, 1, 1, 1, 312, 5830, 1, 3400, 0.00133, 1, 227, 15, 19, 5.4, 20.8, 2, 21.5, 18.5, 8.6, 2.1, 1.125, 0.41, 2, 0.0], #A4
[1, 1, 1, 1, 1, 2, 2, 2, 3, 54.9, 2.58, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 8.7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.53, 216, 1.78e-05, 0.0706, 0.199, 1, 0.0364, 1, 1, 1, 1, 1, 1, 312, 5830, 1, 3400, 0.00133, 1, 227, 16, 22, 9.1, 41.2, 2, 21.5, 18.5, 8.6, 2.1, 1.125, 0.41, 2, 0.0] #A5
                   ])

# 4. 调用MAUT方法(需定义step_size,示例设为0.01)
step_size = 0.
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 11:42:20