2015-11-11 17 views
5

Bir noktanın mesafesini (4 boyutta, sadece 2 gösterilmektedir) (şekildeki herhangi bir renkli haç) sözde bir Pareto sınırına (siyah çizgi) bulmaya çalışıyorum. Bu çizgi, bir optimizasyon işlemi sırasında en iyi Pareto sınır temsilini temsil eder. Ben siyah çizginin her noktasına mesafeyi hesaplamak veDüzeltilmiş çizgiye olan uzaklığı hesaplayın

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] 

(kısa mesafeyi almak:

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]] 

Şu anda, böyle Pareto sınıra herhangi bir noktadan mesafeyi hesaplamak bilinen Sınırın en yakın noktasına olan mesafe). Ancak, bunun yerine en yakın satır parçasına olan mesafeyi hesaplamam gerektiğini hissediyorum. Buna ulaşmak için nasıl giderim?

enter image description here

+1

Bu bir algoritma sorusudur ve muhtemelen diğer GD sitelerden birine daha iyi taşınacaktır ... ama hangisi? Math.SE, "point spline distance" için çok sayıda isabet aldı. – smci

+1

Peki, pareto sınırındaki en yakın iki noktayı bulabildiğinizde, bu iki nokta arasındaki doğrusal bağlantı muhtemelen en yakın satır elemanıdır, değil mi? Böylece, ikinci adım olarak çizgi ve nokta arasındaki mesafeyi hesaplayabilirsiniz. – jkalden

+0

Bunu, parçalı doğrusal bir yaklaşım mı, gerçek bir spline değil mi? – smci

cevap

1

hattı en yakın noktasının koordinatları için formül here verilir. Özellikle, "iki nokta ile tanımlanan satır" ile ilgileniyorsunuz. kuşaklar için, formül: sınır nispeten basit

Formula for distance between a line defined by two points, and a third point

için, olabildiğince sınır her iki noktalı çizgi parçası döngü ve en küçük tutmak, her biri için en küçük mesafe hesaplar. Gerekli hesap sayısını sınırlamak için diğer kısıtlamalar/ön hesaplamalar yapabilirsiniz.

+0

Formülünüzün, daha yüksek boyutlara saptamak biraz zor, ancak türev, nokta ürün cinsinden yeniden ifade etmek için kullanılabilir; bu, orijinal soruya% 100 uygulanabilir. –

+0

@ Mad Fizikçi: Evet, orijinal soruda bunu özledim. Burada iyi bir formülasyon var: http://programmers.stackexchange.com/a/168577 – Benjamin

+0

Ayrıca, bu hat çizgisine değil, tüm satıra olan mesafedir. Farklı dillerde bazı örnek hesaplamalar için bu SO mesajına bakın: http://stackoverflow.com/questions/849211/shortest-distance-between-a-point-and-a-line-segment –