public MarkovState getResult(StochasticAction action) { double value = rand.NextDouble(); double current = 0.0; ActionResult result = null; int i = 0; List <ActionResult> results = action.getPossibleResults(); while (i < results.Count() && current < value) { result = results[i]; current += result.probability; i++; } return(result.state); }
internal void addAction(StochasticAction action) { actions.Add(action); }
private StochasticAction createAction(Direction direction, int x, int y) { StochasticAction action = null; ActionResult up = new ActionResult(get(x, y - 1)); ActionResult down = new ActionResult(get(x, y + 1)); ActionResult left = new ActionResult(get(x - 1, y)); ActionResult right = new ActionResult(get(x + 1, y)); switch (direction) { case Direction.down: action = new GridAction("v"); // go down down.probability = .8; action.addPossible(down); // go left left.probability = .1; action.addPossible(left); // go right right.probability = .1; action.addPossible(right); break; case Direction.left: action = new GridAction("<"); // go left left.probability = .8; action.addPossible(left); // go up up.probability = .1; action.addPossible(up); // go down down.probability = .1; action.addPossible(down); break; case Direction.right: action = new GridAction(">"); // go right right.probability = .8; action.addPossible(right); // go up up.probability = .1; action.addPossible(up); // go down down.probability = .1; action.addPossible(down); break; case Direction.up: action = new GridAction("^"); // go down up.probability = .8; action.addPossible(up); // go left left.probability = .1; action.addPossible(left); // go right right.probability = .1; action.addPossible(right); break; default: break; } return(action); }