मैं इसे पढ़ रहा हूं: http://theory.stanford.edu/~amitp/GameProgramming/Heuristics.html
लेकिन कुछ चीजें हैं जो मुझे समझ में नहीं आती हैं, उदाहरण के लिए लेख विकर्ण आंदोलन के साथ पाथफाइंडिंग के लिए कुछ इस तरह का उपयोग करने के लिए कहता है:
function heuristic(node) =
dx = abs(node.x - goal.x)
dy = abs(node.y - goal.y)
return D * max(dx, dy)
मुझे नहीं पता कि लेख में डी की तरह दिखने वाला प्राकृतिक रास्ता पाने के लिए डी कैसे सेट किया जाता है, मैंने डी को बगल के वर्गों के बीच सबसे कम लागत पर सेट किया है, जैसे कि मैंने कहा, और मुझे नहीं पता कि हेयुरिस्टिक के बारे में उन्हें क्या करना चाहिए 4 * डी, कि किसी भी चीज को बदलने के लिए प्रतीत नहीं होता है।
यह मेरा विधर्मी कार्य और चालन कार्य है:
def heuristic(self, node, goal):
D = 5
dx = abs(node.x - goal.x)
dy = abs(node.y - goal.y)
return D * max(dx, dy)
def move_cost(self, current, node):
cross = abs(current.x - node.x) == 1 and abs(current.y - node.y) == 1
return 7 if cross else 5
परिणाम:
हम चाहते हैं कि चिकनी नौकायन पथ:
मेरे बाकी कोड: http://pastebin.com/TL2cEkeX
अपडेट करें
यह अब तक का सबसे अच्छा समाधान है:
def heuristic(node, start, goal):
dx1 = node.x - goal.x
dy1 = node.y - goal.y
dx2 = start.x - goal.x
dy2 = start.y - goal.y
cross = abs(dx1*dy2 - dx2*dy1)
dx3 = abs(dx1)
dy3 = abs(dy1)
return 5 + (cross*0.01) * (dx3+dy3) + (sqrt(2)-2) * min(dx3, dy3)
def move_cost(current, node):
cross = abs(current.x - node.x) == 1 and abs(current.y - node.y) == 1
return 7 if cross else 5
यह दूसरी तस्वीर से वांछित पथ का निर्माण करता है, लेकिन बाधाओं को बहुत अच्छी तरह से संभालता नहीं है (दीवारों पर क्रॉल करता है) और कभी-कभी लंबी दूरी पर इष्टतम पथ का उत्पादन करने में विफल रहता है।
इसे सुधारने के लिए मैं कुछ ट्वीक और अनुकूलन क्या कर सकता हूं?