日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2025/3/21 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数学建模——TOPSIS综合评价模型Python代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數學建模——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代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 波多野吉衣一区二区 | 日日夜夜爽 | 在线观看免费视频一区二区 | 大肉大捧一进一出好爽视频动漫 | 中国爆后菊女人的视频 | 极品探花在线观看 | 无码人妻精品一区二区三区在线 | 国产精品无码午夜福利 | www伊人网| 日韩国产欧美在线观看 | 网站黄在线观看 | 久久天堂网 | 日韩免费福利视频 | 打屁股黄文 | 可以免费看污视频的网站 | 岛国色图 | 好av| www.色中色| 国产精品美女自拍视频 | 公侵犯人妻一区二区三区 | 色老头一区二区三区在线观看 | 超碰在线免费看 | 亚洲av成人精品日韩在线播放 | 久久久九九 | 成人精品一区二区三区电影 | 99国产揄拍国产精品 | 国产精品一区二区人人爽 | 亚洲一区电影 | 哺乳援交吃奶在线播放 | 91免费视频| 久久久久久av无码免费看大片 | 日本3p视频| 日韩av中文字幕在线播放 | 色老头av | 色窝网 | 成人污在线观看 | 伊人蕉久影院 | 欧美日韩免费一区 | 久久久久性色av无码一区二区 | 久久网站av | 在线观看视频一区二区 | 在线免费观看日韩av | 国产免费av观看 | 国产成人在线免费视频 | 五月天婷婷激情视频 | 欧美少妇精品 | 伊人avav | 91色精品| 午夜痒痒网| 国产亚洲精品久久久久久青梅 | 日韩三区在线 | 色丁香av| 中文字幕亚洲一区二区三区 | 一区二区视频在线观看免费 | 免费黄色国产 | 国产肥老妇视频 | 九七人人爽| 亚洲国产日韩欧美一区二区三区 | 色人阁五月天 | 免费三片在线观看网站v888 | 久久av高潮av无码av喷吹 | 在线免费看av | 国产一区二区三区四区五区美女 | 自拍偷拍 国产 | 人人干人人舔 | 瑟瑟网站在线观看 | 天堂av官网 | 成人免费精品视频 | 亚洲国产成人精品久久久 | 久久蜜臀精品av | 宿舍女女闺蜜调教羞辱 | 久色福利| 欧美xxxx黑人又粗又长密月 | 久久麻豆精品 | 国产欧美亚洲一区二区 | 在线看av网址 | 亚洲乱人伦 | 亚洲欧洲国产精品 | 国产精品丝袜在线 | 成人黄色一区二区三区 | 欧美国产一区二区在线观看 | 久久午夜网站 | 国产精品中文久久久久久 | 奶波霸巨乳一二三区乳 | 五月婷网站 | 亚洲免费av网 | 欧美精品一区二区视频 | 国产精品99久久久久久宅男 | 久久免费视频播放 | 91片黄在线观看 | 体内精69xxxxxx| 在线看v片| 欧美日韩资源 | 国产99自拍| 中文字幕免费在线视频 | 亚洲精选在线观看 | 韩国19主播内部福利vip | 日韩电影一区二区三区四区 | 亚洲蜜臀av乱码久久精品蜜桃 |