A* Pathfinding and other path generator.

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
การบวกจำนวนสองจำนวนที่มีผลบวกไม่เกิน 9
Advertisements

การเสนอโครงการวิทยานิพนธ์
Lists Data Structure LAUKHWAN NGAMPRASIT LAUKHWAN NGAMPRASIT.
การจำลองความคิด รายวิชา ง40102 หลักการแก้ปัญหาและการโปรแกรม
ข้อตกลงในการเรียน พื้นฐานที่จำเป็นสำหรับนำไปใช้ในเรื่อง
Engineering Problem Solving Program by Using Finite Element Method
การเลือกตัวอย่าง อ.สมพงษ์ พันธุรัตน์.
Hashing Function มีหลายฟังก์ชั่น การเลือกใช้ขึ้นอยู่กับความเหมาะสมของข้อมูล ตัวอย่างของฟังก์ชั่นแฮชมีดังนี้ 1. Mod คือการนำค่าคีย์มา mod ด้วยค่า n ใด.
Register Allocation and Graph Coloring
สภาวะแวดล้อมในขณะโปรแกรมทำงาน
Ordering and Liveness Analysis ลำดับและการวิเคราะห์บอกความ เป็นอยู่หรือความตาย.
โดย ศศิธร อารยะพูนพงศ์ สำนักคอมพิวเตอร์
การเรียงลำดับและการค้นหาแบบง่าย
Data structure & Algorithms
Google Maps.
บทที่ 2 หลักการแก้ปัญหา
จำนวนจริง F M B N ขอบคุณ เสถียร วิเชียรสาร.
บทที่ 3 พื้นฐานการเขียนโปรแกรม Visual Basic
Microsoft Access.
Microsoft Access.
กราฟ พื้นที่ และ ปริมาตร
Logic Programming โปรแกรมเชิงตรรกะ.
Chapter 3 Graphics Output primitives Part II
Poster Presentation โดย สำหรับ การประชุม สคร.5 รศ.นพ.สมพนธ์ ทัศนิยม
Image Processing and Computer Vision
Image Processing & Computer Vision
Image Processing & Computer Vision
การตรวจสอบข้อมูลทางอุทกวิทยา
Digital Image Processing Part 3 – Pixel Relationship
การควบคุมทิศทางการทำงานของโปรแกรม
AI 2009 Homework#2 งานกลุ่ม แก้ไข map ใหม่ ให้สวยงาม เพิ่มพื้นทราย ( มีรูปให้ แล้ว ) แก้ไขโปรแกรม เส้นทางการเดิน ที่ใช้ A* ดังนี้ กำหนดส่ง วันที่ 20 มกราคม.
ขั้นตอนวิธี (Algorithm)
การจัดแสงสำหรับงานโทรทัศน์
โปรแกรม Microsoft Access
การหาคุณลักษณะพิเศษของตัวอักษร
ประชากร และกลุ่มตัวอย่าง
สถิติเชิงสรุปอ้างอิง(Inferential or Inductive Statistics)
Suphot Sawattiwong Sprite Suphot Sawattiwong
ตัวแปร (Variable) คือ ชื่อที่ตั้งขึ้นเพื่อเก็บข้อมูลในหน่วยความจำ สามารถเก็บข้อมูลชนิดใดก็ ได้ ลักษณะที่สำคัญ ค่าที่จัดเก็บ เมื่อปิดโปรแกรมข้อมูลจะหายไป.
โครงสร้างข้อมูลแบบคิว
Memory Management ในยุคก่อน
บทที่ 8 File Management. ประเด็นที่ต้องพิจารณา ถ้าต้องการเก็บข้อมูลจะเก็บข้อมูลไว้ที่ไหน สามารถเก็บข้อมูลตรงไปยัง media โดยไม่ต้อง จัดรูปแบบการเก็บได้หรือไม่
พื้นฐานของ Microsoft Office Excel โดย
การดำเนินการกลุ่มที่ 1 ง การสร้างเกม คอมพิวเตอร์
เครื่องมือที่ใช้ในการกำหนดการเคลื่อนไหว
เรียนรู้การสร้างเกมจากตัวอย่าง 1
ประชากรและการสุ่มกลุ่มตัวอย่าง
วิธีสายงานวิกฤต Critical Path Method แบบ Activity on Arrow.
เกม PONG. เกม Pong เป็นเกมคลาสสิกที่โด่งดังมากใน อดีต ในครั้งแรกออกมาเป็นเกมตู้ก่อนประมาณ 1972 ต่อมาเมื่อได้รับความนิยมเพิ่มขึ้นในปี 1975 ทาง บริษัท Atari.
โดย อ.วัชรานนท์ จุฑาจันทร์
บทที่ 2 หลักการแก้ปัญหา
การเลือกและปรับรูปทรงวัตถุ การเลือกและปรับรูปทรงวัตถุ
Present proposal project เรื่อง Thailand shortest path
Computer Programming for Engineers
โปรแกรม Microsoft Access
คลื่น คลื่น(Wave) คลื่น คือ การถ่ายทอดพลังงานออกจากแหล่งกำหนดด้วยการ
วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)
หลักการแก้ปัญหา
Shortest-Path Algorithms
School of Information Communication Technology,
adversarial Search Techniques
หลักการเขียนโปรแกรม ( )
การวิเคราะห์เชิงพื้นที่
หลักการเขียนโปรแกรม ( )
โครงสร้าง ภาษาซี.
การกำหนดโครงการ (Project Scheduling: PERT / CPM)
ความหมาย รูปแบบหนึ่งของบทเรียน คอมพิวเตอร์ช่วยสอนซึ่ง มีการออกแบบบทเรียน โดยมีเป้าหมายที่จะเสนอ ข้อคำถามในรูปแบบต่าง ๆเพื่อให้ผู้เรียนฝึกปฏิบัติ
บทที่ 6 การจัดการโครงการ Project Management ญาลดา พรประเสริฐ.
Week 13 Basic Algorithm 2 (Searching)
บทที่ 7 การสร้างและการใช้งาน ฟังก์ชัน อาจารย์ชนิดา คำเพ็ง สาขาวิชาเทคโนโลยีสารสนเทศ คณะวิทยาศาสตร์ และเทคโนโลยี
ใบสำเนางานนำเสนอ:

