Парето-фронт и горизонт рейтинге - питон
У меня есть следующий код Python, который вычисляет фронт Парето определенного списка 2-d векторов:
def pareto_frontier(Xs, Ys, maxX = True, maxY = True): myList = sorted([[Xs[i], Ys[i]] for i in range(len(Xs))], reverse=maxX) p_front = [myList[0]] for pair in myList[1:]: if maxY: if pair[1] >= p_front[-1][1]: p_front.append(pair) else: if pair[1] <= p_front[-1][1]: p_front.append(pair) p_frontX = [pair[0] for pair in p_front] p_frontY = [pair[1] for pair in p_front] return p_frontX, p_frontY
Моя цель-преобразовать эту функцию в задачу ранжирования. Я читал о ранжировании skyline и хотел бы применить этот алгоритм ранжирования к списку из 100 5-d векторов (минимизируя все переменные). Поскольку это довольно небольшой список векторов, я не очень заинтересован в эффективности. В качестве ссылки эти документы, по-видимому, представляют мою желаемую цель:
https://www.sciencedirect.com/science/article/pii/S0169023X10000480
http://cgi.di.uoa.gr/~gwalk/pubs/dp-idp.pdf
https://www.sciencedirect.com/science/article/pii/S0306437911000421
Что я уже пробовал:
<pre>def pareto_frontier(Xs, Ys, maxX = True, maxY = True): myList = sorted([[Xs[i], Ys[i]] for i in range(len(Xs))], reverse=maxX) p_front = [myList[0]] for pair in myList[1:]: if maxY: if pair[1] >= p_front[-1][1]: p_front.append(pair) else: if pair[1] <= p_front[-1][1]: p_front.append(pair) p_frontX = [pair[0] for pair in p_front] p_frontY = [pair[1] for pair in p_front] return p_frontX, p_frontY