@Override
  public List<QValue> getQs(State s) {

    StateHashTuple sh = this.stateHash(s);
    Map<String, String> matching = null;
    StateHashTuple indexSH = mapToStateIndex.get(sh);

    if (indexSH == null) {
      // then this is an unexplored state
      indexSH = sh;
      mapToStateIndex.put(indexSH, indexSH);
    }

    if (this.containsParameterizedActions && !this.domain.isNameDependent()) {
      matching = sh.s.getObjectMatchingTo(indexSH.s, false);
    }

    List<QValue> res = new ArrayList<QValue>();
    for (Action a : actions) {
      List<GroundedAction> applications = s.getAllGroundedActionsFor(a);
      for (GroundedAction ga : applications) {
        res.add(this.getQ(sh, ga, matching));
      }
    }

    return res;
  }