A* Pathfinding and other path generator. Dr.Yodthong Rodkaew

Game Map โดยทั่วไป ฉากในเกมจะมีสองแบบ คือ แบบคงที่ (ในเกมสมัยเก่าๆ = เกม flash ในยุคนี้) แบบเลื่อนฉากได้

Game Map แผนที่ในเกมจะแบ่งเป็น 2 ประเภทหลักๆ คือ แผนที่แบบบล็อก (TileMap)- ใช้การจัดเรียงของบล็อกต่อๆ กัน เพื่อสร้างเป็นแผนที่ แผนที่แบบอิสระ (VectorMap) - ใช้รูปหรือขอบเขต polygon เป็นสิ่งกำหนดขนาดแผนที่

tileset tilemap 1 1 5 5 8 8 10 11 11 20 10 11 20 7 7 9 tilemap = array 2x2

http://doom.wikia.com/wiki/Image:MAP01.png

Game Map การเคลื่อนที่ในฉากแผนที่ของเกม เป็นสิ่งที่เป็นพื้นฐานที่ทุกเกมจะต้องมี ประกอบด้วย 1.คุณสมบัติของพื้นที่ เป็นส่วนที่กำหนดว่าพื้นที่นั้นมีลักษณะอย่างไร ตัว unit สามารถเคลื่อนที่ได้หรือไม่ (area property) 2.สิ่งกีดขวางและขอบเขตภายในแผนที่ (collision & boundry) 3.ฟังก์ชั่นการสร้างเส้นทางเคลื่อนที่ระหว่างจุดที่กำหนด โดยหลบหลีกสิ่งกีดขวาง (pathfinding & collision prevention)

