// 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);
        }
Exemplo n.º 2
0
        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 }
            });
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 8
0
        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);
        }