public String getStateDescription(State s) throws EvalException { StringBuilder sb = new StringBuilder(); TYPE_NAME xpos_type = new TYPE_NAME("xpos"); ArrayList<LCONST> list_xpos = s._hmObject2Consts.get(xpos_type); TYPE_NAME ypos_type = new TYPE_NAME("ypos"); ArrayList<LCONST> list_ypos = s._hmObject2Consts.get(ypos_type); PVAR_NAME GOAL = new PVAR_NAME("GOAL"); PVAR_NAME robot_at = new PVAR_NAME("robot-at"); PVAR_NAME P = new PVAR_NAME("P"); if (_bd == null) { IS_OBFUSCATED = !list_xpos.get(0).toString().equals("x1"); int max_row = list_ypos.size() - 1; int max_col = list_xpos.size(); _bd = new BlockDisplay( "RDDL Navigation Simulation", "RDDL Navigation Simulation", max_row + 2, max_col + 2); } // Set up an arity-1 parameter list ArrayList<LCONST> params = new ArrayList<LCONST>(2); params.add(null); params.add(null); _bd.clearAllCells(); _bd.clearAllLines(); for (LCONST xpos : list_xpos) { for (LCONST ypos : list_ypos) { int col = new Integer(xpos.toString().substring(2, xpos.toString().length())); int row = new Integer(ypos.toString().substring(2, ypos.toString().length())); if (IS_OBFUSCATED) { row = (int) Math.sqrt(row - 11); col = (int) Math.sqrt(col - 5); } row = row - 1; params.set(0, xpos); params.set(1, ypos); boolean is_goal = (Boolean) s.getPVariableAssign(GOAL, params); boolean robot = (Boolean) s.getPVariableAssign(robot_at, params); float prob = 1f - ((Number) s.getPVariableAssign(P, params)).floatValue(); if (robot && is_goal) _bd.setCell(row, col, Color.red, "G!"); else if (is_goal) _bd.setCell(row, col, Color.cyan, "G"); else if (robot) _bd.setCell(row, col, Color.blue, null); else { Color cell_color = new Color(prob, prob, prob); _bd.setCell(row, col, cell_color, null); } } } _bd.repaint(); // Sleep so the animation can be viewed at a frame rate of 1000/_nTimeDelay per second try { Thread.currentThread().sleep(_nTimeDelay); } catch (InterruptedException e) { System.err.println(e); e.printStackTrace(System.err); } return sb.toString(); }
public void close() { _bd.close(); }