-
Notifications
You must be signed in to change notification settings - Fork 0
BehaviorTrees
ในส่วนนี้ เราจะมาอธิบาย BTs ให้เข้าใจง่ายๆ เริ่มจากให้มอง BT เป็น directed tree ที่มี nodes และ edges ให้ทฤษฏีกราฟคล้ายๆกับในรูปด้านล่างนี้
โดยปกติแล้วจะใช้คำว่า parent และ children แทนความสัมพันธ์ระหว่างกัน node ไหนที่ไม่มี parrent จะเรียกว่า root node และ node ไหนไม่มี children จะเรียกว่า leaf node ต่อไปแต่ละ node ใน BT นั้นจะมีชนิดที่แตกต่างกัน ซึ่งจะเป็น 1 ใน 6 ชนิดนี้ แบ่งเป็นควบคุมการทำงาน(Control flow nodes) 4 ชนิด [Fallback, Sequence, Parallel, Decorator] และที่เหลืออีก 2 ชนิดเป็นสำหรับสั่งงาน(Execution node) [Action, Condition] โดยตัว Execution node นั้นจะเป็น leaf node ของ BT
เมื่อเริ่มทำงาน BT จะเริ่มจาก root node ของ BT และจะทำงานตามชนิดของแต่ละ control node ไล่ไปเรื่อยๆ เมื่อไปถึง leaf node [Action, Condition] node นั้นจะทำการคำนวณตามโปรแกรมที่ได้เขียนเอาไว้ เมื่อเสร็จแล้วจะรีเทิร์นสถานะ [Success, Failure, Running] เมื่อรีเทิร์นสถานะกลับมาแล้วก็จะย้อนกลับไปยัง control node และทำตาม control node ต่อไปเรื่อยๆ จนย้อนกลับไปจนถึง root node
Fallback node เป็นโหนดที่ใช้เพื่อเลือกทำงานตามลำดับความสำคัญ(ซ้ายไปขวา) หากมีกิจกรรมที่ทำสำเร็จแล้วจะถือว่าโหนดนี้สำเร็จ และกิจกรรมอื่นที่หลืออยู่ก็จะไม่ถูกทำ แต่หากไม่มีกิจกรรมใดสำเร็จเลย จะถือว่าโหนดนี้ไม่สำเร็จ
- Success เมื่อโหนดลูกมีการรีเทิร์นสถานะ Success
- Failure เมื่อโหนดลูกตัวสุดท้ายมีการรีเทิร์นสถานะเป็น Failure
- Running เมื่อเป็นอย่างอื่น
เขียนแสดงด้วยกล่องที่มีเครื่องหมายคำถามข้างใน
Sequence node เป็นโหนดที่ใช้เพื่อทำงานตามลำดับ(ซ้ายไปขวา) จนกิจกรรมเสร็จสิ้นทั้งหมดจึงจะสำเร็จ หากมีกิจกรรมใดทำไม่สำเร็จ จะถือว่าโหนดนี้ไม่สำเร็จ
- Success เมื่อโหนดลูกตัวสุดท้ายรีเทิร์นสถานะเป็น Success
- Failure เมื่อโหนดลูกรีเทิร์นสถานะเป็น Failure
- Running เมื่อเป็นอย่างอื่น
เขียนแสดงด้วยกล่องที่มีเครื่องหมายลูกศรข้างใน
Parallel node เขียนแสดงด้วยกล่องที่มีเครื่องหมายลูกศร 2 ตัวข้างใน
Decorator node เป็นโหนดที่ผู้ใช้กำหนดเองว่าอยากจะเปลี่ยนสถานะที่รีเทิร์นจากลูกเป็นอย่างไร ตัวอย่างเช่น
- Decorator Retry ซึ่งจะทดลองทำงาน execution node อีกครั้งเมื่อมีการรีเทิร์นสถานะเป็น Failure
- Decorator Nagative เป็นการสลับกันระหว่าง Success/Failure
Action node เป็นโหนดทำงานกิจกรรมบางอย่าง และจะรีเทิร์นสถานะ
- Success เมื่อทำงานเสร็จสิ้น
- Failure เมื่อไม่สามารถทำงานให้เสร็จได้
- Running เมื่อกำลังทำงานอยู่
Condition node เป็นโหนดใช้สำหรับตรวจสอบเงื่อนไขที่กำหนด ทางเทคนิคแล้วก็เป็นเหมือน Action แต่แยกออกมาเพื่อช่วยให้อ่านง่าย และเพื่อแสดงว่าโหนดชนิดนี้จะรีเทิร์นสถานะเพียงแค่ Success, Failure เท่านั้น ไม่มี Running
จากรูปมีโหนด 1 Fallback, 1 Sequence, 1 Condition(สีเหลือง), 2 Action(สีเขียว)
- Action A1 จะทำก็ต่อเมื่อ Condition C1 รีเทิร์นสถานะเป็น Success
- Action A2 จะทำก็ต่อเมื่อ Condition C1 หรือ Action A1 รีเทิร์นสถานะเป็น Failure