import numpy as np
from sklearn.metrics import recall_score
from sklearn.preprocessing import MinMaxScaler
from collections import OrderedDict
class TOPSIS():
def __init__(self,X):
self.X = X
self.Xbest = self.find_best()
print(self.Xbest)
self.Xlast = self.find_last()
print(self.Xlast)
self.target = self.topsis()
def D(self, a, b):
return np.sqrt(sum((a - b) ** 2))
def find_best(self):
best = np.zeros(2)
best[0] = min(self.X[:,0])
best[1] = max(self.X[:,1])
return best
def find_last(self):
last = np.zeros(2)
last[0] = max(self.X[:,0])
last[1] = min(self.X[:,1])
return last
def topsis(self):
criteria = OrderedDict()
for idx in range(len(self.X)):
criteria[idx] = self.D(self.X[idx],self.Xlast) / (self.D(self.X[idx],self.Xlast) + self.D(self.X[idx],self.Xbest))
return max(criteria,key=criteria.get)
if __name__ == '__main__':
X = [[3.895722234, 0.034759255],[2.867028395, 0.049106175],[2.775693705, 0.070220432],[2.817633802, 0.091183099],[2.775377082, 0.112311459],[2.225388451, 0.13219197],[2.336773934, 0.152998457],[2.928312541, 0.357229153]]
X = np.array(X)
minmax = MinMaxScaler()
X = minmax.fit_transform(X=X)
print(X)
tp = TOPSIS(X=X)
print(tp.target)