数学建模--Topsis评价方法的Python实现

这篇具有很好参考价值的文章主要介绍了数学建模--Topsis评价方法的Python实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.算法流程简介

2.算法核心代码

3.算法效果展示

1.算法流程简介

"""
TOPSIS(综合评价方法):主要是根据根据各测评对象与理想目标的接近程度进行排序.
然后在现有研究对象中进行相对优劣评价。
其基本原理就是求解计算各评价对象与最优解和最劣解的距离来进行排序.
如果过评价对象最靠近最优解同时又最远离最劣解,则为最优;否则不是最优。
这样的评价方法需要多次统一标准,所以要求我们掌握正向化的求解方法.
"""

2.算法核心代码

"""
Question1:
  现给予你20组有关水质特征的值,分别是含氧量  PH值  细菌总数  植物性营养物量四个参数,请你根据
Topsis方法将20条河流的水质进行对应的评价!
"""
#Topsis综合评价法
import numpy as np
import matplotlib.pyplot as plt
"""
输入评价数据
20个评价数据包含了含氧量  PH值  细菌总数  植物性营养物量四个参数

"""
data=np.array([[4.69, 6.59, 51, 11.94],
        [2.03, 7.86, 19, 6.46],
        [9.11, 6.31, 46, 8.91],
        [8.61, 7.05, 46, 26.43],
        [7.13, 6.5, 50, 23.57],
        [2.39, 6.77, 38, 24.62],
        [7.69, 6.79, 38, 6.01],
        [9.3, 6.81, 27, 31.57],
        [5.45, 7.62, 5, 18.46],
        [6.19, 7.27, 17, 7.51],
        [7.93, 7.53, 9, 6.52],
        [4.4, 7.28, 17, 25.3],
        [7.46, 8.24, 23, 14.42],
        [2.01, 5.55, 47, 26.31],
        [2.04, 6.4, 23, 17.91],
        [7.73, 6.14, 52, 15.72],
        [6.35, 7.58, 25, 29.46],
        [8.29, 8.41, 39, 12.02],
        [3.54, 7.27, 54, 3.16],
        [7.44, 6.26, 8, 28.41]
    ])
#区分指标的性质并且进行正向化处理
"""
一般来说,数据指标分为4种形式:
1.极大值型:越大越好,比如利润
2.极小值型:越小越好,比如死亡数
3.中间值型:越趋近于某一个数越好,比如PH
4.区间值型:越趋近于某一个区间越好
##常见的转化公式
极大值型:x-x_min
极小值型:x_max-x
区间值型:在区间中为1,大于区间:1-(x-r)/M 小于区间:1-(l-x)/M
"""
# 定义position接收需要进行正向化处理的列
position = np.array([1, 2, 3])
# 定义处理类型:1 - > 极小型  2 - > 中间型  3 - > 区间型
Type = np.array([2, 1, 3])
# 定义正向化函数
def positivization(x:np.array,pos:int,type:int)->np.array:
    if type==1:#极小型值
        x=x.max()-x
    elif type==2:
        best=7#此处可以修改
        M=np.max(np.abs(x-best))
        x=1-np.abs(x-best)/M
    else:#区间值型:在区间中为1,大于区间:1-(x-r)/M 小于区间:1-(l-x)/M
        l=10#区间左端
        r=20#区间右端
        M0=max(l-x.min(),x.max()-r)
        x=np.where(x<l,1-(l-x)/M0,x)
        x=np.where(x>r,1-(x-r)/M0,x)
        x=np.where(x>l,1,x)
    return x
for i in range(len(position)):

    data[:, position[i]] = positivization(data[:, position[i]], position[i], Type[i])
#矩阵标准化求解
"""
已经正向化后,我们就能够进行矩阵的标准化求解了
把标准化的矩阵记作Z,对于每一个z(i,j)都有:
z(i,j)=x(i,j)/sqrt(sum(x(i,j)*x(i,j)))
"""
Z = data / np.sum(data * data, axis=0) ** 0.5
"""
计算得分并且归一化
"""
max_grd=np.max(Z)
min_grd=np.min(Z)
max_dist = np.sum((max_grd - Z) * (max_grd - Z), axis=1) ** 0.5
min_dist = np.sum((min_grd - Z) * (min_grd - Z), axis=1) ** 0.5
#最终得分
final_score = (min_dist / (max_dist + min_dist))
#归一化处理并且保留精度
final_score /= np.sum(final_score)
final_score = np.around(final_score, decimals=3) 
print("评级结果为一分制")
print("**********************************************************************")
for i in range(len(final_score)):
    print("第{}条河流的Topsis评价得分为:".format(i+1),final_score[i])
print("**********************************************************************")
#绘制可视化图片
number=20#根据数据的个数进行修改即可
x = np.arange(number) 
colors=['red','black','peru','orchid','deepskyblue', 'orange', 'green', 'pink', 'rosybrown', 'gold', 'lightsteelblue', 'teal']
x_label = [chr(i) for i in range(65,65+number)]#表示成A,B,C,......Z
#绘制可视化图
plt.figure(figsize=(12, 8))
plt.xticks(x, x_label) 
#绘制条形统计图
plt.bar(x, final_score,color=colors) 
#设置网格刻度
plt.grid(True,linestyle=':',color='b',alpha=0.6)
plt.title("TOPSIS's Score Figure")
#在柱状图上绘制数据
for xx, yy in zip(x, final_score):
    plt.text(xx, yy + 0.001, str(yy), ha='center')
