package mdpsSolution;
import java.util.Arrays;
import mdps.MDP;
import mdps.QValueFunction;
public class TableLookupValueFunction implements QValueFunction {
double[]values;
MDP mdp;
private double gamma;
TableLookupValueFunction(MDP mdp, double initialValue, double gamma) {
values = new double[mdp.numStates()];
Arrays.fill(values, initialValue);
this.mdp = mdp;
this.gamma = gamma;
}
public void updateValue(int state, double value) {
values[state] = value;
}
public double getValue(int state) {
return values[state];
}
public double getValue(int state, int action) {
double value = mdp.getReward(state, action);
double[] nextStateDistr = mdp.nextStateDistribution(state, action);
for (int i = 0; i < mdp.numStates(); i++) {
value += gamma * values[i] * nextStateDistr[i];
}
return value;
}
public String toString() {
String str = "";
for (int i = 0; i < values.length; i++) {
str += Arrays.toString(values);
}
return str;
}
}