基于python的数学建模---多模糊评价
生活随笔
收集整理的這篇文章主要介紹了
基于python的数学建模---多模糊评价
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
權重 ak的確定——頻數統計法
選取正整數p的方法
畫箱形圖 取1/4與3/4的距離(IQR) ceil()取整
代碼:
import numpy as np
def frequency(matrix,p):
'''
頻數統計法確定權重
:param matrix: 因素矩陣
:param p: 分組數
:return: 權重向量
'''
A = np.zeros((matrix.shape[0]))
for i in range(0, matrix.shape[0]):
## 根據頻率確定頻數區間列表
row = list(matrix[i, :])
maximum = max(row)
minimum = min(row)
gap = (maximum - minimum) / p
row.sort()
group = []
item = minimum
while(item < maximum):
group.append([item, item + gap])
item = item + gap
print(group)
# 初始化一個數據字典,便于記錄頻數
dataDict = {}
for k in range(0, len(group)):
dataDict[str(k)] = 0
# 判斷本行的每個元素在哪個區間內,并記錄頻數
for j in range(0, matrix.shape[1]):
for k in range(0, len(group)):
if(matrix[k, j] >= group[k][0]):
dataDict[str(k)] = dataDict[str(k)] + 1
break
print(dataDict)
# 取出最大頻數對應的key,并以此為索引求組中值
index = int(max(dataDict,key=dataDict.get))
mid = (group[index][0] + group[index][1]) / 2
print(mid)
A[i] = mid
A = A / sum(A[:]) # 歸一化
return A
權重 ak的確定——模糊層次分析法
代碼:
import numpy as np def AHP(matrix):
if isConsist(matrix):
lam, x = np.linalg.eig(matrix)
return x[0] / sum(x[0][:])
else:
print("一致性檢驗未通過")
return None def isConsist(matrix):
'''
:param matrix: 成對比較矩陣
:return: 通過一致性檢驗則返回true,否則返回false
'''
n = np.shape(matrix)[0]
a, b = np.linalg.eig(matrix)
maxlam = a[0].real
CI = (maxlam - n) / (n - 1)
RI = [0, 0, 0.58, 0.9, 1.12, 1.24, 1.32, 1.41, 1.45]
CR = CI / RI[n - 1]
if CR < 0.1:
return True, CI, RI[n - 1]
else:
return False, None, None
import numpy as np def appraise(criterionMatrix, targetMatrixs, relationMatrixs):
'''
:param criterionMatrix: 準則層權重矩陣
:param targetMatrix: 指標層權重矩陣列表
:param relationMatrixs: 關系矩陣列表
:return:
'''
R = np.zeros((criterionMatrix.shape[1], relationMatrixs[0].shape[1]))
for index in range(0, len(targetMatrixs)):
row = mul_mymin_operator(targetMatrixs[index], relationMatrixs[index])
R[index] = row
B = mul_mymin_operator(criterionMatrix, R)
return B / sum(B[:]) def mul_mymin_operator(A, R):
B = np.zeros(1, R.shape[1])
for column in range(1, R.shape[1]):
list = []
for row in range(1, R.shape[0]):
list = list.append(A[row] * R[row, column])
B[0, column] = mymin(list)
return B def mymin(list):
global temp
for index in range(1, len(list)):
if index == 1:
temp = min(1, list[0] + list[1])
else:
temp = min(1, temp + list[index])
return temp
總結
以上是生活随笔為你收集整理的基于python的数学建模---多模糊评价的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue webpack打包 -webki
- 下一篇: jquery两稳定版本比较~~