// Implement to manage challenge levels and training set hints public virtual void IncreaseLevel() { CurrentLevel++; if (CurrentLevel >= NumberOfLevels) { // this case happens when the task is finished if (CurrentLevel > NumberOfLevels) { // this case should not happen Debug.Assert(false); } CurrentLevel = NumberOfLevels; return; } // We assume that levels are traversed sequentially. // Random access of levels would require a change of // implementation. CurrentNumberOfAttempts = 0; CurrentNumberOfSuccesses = 0; TSHints.Set(TSProgression[CurrentLevel]); SetHints(TSHints); MyLog.Writer.WriteLine(MyLogLevel.INFO, "Next level settings: \n" + TSHints); }
public LTMovingTarget(SchoolWorld w) : base(w) { TSHints[TSHintAttributes.DEGREES_OF_FREEDOM] = 2; // Set degrees of freedom to 2: move in 4 directions (1 means move only right-left) //TSHints[TSHintAttributes.MAX_TARGET_DISTANCE] = 0.3f; TSHints[DISTANCE_BONUS_COEFFICENT] = 15f; // Coefficent of 4 means that the available steps to reach the target are "initialDistance (between agent and target) * 4" (for more info check LTApproach) //Reusing TSHints from LTApproach with some additions TSHints.Add(MOVING_VELOCITY, 1); TSHints.Add(ELLIPSE_SIZE, 0.55f); TSHints.Add(STEPS_TAKEN_FOR_ONE_CIRCLE, 600); TSHints.Add(AVOIDING_AGENT, 0); TSProgression.Clear(); // Clearing TSProgression that was declared in LTApproach before filling custom one TSProgression.Add(TSHints.Clone()); TSProgression.Add( new TrainingSetHints { { ELLIPSE_SIZE, 0.55f }, { STEPS_TAKEN_FOR_ONE_CIRCLE, 500 } }); TSProgression.Add( new TrainingSetHints { { ELLIPSE_SIZE, 0.6f }, { STEPS_TAKEN_FOR_ONE_CIRCLE, 400 } }); TSProgression.Add( new TrainingSetHints { { ELLIPSE_SIZE, 0.7f }, { STEPS_TAKEN_FOR_ONE_CIRCLE, 300 } }); TSProgression.Add( new TrainingSetHints { { ELLIPSE_SIZE, 0.7f }, { STEPS_TAKEN_FOR_ONE_CIRCLE, 200 } }); TSProgression.Add( new TrainingSetHints { { ELLIPSE_SIZE, 0.8f }, { STEPS_TAKEN_FOR_ONE_CIRCLE, 100 } }); TSProgression.Add( new TrainingSetHints { { MOVING_VELOCITY, 2 }, { ELLIPSE_SIZE, 0.65f }, { STEPS_TAKEN_FOR_ONE_CIRCLE, 1000 }, { AVOIDING_AGENT, 1 }, { DISTANCE_BONUS_COEFFICENT, 7f }, { TSHintAttributes.IMAGE_TEXTURE_BACKGROUND, 1f } }); }
public LTShapeGroups(SchoolWorld w) : base(w) { // TODO Add TSHints TSProgression.Add(TSHints.Clone()); // TODO progression SetHints(TSHints); }
public virtual TrainingResult EvaluateStep() { // Check for unit completion bool wasUnitSuccessful = true; bool inProgress = (SchoolWorld.IsEmulatingUnitCompletion() && !SchoolWorld.EmulateIsTrainingUnitCompleted(out wasUnitSuccessful)) || (!SchoolWorld.IsEmulatingUnitCompletion() && !DidTrainingUnitComplete(ref wasUnitSuccessful)); if (inProgress) { // The unit is still in progress return(TrainingResult.TUInProgress); } // otherwise the unit is over CurrentNumberOfAttempts++; // Check for task failure if (TSHints.ContainsKey(TSHintAttributes.MAX_NUMBER_OF_ATTEMPTS) && CurrentNumberOfAttempts >= TSHints[TSHintAttributes.MAX_NUMBER_OF_ATTEMPTS]) { // Too many attempts Reward = -1.0f; return(TrainingResult.FailedLT); } if (wasUnitSuccessful) { Reward = 1.0f; CurrentNumberOfSuccesses++; } else { Reward = -1.0f; CurrentNumberOfSuccesses = 0; } MyLog.Writer.WriteLine( MyLogLevel.INFO, GetTypeName() + " unit ends with result: " + (wasUnitSuccessful ? "success" : "fail") + ". " + CurrentNumberOfSuccesses + " successful attempts in row, " + NumberOfSuccessesRequired + " required."); // Check for level completion if (CurrentNumberOfSuccesses < NumberOfSuccessesRequired) { // The level is still in progress return(TrainingResult.FinishedTU); } return(TrainingResult.FinishedLevel); }
public virtual void Init() { CurrentNumberOfAttempts = 0; CurrentNumberOfSuccesses = 0; CurrentLevel = 0; TSHints.Set(TSProgression[CurrentLevel]); SetHints(TSHints); IsInitialized = true; }
public LTMultipleTargetsSequence(SchoolWorld w) : base(w) { TSHints[TSHintAttributes.DEGREES_OF_FREEDOM] = 2; // Set degrees of freedom to 2: move in 4 directions (1 means move only right-left) TSHints[TSHintAttributes.NUMBER_OF_DIFFERENT_OBJECTS] = 1; TSHints[TSHintAttributes.MAX_NUMBER_OF_ATTEMPTS] = 10000; TSHints.Add(SEQUENCE_LENGTH, 1); TSHints.Add(TIMESTEPS_LIMIT, 500); // Training unit fails if the TIMESTEP_LIMIT is reached, this is used to avoid that the agent stands without moving TSHints.Add(DISTANCE_BONUS_COEFFICENT, 3.0f); // Manhattan distance is calculated to estimate how many steps are needed to finish the sequence, DISTANCE_BONUS_COEFFICENT can be used to increase that number, if for example it's 2.0f then TIMESTEPS_LIMIT is (2 * EstimatedManahattanDistance) TSHints.Add(TSHintAttributes.IMAGE_TEXTURE_BACKGROUND, 1f); TSProgression.Add(TSHints.Clone()); TSProgression.Add( new TrainingSetHints { { SEQUENCE_LENGTH, 2 }, { DISTANCE_BONUS_COEFFICENT, 3f } }); TSProgression.Add( new TrainingSetHints { { SEQUENCE_LENGTH, 3 }, { DISTANCE_BONUS_COEFFICENT, 3f } }); TSProgression.Add( new TrainingSetHints { { SEQUENCE_LENGTH, 4 }, { DISTANCE_BONUS_COEFFICENT, 2.5f } }); TSProgression.Add( new TrainingSetHints { { SEQUENCE_LENGTH, 5 }, { DISTANCE_BONUS_COEFFICENT, 2.0f } }); TSProgression.Add( new TrainingSetHints { { DISTANCE_BONUS_COEFFICENT, 1.5f } }); TSProgression.Add( new TrainingSetHints { { DISTANCE_BONUS_COEFFICENT, 1.0f }, }); }
public LTObstaclesTargetInSight(SchoolWorld w) : base(w) { TSHints.Clear(); TSProgression.Clear(); TSHints.Add(TIMESTEPS_LIMIT, 200); TSHints.Add(TSHintAttributes.MAX_NUMBER_OF_ATTEMPTS, 10000); TSHints.Add(TSHintAttributes.IMAGE_NOISE, 0); TSHints.Add(TSHintAttributes.IMAGE_TEXTURE_BACKGROUND, 0); TSProgression.Add(TSHints.Clone()); TSProgression.Add(TIMESTEPS_LIMIT, 100); TSProgression.Add(TSHintAttributes.IMAGE_NOISE, 1); TSProgression.Add(TIMESTEPS_LIMIT, 50); TSProgression.Add(TSHintAttributes.IMAGE_TEXTURE_BACKGROUND, 1); }
public LTObstacles(SchoolWorld w) : base(w) { TSHints[TSHintAttributes.IMAGE_NOISE] = 0; TSHints[TSHintAttributes.DEGREES_OF_FREEDOM] = 2; // Set degrees of freedom to 2: move in 4 directions (1 means move only right-left) TSHints[TSHintAttributes.NUMBER_OF_DIFFERENT_OBJECTS] = 1; TSHints[TSHintAttributes.MAX_NUMBER_OF_ATTEMPTS] = 10000; TSHints.Add(OBSTACLES_LEVEL, 1); TSHints.Add(TIMESTEPS_LIMIT, 800); TSProgression.Add(TSHints.Clone()); TSProgression.Add(OBSTACLES_LEVEL, 2); TSProgression.Add(OBSTACLES_LEVEL, 3); TSProgression.Add(OBSTACLES_LEVEL, 4); TSProgression.Add(OBSTACLES_LEVEL, 5); TSProgression.Add(OBSTACLES_LEVEL, 6); }