数学建模——TOPSIS综合评价模型Python代码

正常代码
import numpy as np # 导入numpy包并将其命名为np

##定义正向化的函数
def positivization(x,type,i):

x:需要正向化处理的指标对应的原始向量

typ:指标类型(1:极小型,2:中间型,3:区间型)

i:正在处理的是原始矩阵的哪一列

if type == 1:  #极小型print("第",i,"列是极小型,正向化中...")posit_x = x.max(0)-xprint("第",i,"列极小型处理完成")print("--------------------------分隔--------------------------")return posit_x
elif type == 2:  #中间型print("第",i,"列是中间型")best = int(input("请输入最佳值:"))m = (abs(x-best)).max()posit_x = 1-abs(x-best)/mprint("第",i,"列中间型处理完成")print("--------------------------分隔--------------------------")return posit_x
elif type == 3:  #区间型print("第",i,"列是区间型")a,b = [int(l) for l in input("按顺序输入最佳区间的左右界,并用逗号隔开:").split(",")]m = (np.append(a-x.min(),x.max()-b)).max()x_row = x.shape[0]  #获取x的行数posit_x = np.zeros((x_row,1),dtype=float)for r in range(x_row):if x[r] < a:posit_x[r] = 1-(a-x[r])/melif x[r] > b:posit_x[r] = 1-(x[r]-b)/melse:posit_x[r] = 1print("第",i,"列区间型处理完成")print("--------------------------分隔--------------------------")return posit_x.reshape(x_row)

第一步:从外部导入数据

#注:保证表格不包含除数字以外的内容
x_mat = np.loadtxt(‘river.csv’, encoding=‘UTF-8-sig’, delimiter=’,’) # 推荐使用csv格式文件

第二步:判断是否需要正向化

n, m = x_mat.shape
print(“共有”, n, “个评价对象”, m, “个评价指标”)
judge = int(input(“指标是否需要正向化处理,需要请输入1,不需要则输入0:”))
if judge == 1:
position = np.array([int(i) for i in input(“请输入需要正向化处理的指标所在的列,例如第1、3、4列需要处理,则输入1,3,4”).split(’,’)])
position = position-1
typ = np.array([int(j) for j in input(“请按照顺序输入这些列的指标类型(1:极小型,2:中间型,3:区间型)格式同上”).split(’,’)])
for k in range(position.shape[0]):
x_mat[:, position[k]] = positivization(x_mat[:, position[k]], typ[k], position[k])
print(“正向化后的矩阵:”, x_mat)

第三步:对正向化后的矩阵进行标准化

tep_x1 = (x_mat * x_mat).sum(axis=0) # 每个元素平方后按列相加
tep_x2 = np.tile(tep_x1, (n, 1)) # 将矩阵tep_x1平铺n行
Z = x_mat / ((tep_x2) ** 0.5) # Z为标准化矩阵
print(“标准化后的矩阵为:”, Z)

第四步:计算与最大值和最小值的距离,并算出得分

tep_max = Z.max(0) # 得到Z中每列的最大值
tep_min = Z.min(0) # 每列的最小值
tep_a = Z - np.tile(tep_max, (n, 1)) # 将tep_max向下平铺n行,并与Z中的每个对应元素做差
tep_i = Z - np.tile(tep_min, (n, 1)) # 将tep_max向下平铺n行,并与Z中的每个对应元素做差
D_P = ((tep_a ** 2).sum(axis=1)) ** 0.5 # D+与最大值的距离向量
D_N = ((tep_i ** 2).sum(axis=1)) ** 0.5
S = D_N / (D_P + D_N) # 未归一化的得分
std_S = S / S.sum(axis=0)
sorted_S = np.sort(std_S, axis=0)
print(std_S) # 打印标准化后的得分

std_S.to_csv(std_S.csv) 结果输出到std_S.csv文件

案例:

某一教育评估机构对5个研究生院进行评估。该机构选取了4个评价指标:人均专著、生师比、科研经费、逾期毕业率。采集数据如表所示。

解释:人均专著和科研经费是效益性指标,预期毕业率是成本型指标,生师比是区间型指标,最优范围是[5,6],最差下限2,最差上限12. 4个指标权重采用专家打分的结果,分别为0.2,0.3,0.4和0.1。

实现代码:

import numpy as np
import pandas as pd

#TOPSIS方法函数
def Topsis(A1):
W0=[0.2,0.3,0.4,0.1] #权重矩阵
W=np.ones([A1.shape[1],A1.shape[1]],float)
for i in range(len(W)):
for j in range(len(W)):
if i==j:
W[i,j]=W0[j]
else:
W[i,j]=0
Z=np.ones([A1.shape[0],A1.shape[1]],float)
Z=np.dot(A1,W) #加权矩阵

#计算正、负理想解
Zmax=np.ones([1,A1.shape[1]],float)
Zmin=np.ones([1,A1.shape[1]],float)
for j in range(A1.shape[1]):if j==3:Zmax[0,j]=min(Z[:,j])Zmin[0,j]=max(Z[:,j])else:Zmax[0,j]=max(Z[:,j])Zmin[0,j]=min(Z[:,j])#计算各个方案的相对贴近度C
C=[]
for i in range(A1.shape[0]):Smax=np.sqrt(np.sum(np.square(Z[i,:]-Zmax[0,:])))Smin=np.sqrt(np.sum(np.square(Z[i,:]-Zmin[0,:])))C.append(Smin/(Smax+Smin))
C=pd.DataFrame(C,index=['院校' + i for i in list('12345')])
return C

#标准化处理
def standard(A):
#效益型指标
A1=np.ones([A.shape[0],A.shape[1]],float)
for i in range(A.shape[1]):
if i0 or i2:
if max(A[:,i])==min(A[:,i]):
A1[:,i]=1
else:
for j in range(A.shape[0]):
A1[j,i]=(A[j,i]-min(A[:,i]))/(max(A[:,i])-min(A[:,i]))

