模糊综合评价方法的Python实现--数学建模学习日志_模糊综合评价代码
第一节 模糊综合评价方法
模糊综合评价方法是一种基于模糊数学理论的多因素决策技术,用于处理评价对象具有模糊性或不明确性的情况。它通过引入隶属度函数来量化模糊概念(如“优秀”、“良好”等),并结合权重进行综合评估,适用于管理、工程、经济等地方。
同样此处,我就不纠结于模糊评价分析方法的介绍,大家可以详见b站up主的视频学习:
【大师兄数学建模】第3讲 模糊综合评价_哔哩哔哩_bilibili
接下来,我们直接进入代码实现部分。
(numpy库的学习可以见我的一篇博客:Numpy学习笔记分享_numpy笔记-CSDN博客)
第二节 代码实现
1.数据读取
eval_mat=np.array([ [0.8, 0.15, 0.05, 0, 0], [0.2, 0.6, 0.1, 0.1, 0], [0.5, 0.4, 0.1, 0, 0], [0.1, 0.3, 0.5, 0.05, 0.05], [0.3, 0.5, 0.15, 0.05, 0], [0.2, 0.2, 0.4, 0.1, 0.1], [0.4, 0.4, 0.1, 0.1, 0], [0.1, 0.3, 0.3, 0.2, 0.1], [0.3, 0.2, 0.2, 0.2, 0.1], [0.1, 0.3, 0.5, 0.1, 0], [0.2, 0.3, 0.3, 0.1, 0.1], [0.2, 0.3, 0.35, 0.15, 0], [0.1, 0.3, 0.4, 0.1, 0.1], [0.1, 0.4, 0.3, 0.1, 0.1], [0.3, 0.4, 0.2, 0.1, 0], [0.1, 0.4, 0.3, 0.1, 0.1], [0.2, 0.3, 0.4, 0.1, 0], [0.4, 0.3, 0.2, 0.1, 0]])print(\"Eval_Mat:\")print(eval_mat)
Eval_Mat:
[[0.8 0.15 0.05 0. 0. ]
[0.2 0.6 0.1 0.1 0. ]
[0.5 0.4 0.1 0. 0. ]
[0.1 0.3 0.5 0.05 0.05]
[0.3 0.5 0.15 0.05 0. ]
[0.2 0.2 0.4 0.1 0.1 ]
[0.4 0.4 0.1 0.1 0. ]
[0.1 0.3 0.3 0.2 0.1 ]
[0.3 0.2 0.2 0.2 0.1 ]
[0.1 0.3 0.5 0.1 0. ]
[0.2 0.3 0.3 0.1 0.1 ]
[0.2 0.3 0.35 0.15 0. ]
[0.1 0.3 0.4 0.1 0.1 ]
[0.1 0.4 0.3 0.1 0.1 ]
[0.3 0.4 0.2 0.1 0. ]
[0.1 0.4 0.3 0.1 0.1 ]
[0.2 0.3 0.4 0.1 0. ]
[0.4 0.3 0.2 0.1 0. ]]
2.矩阵运算
模糊综合评价分析方法整体比较简单,核心其实就是矩阵的乘法,多级矩阵乘法运算,代码量不长。
# 输入每一个一级属性下的二级属性下标separation_points = [0, 4, 9, 14, 18]# 获取矩阵的行数和列数m, n = eval_mat.shape# 输入每一级下第一个二级属性下标list_A = [[0.2, 0.3, 0.3, 0.2], [0.3, 0.2, 0.1, 0.2, 0.2], [0.1, 0.2, 0.3, 0.2, 0.2], [0.3, 0.2, 0.2, 0.3]]# 输入每一级下的权重A = [0.4, 0.3, 0.2, 0.1]# 第一级的所有名称list_name = [\"A\", \"B\", \"C\", \"D\"]# 保存二级计算结果list_R = []for i in range(len(separation_points) - 1): print(f\"{list_name[i]}级评价结果为:\") print(f\"R{i + 1}:\") R1 = np.dot(list_A[i], eval_mat[separation_points[i]:separation_points[i + 1], :]) print(R1) list_R.append(R1)print(\"模糊评价的最终结果:\")R = np.dot(A, list_R)print(R)
A级评价结果为:
R1:
[0.39 0.39 0.17 0.04 0.01]
B级评价结果为:
R2:
[0.25 0.33 0.235 0.125 0.06 ]
C级评价结果为:
R3:
[0.15 0.32 0.355 0.115 0.06 ]
D级评价结果为:
R4:
[0.27 0.35 0.26 0.1 0.02]
模糊评价的最终结果:
[0.288 0.354 0.2355 0.0865 0.036 ]
3.可视化显示
为了方便大家论文中进行可视化展示,这里提供我的可视化部分代码,以做出条形图代码为例。其余图形可以各位自己交给AI做即可。
3.1 导入相关库
import matplotlib.pyplot as pltimport seaborn as sns# 指定使用 SimHei 字体(Windows 系统常见中文字体,其他系统可换对应字体名)plt.rcParams[\'font.sans-serif\'] = [\'SimHei\'] # 解决负号显示为方块的问题(可选,若有负号需求时用)plt.rcParams[\'axes.unicode_minus\'] = False
3.2 可视化代码
list1=[\"优秀\",\"较好\",\"一般\",\"较差\",\"差\"]# 可视化部分for idx, r1 in enumerate(list_R): plt.figure(figsize=(8, 6)) # 设置图形大小 # 按警告提示修改:将 x 赋值给 hue,并关闭图例 sns.barplot( x=list1, y=r1, hue=np.arange(len(r1)), # 用 x 的值作为 hue,保证每个条形颜色不同 palette=\"viridis\", legend=False # 关闭图例(避免重复显示) ) # 添加标题和坐标轴标签 plt.title(f\"{list_name[idx]}级 R1 结果条形图\", fontsize=14) plt.xlabel(\"指标序号\", fontsize=12) plt.ylabel(\"评价得分\", fontsize=12) # 显示网格线(可选,增强可读性) plt.grid(axis=\'y\', linestyle=\'--\', alpha=0.7) # 调整布局避免标签被截断 plt.tight_layout() plt.show()# 最终 R 结果的条形图plt.figure(figsize=(8, 6))sns.barplot( x=list1, y=R, hue=np.arange(len(R)), # 同理设置 hue palette=\"magma\", legend=False)plt.title(\"模糊评价最终结果 R 条形图\", fontsize=14)plt.xlabel(\"指标序号\", fontsize=12)plt.ylabel(\"最终得分\", fontsize=12)plt.grid(axis=\'y\', linestyle=\'--\', alpha=0.7)plt.tight_layout()plt.show()
3.3 图形展示
其他方法的Python代码实现可以点击我的数学建模板块进行查看,暑假我会更新完的!!!(应该)