// Executes the given action public void executeAction(Action a) { // For each state variable, retrieve the DD for it, evaluate it // w.r.t. the current state and build a new state. ArrayList new_state = new ArrayList(); int c; for (c = 0; c < (_nVars << 1); c++) { new_state.add("-"); } for (c = 0; c < (_nVars << 1); c++) { Object cur_assign = _state.get(c); if (cur_assign instanceof Boolean) { // System.out.println(a._tmID2DD); int nonprime_id = c + 1; int prime_id = nonprime_id - _nVars; Object DD = a._tmID2DD.get(new Integer(prime_id)); _state.set(prime_id - 1, TRUE); double p_true = _mdp._context.evaluate(DD, _state); // System.out.println("ID: " + nonprime_id + ", " + prime_id + ": " + // _mdp._context.printNode(DD) + " -> " + // _mdp._df.format(p_true)); new_state.set(c, (_r.nextFloat() < p_true) ? TRUE : FALSE); } } _state = new_state; }
public double evalBasisState(ArrayList state, double wb1, double wb2) { int sum_basis_1 = 0; int sum_basis_2 = 0; // TODO: Code to get connection links... use current state to get status // System.out.print(", Eval: " + state); Action a = (Action) _mdp._hmName2Action.get("noreboot"); for (int c = 0; c < (_nVars << 1); c++) { Object cur_assign = state.get(c); if (cur_assign instanceof Boolean && ((Boolean) cur_assign).booleanValue()) { sum_basis_1++; // System.out.println(a._tmID2DD); int nonprime_id = c + 1; int prime_id = nonprime_id - _nVars; Object DD = a._tmID2DD.get(new Integer(prime_id)); Set IDs = _mdp._context.getGIDs(DD); // System.out.print(IDs + ": "); Iterator it = IDs.iterator(); // System.out.print("[" + prime_id + " - "); while (it.hasNext()) { int c_id = ((Integer) it.next()).intValue() - 1; // nonprime array index if (c_id < _nVars || c_id == c) { // Skip prime/np this var continue; } // System.out.print(c_id + " "); Object c_id_assign = state.get(c_id); if (c_id_assign instanceof Boolean && ((Boolean) c_id_assign).booleanValue()) { sum_basis_2++; break; } } // System.out.println("]"); } } double val = wb1 * sum_basis_1 + wb2 * sum_basis_2; // System.out.println(state + ", b1: " + sum_basis_1 + // ", b2: " + sum_basis_2 + ", total: " + // _mdp._df.format(val)); return val; }