#成本型指标elif i==3:if max(A[:,i])==min(A[:,i]):A1[:,i]=1else:for j in range(A.shape[0]):A1[j,i]=(max(A[:,i])-A[j,i])/(max(A[:,i])-min(A[:,i])) #区间型指标else:a,b,lb,ub=5,6,2,12for j in range(A.shape[0]):if lb <= A[j,i] < a:A1[j,i]=(A[j,i]-lb)/(a-lb)elif a <= A[j,i] < b:A1[j,i]=1      elif b <= A[j,i] <= ub:A1[j,i]=(ub-A[j,i])/(ub-b)else:  #A[i,:]< lb or A[i,:]>ubA1[j,i]=0
return A1

#读取初始矩阵并计算
def data(file_path):
data=pd.read_excel(file_path).values
A=data[:,1:]
A=np.array(A)
#m,n=A.shape[0],A.shape[1] #m表示行数,n表示列数
return A

#权重
A=data(‘研究生院评估数据.xlsx’)
A1=standard(A)
C=Topsis(A1)
print©

数学建模——TOPSIS综合评价模型Python代码相关推荐

  1. 数学建模——逻辑回归模型Python代码

    数学建模--逻辑回归模型详解Python代码 程序用到的测试数据: 链接:https://pan.baidu.com/s/1LGD1MAxk2lxO93smSPNyZg 提取码:uukr 代码正文 i ...

  2. 数学建模之:TOPSIS综合评价模型python代码

    1.TOPSIS基本概念 TOPSIS (Technique for Order Preference by Similarity to an Ideal Solution )模型中文叫做" ...

  3. 数学建模——K-means聚类模型Python代码

    一.简介 K均值聚类算法是先随机选取K个对象作为初始的聚类中心.然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心.聚类中心以及分配给它们的对象就代表一个聚类.每分配一 ...

  4. 数学建模——层次分析法Python代码

    数学建模--层次分析法Python代码 import numpy as np class AHP: """ 相关信息的传入和准备 """ d ...

  5. 数学建模-Topsis综合评价(评价模型)

    Topsis算法核心思想是逼近理想解的排序方法.正理想解,各指标都达到各候选方案的最好值,负理想解,各指标都达到各候选方案的最差值.基于有限个评价对象与理想化目标的接近程度进行排序,在现有的对象中进行 ...

  6. 数学建模—模糊综合评价模型

    一.概述 1.数学归纳法和秃子悖论 数学归纳法:(1)当n=1时,成立:(2)当n=k时,成立:(3)只需要证明当n=k+1时,也成立:则推出对所有n都成立. 秃子悖论:一个满头秀发的人,n为这个人掉 ...

  7. 数学建模——ARIMA时间序列预测模型Python代码

    import pandas # 读取数据,指定日期为索引列data = pandas.read_csv('D:\\DATA\\pycase\\number2\\9.3\\Data.csv' ,inde ...

  8. 数学建模之:非线性规划Python代码

    from scipy import optimize as opt import numpy as np from scipy.optimize import minimize# 目标函数 def o ...

  9. 数学建模-Topsis模型(Matlab)

    注意:代码文件仅供参考,一定不要直接用于自己的数模论文中 国赛对于论文的查重要求非常严格,代码雷同也算作抄袭 如何修改代码避免查重的方法:https://www.bilibili.com/video/ ...

最新文章

  1. JavaScript基础(一) 数据类型
  2. PLL_BASE——Basic Phase Locked Loop Clock Circuit(Virtex-5, Spartan-6)
  3. Android自定义Adapter的ListView的思路及代码
  4. connection could not be established with host smtp.exmail.qq.com
  5. Firefox浏览器中,input输入框输入的内容在刷新网页后为何还在?
  6. 4款语音播报来电短信应用[Android]
  7. 10.27 afternoon similated match
  8. bootstrap bootstrapTable 隐藏列
  9. telnet命令---Linux学习笔记
  10. Linux中rename和mv命令用法学习修改文件名区别和总结
  11. 【转】DICOM图像像素值(灰度值)转换为CT值
  12. 【 HDU - 2594 】Simpsons’ Hidden Talents(KMP应用,求最长前缀后缀公共子串)
  13. python简单选择排序_python 选择排序
  14. python去除中间空格只留一个_python 删除字符串中的连续空格只保留一个
  15. bzoj1225 [HNOI2001] 求正整数 约数个数定理+对数
  16. 玩转SpringCloud Security OAuth2资源授权动态权限扩展
  17. 重庆大学计算机学院国防生,在重大有个国防生男朋友是种什么样的体验?
  18. Tokenized的设计哲学(三)
  19. jdbc mysql preparedstatement_java.sql.PreparedStatement不能转换为com.mysql.jdbc.PreparedStatement...
  20. python基础教程:__call__用法

热门文章

  1. html5 规定input域,html5中关于input用法
  2. aix下mysql启动命令_AIX常用操作命令
  3. 四部门发文!坚决避免数据中心盲目无序发展
  4. 成功解决无法连接到YLMF-201404228CG,在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败
  5. ML之xgboost :xgboost.plot_importance()函数的解读
  6. Paper:《Graph Neural Networks: A Review of Methods and Applications》翻译与解读
  7. Algorithm:【Algorithm算法进阶之路】之数据结构二十多种算法演示
  8. Py之matplotlib:matplotlib绘图自定义函数总结
  9. TF之LoR:基于tensorflow利用逻辑回归算LoR法实现手写数字图片识别提高准确率
  10. 从去除噪点的说起,有OpenCV要什么PS?