Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- import numpy.linalg as npl
- import math
- def Satty(A):
- val, vec = npl.eig(A)
- real = np.isreal(val)
- for i in range (val.size):
- val[i] = 0 if real[i] is False else val[i]
- max = np.real(np.max(val))
- return (max-len(A))/(len(A)-1)
- def Saaty(matrix, dim):
- w,v = npl.eig(matrix)
- eig_val = float(w.max())
- CI = (eig_val-dim)/(dim-1)
- return CI
- # def getVec(A):
- # A=np.asarray(A)
- # result=[0]*len(A)
- # for i in range(len(A)):
- # result[i] = A[i].prod()**(1.0/len(A[i]))
- # result = result/np.sum(result)
- # result = np.transpose(result)
- # return result
- def getRanking(A):
- result = []
- for W in A:
- W = np.squeeze(np.asarray(W))
- result.append(W.prod() ** (1.0 / len(W)))
- result = abs(np.asarray(result)) / sum(abs(np.asarray(result)))
- return result
- def geom(A):
- ranking = getRanking(A)
- n = len(A)
- sum = 0
- for i in range(1, n):
- for j in range(i+1, n):
- sum += (math.log(A[i][j] * ranking[j]/ranking[i], 10)) ** 2
- return (2/((n-1)*(n-2)))*sum
- def K(A,i,j,k):
- a=abs(1-(A[i][k]*A[k][j])/A[i][j])
- b=abs(1-A[i][j]/(A[i][k]*A[k][j]))
- return(min(a,b))
- def Koczkodaj(A):
- max = 0
- for i in range (len(A)):
- for j in range (len(A)):
- for k in range (len(A)):
- if(K(A,i,j,k)>max):
- max = K(A,i,j,k)
- return max
- A=[[1,7,3] , [1/7,1,2] , [1/3,1/2,1]]
- B=[[1,1/5,7,1] , [5,1,1/2,2] , [1/7,2,1,3] , [1,1/2,1/3,1]]
- C=[[1,2,5,1,7] , [1/2,1,3,1/2,5] , [1/5,1/3,1,1/5,2] , [1,2,5,1,7] , [1/7,1/5,1/2,1/7,1]]
- print("Indeks Sattego:")
- print(Satty(A))
- print(Satty(B))
- print(Satty(C))
- print("Indeks Koczkodaja:")
- print(Koczkodaj(A))
- print(Koczkodaj(B))
- print(Koczkodaj(C))
- print("Indeks geometryczny")
- print(geom(A))
- print(geom(B))
- print(geom(C))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement