python数学实验与建模,数学建模 Python
数学建模——TOPSIS综合评价模型Python代码
正电码
将numpy作为np #导入numpy包,并将其命名为np。
# #定义一个正的函数。
定义正定性(x,type,I):
x:对应于要规范化的索引的原始向量typ:索引类型(1:最小,2:中间,3:区间)I:如果type==1,则正在处理原始矩阵的哪一列:# minimal print(第一个,I,列最小,正在规范化.)POSIT _ X=X .对列的极小处理)print ( -列是中间类型)best=int(input(请输入最佳值:))m=(ABS (x-best))。max()POSIT _ x=1-ABS(x-best)/m print( first ,I,列中间处理完成)print ( - 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)列间隔处理完成)print(-a
X _ mat=np.loadtxt (river.csv ,编码= UTF-8-SIG ,分隔符=,)# csv格式文件推荐使用。
第二步:确定是否需要转发N,m=x _ mat.shape。
打印(“合计”,n,“评价对象”,m,“评价指标”)
Judge=int(输入("指标是否需要前向处理,必要时请输入1,不需要时输入0:"))
如果judge==1:
position=NP . array([int(I)for I in input("请输入待处理指标的列,例如,如果需要处理1、3、4列,则输入1、3、4 ")。拆分(,)])
位置=位置-1
typ=NP . array([int(j)for j in input("请按顺序输入这些列的索引类型(1: minimal,2: intermediate,3: interval)格式同上")。拆分(,)])
对于范围内的k(position . shape[0]):
x_mat[:position[k]]=正定性(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 _最小,(n,1)) #将步长_最大值向下平铺n行,并对z中的每个对应元素进行差分
D _ P=((TEP _ A * * 2)。SUM (axis=1)) * *距离最大值0.5 # D的距离矢量
D_N=((tep_i ** 2)。sum(轴=1)) ** 0.5
S=D_N/(D_P D_N) #非标准化分数
std_S=S/S.sum(轴=0)
sorted_S=np.sort(std_S,axis=0)
Print(std_S) #打印标准化分数
Std_S.to_csv(std_S.csv)结果输出到std_S.csv文件案例:
一个教育评估机构评估五个研究生院。该机构选取了人均专著数、生师比、科研经费、逾期毕业率四个评价指标。收集的数据显示在表格中。
解释:人均专著和科研经费是效率指标,期望毕业率是成本导向,生师比是区间导向。最优区间为[5,6],最差下限为2,最差上限为12。4.这些指标的权重由专家打分,分别为0.2、0.3、0.4、0.1。
实施代码:
将numpy作为np导入
进口熊猫作为pd
#TOPSIS方法功能
定义Topsis(A1):
W0=[0.2,0.3,0.4,0.1] #权重矩阵
W=np.ones([A1.shape[1],A1.shape[1]],float)
对于范围内的我(兰(西)):
对于范围内的j(len(W)):
如果i==j:
W[i,j]=W0[j]
否则:
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)对于范围(A1 .shape[1]):如果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计算各个方案的相对贴近度对于范围(a1)内的I,CC=[]。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)])返回C #标准化处理
定义标准(一):
#效益型指标
A1=np.ones([A.shape[0],A.shape[1]],float)
对于范围内的I(a .形状[1]):
如果i0或i2:
如果max(A[:i])==min(A[:i]):
A1[:i]=1
否则:
对于范围内的j(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]=1 else: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,12 for 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]/(u b-b)else:# A[I读取初始矩阵并计算
定义数据(文件路径):
data=pd.read_excel(文件路径).价值观念
a=数据[:1:]
A=np.array(A)
#m,n=A.shape[0],A.shape[1] #m表示行数,n表示列数
返回A
#权重
a=数据(研究生院评估数据. xlsx’)
A1=标准(一)
C=Topsis(A1)
打印
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。