Movement in Game Map เมื่อ unit มีการเคลื่อนที่ในฉากแผนที่ของเกม ข้อมูลที่ unit จะต้องมีคือ ตำแหน่งของ unit อ้างอิงจากแผนที่ ทิศทางในการเคลื่อนที่ ความเร็วในการเคลื่อนที่ จุดหมายปลายทาง อาจมีข้อมูลอื่นๆ เพิ่มเติมได้ เช่น เมื่อ unit เดินตาม unit อื่นๆ direction(x,y,z) velocity(x,y,z) position (x,y,z) target(x,y,z)

The Search Area เพื่อความเข้าใจง่ายขึ้นจะใช้ tile map สมมติให้ unit อยู่ที่ตำแหน่ง A และต้องการเคลื่อนที่จาก A ไปยังตำแหน่ง B A O B unit สามารถเคลื่อนที่ได้ 8 ทิศทาง O = obstacle = สิ่งกีดขวาง, อุปสรรค, ยุ่งยาก http://www.policyalmanac.org/games/aStarTutorial.htm

A* Search แต่ละบล็อกของ tile map จะเรียกว่า node -- การค้นหาเริ่มดังนี้ 1) เริ่มจาก node A และใส่ลงไปใน "open list" ข้อมูลที่เก็บใน open list จะเป็นข้อมูลที่อาจเป็นเส้นทางที่ใช้ในการเคลื่อนที่ 2) มองหา ตำแหน่ง node ใกล้เคียง ที่อยู่ติดกับจุดเริ่มต้น node A ทั้งหมด ที่สามารถเดินไปได้ ถ้ามี node ไหนที่เดินไปได้ให้ใส่ใน open list ด้วย และกำหนดให้ A เป็น "parent node" ของตำแหน่งที่เพิ่มเข้าไปใหม่ (การกำหนด parent node จะช่วยในการ trace เส้นทางเดิน) 3) นำเอา node A ออกจาก open list และ ใส่ใน "closed list" แทน ซึ่งจะเป็นตัวบอกว่าไม่จำเป็นต้องค้นหาในตำแหน่งนี้อีก

Path Scoring การให้คะแนนของแต่ละเส้นทาง (จะมีลักษณะคล้ายกับ Best-FS) ตามสมการ ดังนี้ F = G + H G = ค่าสะสมของการเคลื่อนที่ (the movement cost) นับจากจุดเริ่มต้น (node A) มาถึง node ปัจจุบัน H = ค่าประมาณการเคลื่อนที่ (the estimated movement cost) นับจาก node ปัจจุบัน ไปยัง node ที่เป็นเป้าหมาย (the final destination, point B) ซึ่งค่า H นี้จะเป็นค่าฮิวริสติก (Heuristic) ใช้การคาดเดา เนื่องจากไม่ทราบค่าที่แท้จริงว่าใกล้เป้าหมายเท่าใด หรือต้องอ้อมไปยังเป้าหมายเป็นระยะทางเท่าใด การเลือกเส้นทาง จะเลือก node ใน open list ที่มีค่า F ต่ำที่สุด

ตัวอย่างใช้การประมาณ ฮิวริสติกแบบ Manhattan Method H = 10*(abs(currentX-targetX) + abs(currentY-targetY)) การเคลื่อนที่ แนวเส้นตรงใช้ค่า 10 แนวเฉียงใช้ค่า 14 จากตัวอย่าง ประมาณค่า F ในแต่ละ node ได้ ตามรูปที่ 3 G H F เลือก F ที่มีค่าน้อยที่สุด = 40

4) เลือก node ที่มีค่า F น้อยที่สุด (สมมติชื่อ C) และนำออกจาก open list และใส่ใน closed list 5)  มองหา ตำแหน่ง node ใกล้เคียงกับ node C ทั้งหมด ที่สามารถเดินไปได้ ที่อยู่ติดกับ node C ที่ได้เลือกไว้ ถ้ามี node ไหนที่เดินไปได้ให้ใส่ใน open list ด้วย และให้ node C เป็น "parent node" ของตำแหน่งที่เพิ่มเข้าไปใหม่ 6) ถ้า node ที่เพิ่มเติมอยู่ใน open list อยู่แล้ว ให้ดูว่าอันไหนดีกว่า ให้เลือกใช้ node G ที่มีค่าน้อยที่สุด – จากนั้นคำนวณหาค่า F ใหม่