plt.savefig('C:\\Users\\Zeng Zhong Yan\\Desktop\\TOPSIS Score Figure.png', dpi=500, bbox_inches='tight')
plt.show()

3.算法效果展示

数学建模--Topsis评价方法的Python实现,数学建模,数学建模,python,算法

数学建模--Topsis评价方法的Python实现,数学建模,数学建模,python,算法 文章来源地址https://www.toymoban.com/news/detail-698379.html

到了这里,关于数学建模--Topsis评价方法的Python实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 数学建模评价类方法01——灵敏度分析

    数学建模评价类方法01——灵敏度分析

    在数学建模的评价类问题中,灵敏度分析是一个重量级的评价方法,尤其是针对规划问题,是一定要在建模后对模型进行灵敏度分析的,用来检验模型的稳定性。 本文主要介绍了灵敏度分析的概念和如何对我们建立的模型进行灵敏度分析,最后,我们通过一个例题来具体讲解

    2023年04月09日
    浏览(66)
  • 数学建模之秩和比综合评价方法(RSR)

    数学建模之秩和比综合评价方法(RSR)

    本文参考的是司守奎,孙兆亮主编的数学建模算法与应用(第二版) 秩和比综合评价方法(RSR)在医疗卫生领域的多指标综合评价、统计预测预报、统计质量控制等方面已经得到了广泛应用。 其中秩序和比是行或者列秩次的平均值,是一个非参数的统计量,具有0-1连续变量

    2024年02月04日
    浏览(12)
  • 数学建模-TOPSIS法

    数学建模-TOPSIS法

    来自清风老师数学建模的教程 TOPSIS法(Technique for Order Preference by Similarity to Ideal Solution)可翻译为逼近理想解排序法,国内常简称为优劣解距离法。 TOPSIS 法是一种常用的综合评价方法,其能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距。 层次分析法

    2024年02月15日
    浏览(11)
  • 数学建模--TOPSIS

    数学建模--TOPSIS

    topsis.m Positivization.m inter2Max.m Mid2Max.m Min2Max.m

    2024年02月13日
    浏览(9)
  • 数学建模——TOPSIS法

    数学建模——TOPSIS法

    可翻译为逼近理想解排序法,国内常简称为优劣解距离法 TOPSIS法是一种常用的综合评价方法,其能充分利用原始数据的信息,其结果能精确的反应各评价方案之间的差距。 (上期我们刚讲述了层次分析法,但是对于层次分析法也有一定的限制) 层次分析法的局限性: 那TO

    2024年02月16日
    浏览(6)
  • 数学建模:TOPSIS分析

    🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 假设有m个评价对象,n个评价指标,首先需要进行指标的 正向化 : 极大型 极小型 单点型 区间型 然后对正向化后的矩阵进行 标准化 ,得到 Z Z Z 矩阵:假设 X X X 为正向化后的矩阵,则 Z Z Z 是标准化后的矩阵: X = [ x 11 x 11

    2024年02月11日
    浏览(6)
  • 数学建模之“TOPSIS数学模型”原理和代码详解

    数学建模之“TOPSIS数学模型”原理和代码详解

    TOPSIS(Technique for Order Preference by Similarity to Ideal Solution)是一种多准则决策分析方法, 用于解决多个候选方案之间的排序和选择问题 。它基于一种数学模型, 通过比较每个候选方案与理想解和负理想解之间的相似性来评估其优劣。 TOPSIS方法包括以下步骤: 确定决策准则:

    2024年02月12日
    浏览(12)
  • 数学建模学习笔记||TOPSIS&&熵权法

    数学建模学习笔记||TOPSIS&&熵权法

    目录 评价类问题介绍 TOPSIS法 算法步骤 1.统一指标类型(指标正向化) 2.标准化处理 3.确定正理想解和负理想解 4.计算距离 5.计算相对接近度(S越大越接近理想解) 熵权法 概念 过程 python代码实现 作用         声明 评价类问题介绍 目的:得知一组方案的好坏,对数据评

    2024年01月16日
    浏览(7)
  • 《零基础数学建模》——TOPSIS+熵权法

    本文大部分是对于数学建模清风老师的课程学习总结归纳而来,我的理解可能有错误,大家发现错误可以在评论区批评指正,课程地址:《数学建模清风》   TOPSIS法(Technique for Order Preference by Similarity to Ideal Solution)可翻译为逼近理想解排序法,国内常简称为优劣解距离法

    2023年04月09日
    浏览(8)
  • 数学建模.优劣解距离法Topsis

    数学建模.优劣解距离法Topsis

    1.引言 Topsis也是一种分析类的方法,得到最优结果。 层次分析法:有我了还要你干嘛? 哈哈,这里简单说一下,Topsis与层次分析法的区别: 在处理多个决策层的时候,层次分析法会不准确,显得力不从心,那么这个时候用Topsis会更好一些,简单可以理解为Topsis是层次分析法

    2024年02月05日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包