All Downloads are FREE. Search and download functionalities are using the official Maven repository.

aima.core.agent.impl.aprog.ModelBasedReflexAgentProgram Maven / Gradle / Ivy

Go to download

AIMA-Java Core Algorithms from the book Artificial Intelligence a Modern Approach 3rd Ed.

The newest version!
package aima.core.agent.impl.aprog;

import java.util.Set;

import aima.core.agent.Action;
import aima.core.agent.AgentProgram;
import aima.core.agent.Model;
import aima.core.agent.Percept;
import aima.core.agent.impl.DynamicState;
import aima.core.agent.impl.NoOpAction;
import aima.core.agent.impl.aprog.simplerule.Rule;

/**
 * Artificial Intelligence A Modern Approach (3rd Edition): Figure 2.12, page
 * 51.
*
* *
 * function MODEL-BASED-REFLEX-AGENT(percept) returns an action
 *   persistent: state, the agent's current conception of the world state
 *               model, a description of how the next state depends on current state and action
 *               rules, a set of condition-action rules
 *               action, the most recent action, initially none
 *               
 *   state  <- UPDATE-STATE(state, action, percept, model)
 *   rule   <- RULE-MATCH(state, rules)
 *   action <- rule.ACTION
 *   return action
 * 
* * Figure 2.12 A model-based reflex agent. It keeps track of the current state * of the world using an internal model. It then chooses an action in the same * way as the reflex agent. * * @author Ciaran O'Reilly * @author Mike Stampone * */ public abstract class ModelBasedReflexAgentProgram implements AgentProgram { // // persistent: state, the agent's current conception of the world state private DynamicState state = null; // model, a description of how the next state depends on current state and // action private Model model = null; // rules, a set of condition-action rules private Set rules = null; // action, the most recent action, initially none private Action action = null; public ModelBasedReflexAgentProgram() { init(); } /** * Set the agent's current conception of the world state. * * @param state * the agent's current conception of the world state. */ public void setState(DynamicState state) { this.state = state; } /** * Set the program's description of how the next state depends on the state * and action. * * @param model * a description of how the next state depends on the current * state and action. */ public void setModel(Model model) { this.model = model; } /** * Set the program's condition-action rules * * @param ruleSet * a set of condition-action rules */ public void setRules(Set ruleSet) { rules = ruleSet; } // // START-AgentProgram // function MODEL-BASED-REFLEX-AGENT(percept) returns an action public Action execute(Percept percept) { // state <- UPDATE-STATE(state, action, percept, model) state = updateState(state, action, percept, model); // rule <- RULE-MATCH(state, rules) Rule rule = ruleMatch(state, rules); // action <- rule.ACTION action = ruleAction(rule); // return action return action; } // END-AgentProgram // // // PROTECTED METHODS // /** * Realizations of this class should implement the init() method so that it * calls the setState(), setModel(), and setRules() method. */ protected abstract void init(); protected abstract DynamicState updateState(DynamicState state, Action action, Percept percept, Model model); protected Rule ruleMatch(DynamicState state, Set rules) { for (Rule r : rules) { if (r.evaluate(state)) { return r; } } return null; } protected Action ruleAction(Rule r) { return null == r ? NoOpAction.NO_OP : r.getAction(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy