Member 13958865 Ответов: 0

Парето-фронт и горизонт рейтинге - питон


У меня есть следующий код 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

0 Ответов