Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
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