Download Artificial Intelligence in Game Design

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

Minimax wikipedia , lookup

Artificial intelligence in video games wikipedia , lookup

Transcript
Artificial Intelligence in
Game Design
Intelligent Decision Making and
Decision Trees
Decision Making
• Based on internal and external information
“I am hungry”
“There is food nearby”
• Defines a current action (“eat food”)
• Changes world and internal state
“Food nearby is gone”
“I am not hungry”
“Intelligent Agent” Approach
• Reflex agent
No memory, just “if-then” rules
input
• Memory-based agent
Also based on current state
input
• Goal-based agent
action
rules
rules
action
memory
Chooses actions that best help meet
current goal
• Utility-based agent
Balances multiple weighted goals,
choosing actions that give best
overall state
Goal-based
planning
Sims
Reflex Agents
• Example: “orc” reflex agent
if hitPoints < 5
then run away from player
if distance to player < 2 units
then attack player
if player visible
then run towards player
else
move in random direction
Internal state
External state
Scripted Actions
• Visible actions usually limited to set
of animations created in advance
• Often sequence of actions (“scripting”)
Self destruct
sequence
Game
AI
Poll again
when script
finished
Game
Engine
Reflex Agents
• Must consider cost of gathering inputs
if hitPoints < 5
then run away from player
This requires complex
if distance to player < 2 units
computations
then attack player
if player visible
if player in same room or distance to player < 5 units
then run towards player
else
move in random direction
Hierarchical Rules
• Actions often hierarchical
if hitPoints < 5
then moveTowards(player)
if distance to player < 2 units
then attack(player)
if player visible
then moveTowards(player)
else
moveTowards(random)
These will call complex
navigation subroutines
to implement the action
Hierarchical Rules
• Lowest level = actions supported by game engine
void moveTowards(object)
if not facing object
then turn towards object
else if facing obstacle at distance < 2 units
then turn right or left at random
move forward
else move forward
Designing Hierarchies
• Strategy Level
– What goal does character attempt to meet?
• Build, attack, negotiate
• Tactical Level
– How does character meet current goal?
• Which city to attack
• Which resources to use
• Motion Level
– What action does character take this turn?
• Move forward, left, right…
Designing Hierarchies
• Task based
– Major tasks NPC performs
• Guard
• Patrol
• Defend
– Steps in tasks
• Wait
• Chase
• …
High level character design team
(works with game designers)
– …
– Motion
• Turn
• Move
• …
Character motion team
(works with animation team)
Level of Detail in Graphics
• Only render graphics at detail necessary for
what player can see
– Close up = full detail
– Far away = little detail
• Minimize load on graphics engine
Level of Detail in AI
• Only use full AI when necessary
– Fast approximations in other situations
– Often when NPCs “off screen”
Use full passing AI
for cars visible to
player
Simple rule for cars not visible to player
“Faster car has 75% chance of
successful pass”
Swarm Intelligence
• Simple NPCs in groups can appear to cooperate
• Decision example:
if no other player shooting, I shoot
if in open, run for cover and shout
if in cover, reload and wait
• Orc motion example:
…
if NPC blocking path to player
then run sideways
else run towards player
…
NPCs appear to be covering one
another and coordinating attack!
Randomness in Games
• Randomness adds to playability
– Characters less predictable, more “realistic”
– Greater replayability
– Rare occurrences can surprise player
• Example: choice of weapon in Fight state
60%
35%
5%
Randomness in Games
• Goal: Randomness should not appear random
• Best solution: Randomness used to “tweak”
existing rules
if hitPoints < 5
then run away from player
else if hitPoints < 10
and random# < 0.5
then run away from player
else attack player
Logical behavior in extremes
Unpredictable behavior in
borderline situations
Potential Problems with Randomness
• Possibly many parameters to tweak
– How do we know these are the best probabilities to use?
Confident
Angry
Frightened
Attack Left
40%
60%
30%
Attack Right
40%
35%
20%
Defend
20%
5%
50%
• Difficult to thoroughly test
– Combinations of probabilities may create a bad case (i.e.
easy win) which is possible but very unlikely
– That case will be found by some player
Prioritization
Problem:
• Multiple rules may fire with contradictory actions
– Problem if rules added by multiple developers
(side effects)
if hitPoints < 5
then run away from player
if distance to player < 2 units
then attack player
What if next to player
and have low hit
points?
Decision Trees
• Simple tree traversal
– Node = question
– Branch to follow
= answer
– Leaf = final action
to take
Hit points < 5?
no
yes
Obstacle between
myself and player?
yes
hide
no
run
Within one unit
of player?
yes
no
Path to
player
clear?
attack
yes
run towards
player
no
run
sideways
Decision Trees
• Not necessarily binary
• Can merge branches
Hit points
HP < 5
5 ≤ HP < 10
run away
HP ≥ 10
Weapon type
light
heavy
Within one unit
of player?
hold
position
yes
attack
no
run
towards
player
Designing Decision Trees
• Identify possible actions (leafs)
• Identify internal/external knowledge for choosing action
• Order questions in tree:
– Crucial factors (health, etc.)
– Ease of gathering knowledge (fastest first)
Player visible?
HP < 5?
yes
no
yes
hide
attack
no
patrol
patrol
HP < 5?
Player visible?
yes
no
yes
hide
no
attack
Randomness in Decision Trees
• Make decisions at some nodes based on
random number
Math.random() < 0.5
yes
defend
no
Math.random() < 0.2
yes
Swing sword
from left
no
Swing sword
from right
Randomness in Decision Trees
• Problem:
Randomness in high level decisions
Math.random() < 0.4
yes
Stand still
no
Patrol
• Stands still or patrol for a few frames at a time
• Better if it decided to do one and keep doing it for a while
Timeouts in Decision Trees
• Execute decisions for specific time
Math.random() < 0.4
yes
Stand still
For 10 min
no
Patrol
For 30 min
• Problem: must have some way to interrupt actions if
world changes