/// <summary> /// Runs the navigator through its corresponding maze and records data about said evaluation (e.g. solved status, time /// steps, and trajectory). /// </summary> /// <param name="evaluationUnit">A single unit of evaluation containing a paired maze and navigator.</param> /// <param name="experimentParameters">Parameters that control the navigation simulation.</param> public static void EvaluateMazeNavigatorUnit(MazeNavigatorEvaluationUnit evaluationUnit, ExperimentParameters experimentParameters) { bool isGoalReached; // Build maze configuration MazeConfiguration mazeConfiguration = new MazeConfiguration(ExtractMazeWalls(evaluationUnit.MazePhenome.Walls), ExtractStartEndPoint(evaluationUnit.MazePhenome.StartLocation), ExtractStartEndPoint(evaluationUnit.MazePhenome.TargetLocation)); // Create trajectory behavior characterization (in order to capture full trajectory of navigator) IBehaviorCharacterization behaviorCharacterization = new TrajectoryBehaviorCharacterization(); // Create the maze navigation world MazeNavigationWorld<BehaviorInfo> world = new MazeNavigationWorld<BehaviorInfo>(mazeConfiguration.Walls, mazeConfiguration.NavigatorLocation, mazeConfiguration.GoalLocation, experimentParameters.MinSuccessDistance, experimentParameters.MaxTimesteps, behaviorCharacterization); // Run a single trial BehaviorInfo trialInfo = world.RunTrial(evaluationUnit.AgentPhenome, SearchType.MinimalCriteriaSearch, out isGoalReached); // Set maze solved status evaluationUnit.IsMazeSolved = isGoalReached; // The number of time steps is effectively the number of 2-dimensional points in the behaviors array evaluationUnit.NumTimesteps = trialInfo.Behaviors.Count()/2; // Set the trajectory of the agent evaluationUnit.AgentTrajectory = trialInfo.Behaviors; }