Sto cercando di trovare la distanza di un punto (in 4 dimensioni, solo 2 sono mostrate qui) (qualsiasi croce colorata nella figura) a una presunta frontiera di Pareto (linea nera). Questa linea rappresenta la migliore rappresentazione di frontiera di Pareto durante un processo di ottimizzazione.Calcola la distanza dalla linea smussata
Pareto = [[0.3875575798354123, -2.4122340425531914], [0.37707675586149786, -2.398936170212766], [0.38176077842761763, -2.4069148936170213], [0.4080534133844003, -2.4914285714285715], [0.35963459448268725, -2.3631532329495126], [0.34395217638838566, -2.3579931972789114], [0.32203302106516224, -2.344858156028369], [0.36742404637441123, -2.3886054421768708], [0.40461156254852226, -2.4141156462585034], [0.36387868122767975, -2.375], [0.3393199109776927, -2.348404255319149]]
In questo momento, ho calcolare la distanza da un qualsiasi punto della frontiera di Pareto come questo:
def dominates(row, rowCandidate):
return all(r >= rc for r, rc in zip(row, rowCandidate))
def dist2Pareto(pareto,candidate):
listDist = []
dominateN = 0
dominatePoss = 0
if len(pareto) >= 2:
for i in pareto:
if i != candidate:
dominatePoss += 1
dominate = dominates(candidate,i)
if dominate == True:
dominateN += 1
listDist.append(np.linalg.norm(np.array(i)-np.array(candidate)))
listDist.sort()
if dominateN == len(pareto):
print "beyond"
return listDist[0]
else:
return listDist[0]
Dove posso calcolare la distanza da ogni punto della linea nera, e recuperare la distanza più breve (distanza dal punto più vicino della nota Frontiera).
Tuttavia, penso che dovrei calcolare la distanza dal segmento di linea più vicino. Come potrei fare per raggiungere questo?
Questa è una domanda sull'algoritmo e probabilmente sarebbe meglio migrare verso uno degli altri siti SE ... ma quale? Math.SE ha molti successi per "spline point distance". – smci
Bene, quando si è in grado di trovare i due punti più vicini sulla frontiera di pareto, la connessione lineare tra questi due punti è probabilmente l'elemento di linea più vicino, non è vero? Quindi, come secondo passo puoi calcolare la distanza tra la linea e il punto. – jkalden
La consideriamo un'approssimazione lineare-parziale, non una spline effettiva? – smci