আমি এটি পড়ছি: http://theory.stanford.edu/~amitp/ গেমপ্রোগ্রামিং / হিউরিস্টিক্স এইচটিএমএল
তবে এমন কিছু জিনিস রয়েছে যা আমি বুঝতে পারি না, উদাহরণস্বরূপ নিবন্ধটি তির্যক আন্দোলনের সাথে প্যাথফাইন্ডিংয়ের জন্য এই জাতীয় কিছু ব্যবহার করতে বলেছে:
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
এটি দ্বিতীয় ছবি থেকে কাঙ্ক্ষিত পথ উত্পাদন করে তবে বাধা খুব ভালভাবে পরিচালনা করে না (দেয়ালগুলিতে হামাগুড়ি দেয়) এবং কখনও কখনও দীর্ঘ দূরত্বে সর্বোত্তম পথ তৈরি করতে ব্যর্থ হয়।
এটিকে উন্নত করার জন্য আমি কীভাবে কিছু টুইট এবং অপ্টিমাইজেশন প্রয়োগ করতে পারি?