2015-11-11 8 views
5

की दूरी की गणना करें मैं एक बिंदु की दूरी (4 आयामों में, केवल 2 दिखाए गए हैं) (आकृति में किसी भी रंगीन क्रॉस) को एक अनुमानित पारेटो फ्रंटियर (ब्लैक लाइन) में खोजने की कोशिश कर रहा हूं। यह लाइन ऑप्टिमाइज़ेशन प्रक्रिया के दौरान सर्वश्रेष्ठ पारेटो फ्रंटियर प्रतिनिधित्व का प्रतिनिधित्व करती है।चिकनी रेखा

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] 

कहाँ मैं काला रेखा के प्रत्येक बिंदु के लिए दूरी की गणना, और कम से कम दूरी को पुनः प्राप्त (:

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

अभी, मैं इस तरह परेटो सीमा के लिए किसी भी बिंदु से दूरी की गणना ज्ञात फ्रंटियर के निकटतम बिंदु से दूरी)।

हालांकि, मुझे लगता है कि मुझे इसके बजाय निकटतम रेखा खंड की दूरी की गणना करनी चाहिए। मैं इसे प्राप्त करने के बारे में कैसे जाउंगा?

enter image description here

+1

यह एक एल्गोरिदम प्रश्न है, और शायद बेहतर एसई साइटों में से एक में माइग्रेट किया जाएगा ... लेकिन कौन सा? Math.SE में "प्वाइंट स्पलीन दूरी" के लिए बहुत सी हिट हैं। – smci

+1

ठीक है, जब आप पेरेटो फ्रंटियर पर दो निकटतम बिंदु ढूंढने में सक्षम होते हैं, तो इन दो बिंदुओं के बीच रैखिक कनेक्शन शायद निकटतम रेखा तत्व है, है ना? इस प्रकार, एक दूसरे चरण के रूप में आप रेखा और बिंदु के बीच की दूरी की गणना कर सकते हैं। – jkalden

+0

क्या हम इसे एक टुकड़ा-रैखिक अनुमान लगाते हैं, वास्तविक स्पिन नहीं? – smci

उत्तर

1

लाइन पर निकटतम बिंदु के निर्देशांक के लिए सूत्र here दिया जाता है। विशेष रूप से, आप "दो बिंदुओं द्वारा परिभाषित लाइन" नामक एक में रूचि रखते हैं। भावी पीढ़ी के लिए, सूत्र है:

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

क्योंकि सीमा अपेक्षाकृत आसान है, आप सीमा में प्रत्येक दो बिंदु रेखा खंड के माध्यम से लूप, और प्रत्येक के लिए निकटतम दूरी की गणना, छोटी से छोटी रखने कर सकते हैं। आप आवश्यक गणनाओं की संख्या को सीमित करने के लिए अन्य बाधाओं/पूर्व-गणनाओं को पेश कर सकते हैं।

+0

आपका सूत्र उच्च आयामों को निकालने के लिए थोड़ा मुश्किल है, लेकिन व्युत्पन्न का उपयोग डॉट उत्पादों के संदर्भ में इसे फिर से व्यक्त करने के लिए किया जा सकता है, जो इसे मूल प्रश्न पर 100% लागू करेगा। –

+0

@ पागल भौतिक विज्ञानी: हाँ, मुझे मूल प्रश्न में याद आया। यहां एक अच्छा फॉर्मूलेशन है: http://programmers.stackexchange.com/a/168577 – Benjamin

+0

इसके अलावा, यह लाइन लाइन से नहीं, पूरी लाइन की दूरी है। विभिन्न भाषाओं में कुछ नमूना गणनाओं के लिए यह SO पोस्ट देखें: http://stackoverflow.com/questions/849211/shortest-distance-between-a-point-and-a-line-segment –

संबंधित मुद्दे