package aima.core.probability.mdp.impl;
import java.util.Set;
import aima.core.agent.Action;
import aima.core.probability.mdp.ActionsFunction;
import aima.core.probability.mdp.MarkovDecisionProcess;
import aima.core.probability.mdp.RewardFunction;
import aima.core.probability.mdp.TransitionProbabilityFunction;
/**
* Default implementation of the MarkovDecisionProcess<S, A> interface.
*
* @param <S>
* the state type.
* @param <A>
* the action type.
*
* @author Ciaran O'Reilly
* @author Ravi Mohan
*/
public class MDP<S, A extends Action> implements MarkovDecisionProcess<S, A> {
private Set<S> states = null;
private S initialState = null;
private ActionsFunction<S, A> actionsFunction = null;
private TransitionProbabilityFunction<S, A> transitionProbabilityFunction = null;
private RewardFunction<S> rewardFunction = null;
public MDP(Set<S> states, S initialState,
ActionsFunction<S, A> actionsFunction,
TransitionProbabilityFunction<S, A> transitionProbabilityFunction,
RewardFunction<S> rewardFunction) {
this.states = states;
this.initialState = initialState;
this.actionsFunction = actionsFunction;
this.transitionProbabilityFunction = transitionProbabilityFunction;
this.rewardFunction = rewardFunction;
}
//
// START-MarkovDecisionProcess
@Override
public Set<S> states() {
return states;
}
@Override
public S getInitialState() {
return initialState;
}
@Override
public Set<A> actions(S s) {
return actionsFunction.actions(s);
}
@Override
public double transitionProbability(S sDelta, S s, A a) {
return transitionProbabilityFunction.probability(sDelta, s, a);
}
@Override
public double reward(S s) {
return rewardFunction.reward(s);
}
// END-MarkovDecisionProcess
//
}