Ich versuche die Entfernung eines Punktes (in 4 Dimensionen, hier sind nur 2 gezeigt) (beliebige farbige Kreuze in der Abbildung) zu einer angenommenen Pareto-Grenze (schwarze Linie) zu finden. Diese Linie repräsentiert die beste Pareto-Grenzdarstellung während eines Optimierungsprozesses.Abstand zu geglätteter Linie berechnen
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]]
Gerade jetzt, berechne ich den Abstand von einem beliebigen Punkt auf der Pareto Grenze wie folgt aus:
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]
Wo ich den Abstand zu jedem Punkt der schwarzen Linie zu berechnen, und rufen Sie den kürzesten Abstand (Entfernung zum nächsten Punkt des bekannten Frontier).
Allerdings glaube ich, ich sollte stattdessen die Entfernung zum nächsten Liniensegment berechnen. Wie würde ich das erreichen?
Dies ist eine Algorithmusfrage und würde wahrscheinlich besser auf eine der anderen SE-Seiten migriert werden ... aber welche? Math.SE hat viele Treffer für "Punkt-Spline-Abstand". – smci
Nun, wenn Sie in der Lage sind, die zwei nächsten Punkte auf der Pareto-Grenze zu finden, ist die lineare Verbindung zwischen diesen beiden Punkten wahrscheinlich das nächste Linienelement, oder? So können Sie als zweiten Schritt den Abstand zwischen der Linie und dem Punkt berechnen. – jkalden
Nehmen wir dies eine stückweise lineare Approximation, nicht einen tatsächlichen Spline? – smci