Пример #1
0
        public void SolveErratic2X2VacuumWorldWithDfs()
        {
            var initialState = new VacuumWorldState(2);

            initialState.MakeSquareDirty(1, 1);

            var problem  = new ErraticVacuumWorldSearchProblem();
            var solver   = new NonDeterministicDfsSearch <VacuumWorldState, VacuumWorldAction>(problem, initialState);
            var solution = solver.GetSolution();

            var       actionCounter = 0;
            const int actionLimit   = 1000;
            var       erraticWorld  = VacuumWorld.CreateErraticVacuumWorld(initialState);

            while (!problem.IsGoal(erraticWorld.State))
            {
                var action = solution.NextAction(erraticWorld.State);

                erraticWorld.DoAction(action);

                if (++actionCounter > actionLimit)
                {
                    Assert.Fail($"failed to reach goal after {actionCounter} actions");
                }
            }
        }
Пример #2
0
        public void DoAction_ShouldCallActionHandler()
        {
            var actionHandler = A.Fake <IVacuumWorldActionHandler>();
            var vacuumWorld   = new VacuumWorld(new VacuumWorldState(3), actionHandler);
            const VacuumWorldAction action = VacuumWorldAction.Up;

            vacuumWorld.DoAction(action);

            A.CallTo(() => actionHandler.DoAction(A <VacuumWorldState> ._, action)).MustHaveHappened();
        }
Пример #3
0
        private static void InteractivelyDisplaySolution(
            VacuumWorldState initialState,
            IEnumerable <VacuumWorldAction> solution)
        {
            var renderer = new Renderer();
            var machine  = new VacuumWorld(initialState,
                                           VacuumWorldActionHandler.CreateDeterministicActionHandler());

            foreach (var action in solution)
            {
                renderer.Render(machine.State);
                var key = Console.ReadKey();
                if (key.Key == ConsoleKey.Escape)
                {
                    break;
                }
                machine.DoAction(action);
            }

            renderer.Render(machine.State);
        }