public void Start() { InitialState.Graph.Edges.OfType <MaybeBlockedEdge>().ToList().ForEach(e => e.ActuallyBlocked = Random.NextDouble() <= e.BlockageProbability); var currentState = InitialState; while (!currentState.Goal) { Print($"Current State: {StateToString(currentState)}"); Print("Possible transitions:"); var possibleMoves = string.Join("\n", currentState.ValidMoves.Select(vm => $"\t{vm} -> \t{string.Join("\n\t\t\t", vm.NewStates.Select(StateToString))}")); Print(possibleMoves); var move = currentState.BestMove; Print($"Selected Action: {move} U{move.ExpectedValue()}\n"); currentState = move.NewStates.First(s => InitialState.Match(s)); } FinalState = currentState; Print($"Final State: {StateToString(FinalState)}\n"); Print("Simulation is over."); }