Upload
verity-curtis
View
223
Download
8
Embed Size (px)
Citation preview
Artificial Intelligence in Game Design
Behavior Trees
Reactive Planning
• Plan: Set of steps to accomplish some goal– Move to door Open door Enter room– Can easily be done with state machine
• Reactive planning: Altering plan if steps not currently possible– What if player locks door?– What if player barricades door?
• Key idea in real-world AI
Reactive Planning
• Decision-making process like tree• Possible courses of action may require many steps
– Decision trees just defined for single step
Door opens Enter room
Door doesn’t opens
Try breaking down door
Get key
Try unlocking door
Door opens Enter room
Door doesn’t opens
Behavior Trees
• Designed for appearance of reactive planning– Plans, contingencies actually scripted
• Combine features of several representations– Decision trees (unambiguous)– Finite State Machines (hierarchical)
• Often used to design games (Halo 2, etc.)– Easy to translate into code– Easy for non-programmers to design, understand
Tasks
• Leaves of tree = tasks performed by NPC
• Conditions: Is something currently true or not?– Internal to character or external in world– Ideally, can be quickly checked against game state
Door open?
Hit points < 5?
Tasks
• Actions: Outputs/instructions to game engine– Internal to character state – External, often in form of firing animation– Can fire other actions
(hear player start path planning routine)
Open door Move(room) hit points --
Composites
• Define how tasks combined
• Sequence node: Execute tasks in given order– Often involve tests at beginning to insure sequence
can be completed– Sequence halts and fails if any tasks fail
Door open? Move(room) Close door
Composites
• Selector node: Try tasks in order until one succeeds– Multiple tasks with same goal– Like if / else if/else if …/ else– Best if last task always succeeds (like else)
Open doorBreak down
doorBang on
door
?
Decision Tree Structure
• Example: Entering a room– Problem: Player may have closed the door to prevent
guard from entering
?
Door open?
Move(room)
Move(door)
Open door
Move(room)
Hierarchical Structure
• Can nest to any level– Usually alternate levels of selection, sequence
?
Door open?
Move(room)
Move(door)
Open door
Move(room)
?
Break down door
Door open?
Translation into Code
• Each task/node is subroutine that returns boolean• Sequence node:for each task T { success = execute T if (!success) return false }return true
• Selector node:for each task T { success = execute T if (success) return true }return false
Decorators
• Used to modify structure of nodes below in tree• Common case: looping
– For limited number of times– Until fail …
Open doorBreak down
door
Bang on door
?
Limit = 3
Nondeterminism
• Characters should not always take actions in same order (appears scripted)
• Door locked
• Set fire to door: Get matches, get gasoline
Barge door
Set fire to door
Don’t always try the same one first!
Don’t always do in this order!
Partial-Order Planning
• Understand what steps must happen in a certain order• Other steps can be done in any order
– Choose order randomly in those cases
Try opening door
Try unlocking door
Barge door
Set fire to door
Try in either order
Get matches
Get gasoline Pour gasoline on doorIgnite gasoline
Do in any order
Nondeterministic Behavior Tree
?
~?
Door open?
Move(room)
Barge door
Get matches
Douse door
Ignite door
~>
Get gasoline
Nondeterministic selector node
Nondeterministic sequence node
Parallelism
• Controls behavior for multiple characters working towards common goal– Each character has behavior subtree that runs in
parallel (usually implemented as concurrent threads)– All characters exit tree when goal succeeds/fails
Charcter 1’s task
Charcter 2’s task
Charcter 3’s task
Parallelism
• “Sequence” parallelism: Exit (and fail) if any thread fails
• “Selection” parallelism: Exit (and succeed) if any thread succeeds
Quaterback avoids rushers
Reciever gets open
Rifleman shoots at boss opponent
Grenadier throws grenade at boss
opponent
? ?
?