G H F

7) ทำซ้ำข้อ 4-6 จนกว่า target node จะอยู่ใน close list H F 7) ทำซ้ำข้อ 4-6 จนกว่า target node จะอยู่ใน close list

Path ที่ได้ คือเส้นทางที่ย้อนกลับมาจากข้อมูลของ parent node G H F Path ที่ได้ คือเส้นทางที่ย้อนกลับมาจากข้อมูลของ parent node

สรุป: 1) เพิ่ม "node เริ่มต้น" ลงใน open list -- ให้ "node เริ่มต้น" = current node 2) วนซ้ำ: 2.1) มองหา ตำแหน่ง node ใกล้เคียงที่สามารถเดินไปได้ ที่อยู่ใกล้ current node 2.2) ถ้ามี node ไหนที่เดินไปได้ให้ใส่ใน open list ด้วย และใส่ข้อมูล parent node ด้วย 2.3) คำนวณหาค่า F,G,H ของ node ที่เพิ่มมาใหม่ใน open list 2.4) เลือก node F ที่มี ค่าน้อยที่สุด ที่อยู่ใน open list 2.5) นำออกจาก open list ใส่ใน close list และ set ให้เป็น current node 3) หยุดเมื่อ: a) "node เป้าหมาย" อยู่ใน close list = หาทางเจอ b) ไม่มี node ใน open list = ไม่มีเส้นทาง 4) เก็บเส้นทางที่หาได้ โดยย้อนกลับจาก "node เป้าหมาย" ไปยัง "node เริ่มต้น"

Notes on Implementation Other Units (collision avoidance) ตำแหน่งอื่นๆ = เคลื่อนที่เข้าไปไม่ได้ หรือ เคลื่อนที่แบบหลบๆ เวลาเดินสวนกัน Variable Terrain Cost การเคลื่อนที่ในภูมิประเทศแต่ละส่วนมีค่าแตกต่างกัน – Influence mapping มีตำแหน่งที่ทำให้เพิ่ม/ลดค่า เพื่อหลอกล่อให้ AI สร้างเส้นทางตามที่ผู้ออกแบบต้องการ (แก้ปัญหา AI เดินหลงเข้าไปใน maze) Handling Unexplore Areas มีส่วนที่ยังไม่ได้สำรวจ แต่ AI ก็จะสามารถเดินได้เหมือนรู้ทางหลบได้ -- ให้คิดว่าส่วนที่ยังไม่ได้สำรวจสามารถเดินได้ทั้งหมดไว้ก่อน Smoother Paths เส้นทางที่ได้จาก A* จะไม่นุ่มนวล หรือเคลื่อนที่เป็นสี่เหลี่ยม แก้ปัญหาโดยการเพิ่มตัวแปรในสูตรให้การเคลื่อนที่ดูดีขึ้น

Notes on Implementation Non-square Search Areas ในแผนที่เกมคำนวณหาจาก ตารางสี่หลี่ยม แต่ถ้าให้สมจริง unit ควรจะเดินได้ทุกทิศทาง – อาจแก้ปัญหาโดยคำนวณตารางสี่หลี่ยมให้เล็กลง หรือเพิ่ม waypoint แบบใน vector map Some Speed tips: Smaller Map Fewer Unit Never do path finding for more than a few units at a time use larger square pre-calculating / pre-processing / caching optimize open list ( no sort, using binary heaps http://www.policyalmanac.org/games/aStarTutorial.htm)

Terrain navigation on vectormap start point target point

A* on mesh node on triangle edge = A* node add each node on trangle edge find path using node as A* start point target point

Waypoint System Waypoints must add by hand. if not see target, find and move to the nearest waypoint if see target, move to target start point target point waypoint

Pre-defined path+Waypoint System Paths + Waypoints must add by hand. if not see target, find and move to the nearest waypoint if see target, move to target start point target point waypoint

Bounce and Bound เด้งดึ๋ง = random walk เมื่อชนกับขอบ start point target point