It's unclear from the docs how to set up a curriculum with multiple parameters

The docs show an example for only one environment parameter and it’s not obvious how to work with multiple at a time. Are you supposed to set up multiple parameters, each with their own curriculum/lessons?

The goal would be to change more than one parameter at a time in a given lesson.

I assume the doc you’re referring to is this one.

Yes your assumption is correct, the environment_parameters: section can contain multiple parameters each with their own custom curriculum.

Something like this -

behaviors:
  BehaviorY:
    # < Same as above >

# Add this section
environment_parameters:
  my_environment_parameter:
    curriculum:
      - name: MyFirstLesson # The '-' is important as this is a list
        completion_criteria:
          measure: progress
          behavior: my_behavior
          signal_smoothing: true
          min_lesson_length: 100
          threshold: 0.2
        value: 0.0
      - name: MySecondLesson # This is the start of the second lesson
        completion_criteria:
          measure: progress
          behavior: my_behavior
          signal_smoothing: true
          min_lesson_length: 100
          threshold: 0.6
          require_reset: true
        value:
          sampler_type: uniform
          sampler_parameters:
            min_value: 4.0
            max_value: 7.0
      - name: MyLastLesson
        value: 8.0

  second_parameter:
    sampler_type: uniform
    sampler_parameters:
        min_value: 0.5
        max_value: 10
 
  third:
    curriculum:
      - name: Lesson1 # The '-' is important as this is a list
        completion_criteria:
          measure: progress
          behavior: my_behavior
          signal_smoothing: true
          min_lesson_length: 100
          threshold: 0.2
        value: 0.0
      - name: Lesson2 # This is the start of the second lesson
        completion_criteria:
          measure: progress
          behavior: my_behavior
          signal_smoothing: true
          min_lesson_length: 100
          threshold: 0.6
          require_reset: true
        value:
          sampler_type: uniform
          sampler_parameters:
            min_value: 4.0
            max_value: 7.0
      - name: FinalLesson
        value: 8.0
3 Likes

Ah ok, so since in my particular case I want to have multiple parameters effectively part of the same lesson, I’ll just duplicate the lesson settings.

Thank you much for the help!!

How does the “threshold, signal_smoothing, min_lesson_length” work for multiple parameters? Which one gets used if the values are different and Lesson 0 has these duplicated several times (for different parameters) with different values?

All of them get used. Each parameter has its own curriculum that is run independently of other parameters. In my example those values are copy-pasted and are the same but in a real implementation they could be set to a different value that makes the most sense for that particular environment parameter.

1 Like

Thanks for the clarification. I do agree that the docs could be improved. After reading them I had made the faulty assumptions that the lessons for all the parameters advanced in lockstep. When one parameter advanced to the next lesson then they all would.

Hey there! Thanks for the feedback. If you have a chance, could you fill out the Documentation Feedback form, which can be found at the bottom of every documentation page - both in the core platform docs & in package docs. This allows us to collate all feedback about a specific page in the same place, and act on all of it at once.

1 Like

Hi TreyK-47, thanks for the comment.

Is there documentation for ML-Agents in the official docs yet? When I search all the docs are on the github site. I don’t see a preview link there. What is the best way to submit feedback on those docs. Submit an issue?