Skip to content

single_site_matching

Name: SingleSiteMatching

Version: 0.1.0

Pkg-location: aind_behavior_vr_foraging_curricula.single_site_matching

Diagram

single_site_matching diagram

Specification

{
  "pkg_location": "aind_behavior_vr_foraging_curricula.single_site_matching",
  "name": "SingleSiteMatching",
  "version": "0.1.0",
  "graph": {
    "nodes": {
      "0": {
        "name": "learn_to_stop",
        "task": {
          "name": "AindVrForaging",
          "description": "",
          "task_parameters": {
            "rng_seed": null,
            "aind_behavior_services_pkg_version": "0.12.3",
            "updaters": {
              "StopDurationOffset": {
                "operation": "Offset",
                "parameters": {
                  "initial_value": 0.0,
                  "on_success": 0.003,
                  "on_failure": 0.0,
                  "increment": 0.003,
                  "decrement": 0.0,
                  "minimum": 0.0,
                  "maximum": 0.6
                }
              },
              "StopVelocityThreshold": {
                "operation": "Gain",
                "parameters": {
                  "initial_value": 60.0,
                  "on_success": 0.995,
                  "on_failure": 0.0,
                  "increment": 0.995,
                  "decrement": 0.0,
                  "minimum": 8.0,
                  "maximum": 60.0
                }
              }
            },
            "environment": {
              "blocks": [
                {
                  "environment_statistics": {
                    "patches": [
                      {
                        "label": "OdorA",
                        "state_index": 0,
                        "odor_specification": {
                          "index": 0,
                          "concentration": 1.0
                        },
                        "reward_specification": {
                          "operant_logic": {
                            "is_operant": false,
                            "stop_duration": 0.5,
                            "time_to_collect_reward": 100000.0,
                            "grace_distance_threshold": 10.0
                          },
                          "delay": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 0.5
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "amount": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 5.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "probability": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 1.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "available": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 999999.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "reward_function": [
                            {
                              "function_type": "PersistentRewardFunction",
                              "amount": null,
                              "probability": {
                                "function_type": "SetValueFunction",
                                "value": {
                                  "family": "Binomial",
                                  "distribution_parameters": {
                                    "family": "Binomial",
                                    "n": 1,
                                    "p": 1.0
                                  },
                                  "truncation_parameters": {
                                    "truncation_mode": "exclude",
                                    "min": 1.0,
                                    "max": 1.0
                                  },
                                  "scaling_parameters": {
                                    "scale": 1.0,
                                    "offset": 1.0
                                  }
                                }
                              },
                              "available": null,
                              "rule": "OnPatchEntry"
                            },
                            {
                              "function_type": "PatchRewardFunction",
                              "amount": null,
                              "probability": {
                                "function_type": "SetValueFunction",
                                "value": {
                                  "family": "Scalar",
                                  "distribution_parameters": {
                                    "family": "Scalar",
                                    "value": 1.0
                                  },
                                  "truncation_parameters": null,
                                  "scaling_parameters": null
                                }
                              },
                              "available": null,
                              "rule": "OnReward"
                            }
                          ]
                        },
                        "patch_virtual_sites_generator": {
                          "inter_site": {
                            "render_specification": {
                              "contrast": 0.5
                            },
                            "label": "InterSite",
                            "length_distribution": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 15.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            },
                            "treadmill_specification": null
                          },
                          "inter_patch": {
                            "render_specification": {
                              "contrast": 1.0
                            },
                            "label": "InterPatch",
                            "length_distribution": {
                              "family": "Exponential",
                              "distribution_parameters": {
                                "family": "Exponential",
                                "rate": 0.008333333333333333
                              },
                              "truncation_parameters": {
                                "truncation_mode": "exclude",
                                "min": 50.0,
                                "max": 150.0
                              },
                              "scaling_parameters": {
                                "scale": 1.0,
                                "offset": 50.0
                              }
                            },
                            "treadmill_specification": null
                          },
                          "post_patch": null,
                          "reward_site": {
                            "render_specification": {
                              "contrast": 0.5
                            },
                            "label": "RewardSite",
                            "length_distribution": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 40.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            },
                            "treadmill_specification": null
                          }
                        },
                        "patch_terminators": [
                          {
                            "terminator_type": "OnChoice",
                            "count": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 1.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            }
                          },
                          {
                            "terminator_type": "OnRejection",
                            "count": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 1.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            }
                          }
                        ]
                      },
                      {
                        "label": "OdorB",
                        "state_index": 1,
                        "odor_specification": {
                          "index": 1,
                          "concentration": 1.0
                        },
                        "reward_specification": {
                          "operant_logic": {
                            "is_operant": false,
                            "stop_duration": 0.5,
                            "time_to_collect_reward": 100000.0,
                            "grace_distance_threshold": 10.0
                          },
                          "delay": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 0.5
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "amount": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 5.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "probability": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 1.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "available": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 999999.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "reward_function": [
                            {
                              "function_type": "PersistentRewardFunction",
                              "amount": null,
                              "probability": {
                                "function_type": "SetValueFunction",
                                "value": {
                                  "family": "Binomial",
                                  "distribution_parameters": {
                                    "family": "Binomial",
                                    "n": 1,
                                    "p": 1.0
                                  },
                                  "truncation_parameters": {
                                    "truncation_mode": "exclude",
                                    "min": 1.0,
                                    "max": 1.0
                                  },
                                  "scaling_parameters": {
                                    "scale": 1.0,
                                    "offset": 1.0
                                  }
                                }
                              },
                              "available": null,
                              "rule": "OnPatchEntry"
                            },
                            {
                              "function_type": "PatchRewardFunction",
                              "amount": null,
                              "probability": {
                                "function_type": "SetValueFunction",
                                "value": {
                                  "family": "Scalar",
                                  "distribution_parameters": {
                                    "family": "Scalar",
                                    "value": 1.0
                                  },
                                  "truncation_parameters": null,
                                  "scaling_parameters": null
                                }
                              },
                              "available": null,
                              "rule": "OnReward"
                            }
                          ]
                        },
                        "patch_virtual_sites_generator": {
                          "inter_site": {
                            "render_specification": {
                              "contrast": 0.5
                            },
                            "label": "InterSite",
                            "length_distribution": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 15.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            },
                            "treadmill_specification": null
                          },
                          "inter_patch": {
                            "render_specification": {
                              "contrast": 1.0
                            },
                            "label": "InterPatch",
                            "length_distribution": {
                              "family": "Exponential",
                              "distribution_parameters": {
                                "family": "Exponential",
                                "rate": 0.008333333333333333
                              },
                              "truncation_parameters": {
                                "truncation_mode": "exclude",
                                "min": 50.0,
                                "max": 150.0
                              },
                              "scaling_parameters": {
                                "scale": 1.0,
                                "offset": 50.0
                              }
                            },
                            "treadmill_specification": null
                          },
                          "post_patch": null,
                          "reward_site": {
                            "render_specification": {
                              "contrast": 0.5
                            },
                            "label": "RewardSite",
                            "length_distribution": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 40.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            },
                            "treadmill_specification": null
                          }
                        },
                        "patch_terminators": [
                          {
                            "terminator_type": "OnChoice",
                            "count": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 1.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            }
                          },
                          {
                            "terminator_type": "OnRejection",
                            "count": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 1.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            }
                          }
                        ]
                      }
                    ],
                    "transition_matrix": [
                      [
                        0.5,
                        0.5
                      ],
                      [
                        0.5,
                        0.5
                      ]
                    ],
                    "first_state_occupancy": [
                      0.5,
                      0.5
                    ]
                  },
                  "end_conditions": [
                    {
                      "condition_type": "PatchCount",
                      "value": {
                        "family": "Exponential",
                        "distribution_parameters": {
                          "family": "Exponential",
                          "rate": 0.04
                        },
                        "truncation_parameters": {
                          "truncation_mode": "exclude",
                          "min": 100000.0,
                          "max": 100050.0
                        },
                        "scaling_parameters": {
                          "scale": 1.0,
                          "offset": 100000.0
                        }
                      }
                    }
                  ]
                }
              ],
              "sampling_mode": "Sequential"
            },
            "operation_control": {
              "movable_spout_control": {
                "enabled": false,
                "time_to_collect_after_reward": 1.0,
                "retracting_distance": 0.0
              },
              "odor_control": {
                "valve_max_open_time": 10.0,
                "target_total_flow": 1000.0,
                "use_channel_3_as_carrier": true,
                "target_odor_flow": 100.0
              },
              "position_control": {
                "gain": {
                  "x": 1.0,
                  "y": 1.0,
                  "z": 1.0
                },
                "initial_position": {
                  "x": 0.0,
                  "y": 2.56,
                  "z": 0.0
                },
                "frequency_filter_cutoff": 5.0,
                "velocity_threshold": 60.0
              },
              "audio_control": {
                "duration": 0.2,
                "frequency": 9999.0
              }
            }
          },
          "version": "0.6.0-rc12",
          "stage_name": "learn_to_stop"
        },
        "graph": {
          "nodes": {
            "0": "aind_behavior_vr_foraging_curricula.single_site_matching.policies.p_learn_to_stop"
          },
          "graph": {
            "0": []
          }
        },
        "start_policies": [
          "aind_behavior_vr_foraging_curricula.single_site_matching.policies.p_learn_to_stop"
        ],
        "metrics_provider": "aind_behavior_vr_foraging_curricula.single_site_matching.metrics.metrics_from_dataset"
      },
      "1": {
        "name": "graduated_stage",
        "task": {
          "name": "AindVrForaging",
          "description": "",
          "task_parameters": {
            "rng_seed": null,
            "aind_behavior_services_pkg_version": "0.12.3",
            "updaters": {},
            "environment": {
              "blocks": [
                {
                  "environment_statistics": {
                    "patches": [
                      {
                        "label": "OdorA",
                        "state_index": 0,
                        "odor_specification": {
                          "index": 0,
                          "concentration": 1.0
                        },
                        "reward_specification": {
                          "operant_logic": {
                            "is_operant": false,
                            "stop_duration": 0.5,
                            "time_to_collect_reward": 100000.0,
                            "grace_distance_threshold": 10.0
                          },
                          "delay": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 0.5
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "amount": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 5.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "probability": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 0.8
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "available": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 999999.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "reward_function": [
                            {
                              "function_type": "PersistentRewardFunction",
                              "amount": null,
                              "probability": {
                                "function_type": "SetValueFunction",
                                "value": {
                                  "family": "Binomial",
                                  "distribution_parameters": {
                                    "family": "Binomial",
                                    "n": 1,
                                    "p": 0.4
                                  },
                                  "truncation_parameters": {
                                    "truncation_mode": "exclude",
                                    "min": 0.8,
                                    "max": 1.0
                                  },
                                  "scaling_parameters": {
                                    "scale": 1.0,
                                    "offset": 0.8
                                  }
                                }
                              },
                              "available": null,
                              "rule": "OnPatchEntry"
                            },
                            {
                              "function_type": "PatchRewardFunction",
                              "amount": null,
                              "probability": {
                                "function_type": "SetValueFunction",
                                "value": {
                                  "family": "Scalar",
                                  "distribution_parameters": {
                                    "family": "Scalar",
                                    "value": 0.8
                                  },
                                  "truncation_parameters": null,
                                  "scaling_parameters": null
                                }
                              },
                              "available": null,
                              "rule": "OnReward"
                            }
                          ]
                        },
                        "patch_virtual_sites_generator": {
                          "inter_site": {
                            "render_specification": {
                              "contrast": 0.5
                            },
                            "label": "InterSite",
                            "length_distribution": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 15.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            },
                            "treadmill_specification": null
                          },
                          "inter_patch": {
                            "render_specification": {
                              "contrast": 1.0
                            },
                            "label": "InterPatch",
                            "length_distribution": {
                              "family": "Exponential",
                              "distribution_parameters": {
                                "family": "Exponential",
                                "rate": 0.006666666666666667
                              },
                              "truncation_parameters": {
                                "truncation_mode": "exclude",
                                "min": 50.0,
                                "max": 500.0
                              },
                              "scaling_parameters": {
                                "scale": 1.0,
                                "offset": 50.0
                              }
                            },
                            "treadmill_specification": null
                          },
                          "post_patch": null,
                          "reward_site": {
                            "render_specification": {
                              "contrast": 0.5
                            },
                            "label": "RewardSite",
                            "length_distribution": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 40.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            },
                            "treadmill_specification": null
                          }
                        },
                        "patch_terminators": [
                          {
                            "terminator_type": "OnChoice",
                            "count": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 1.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            }
                          },
                          {
                            "terminator_type": "OnRejection",
                            "count": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 1.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            }
                          }
                        ]
                      },
                      {
                        "label": "OdorB",
                        "state_index": 1,
                        "odor_specification": {
                          "index": 1,
                          "concentration": 1.0
                        },
                        "reward_specification": {
                          "operant_logic": {
                            "is_operant": false,
                            "stop_duration": 0.5,
                            "time_to_collect_reward": 100000.0,
                            "grace_distance_threshold": 10.0
                          },
                          "delay": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 0.5
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "amount": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 5.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "probability": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 0.2
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "available": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 999999.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "reward_function": [
                            {
                              "function_type": "PersistentRewardFunction",
                              "amount": null,
                              "probability": {
                                "function_type": "SetValueFunction",
                                "value": {
                                  "family": "Binomial",
                                  "distribution_parameters": {
                                    "family": "Binomial",
                                    "n": 1,
                                    "p": 0.1
                                  },
                                  "truncation_parameters": {
                                    "truncation_mode": "exclude",
                                    "min": 0.2,
                                    "max": 1.0
                                  },
                                  "scaling_parameters": {
                                    "scale": 1.0,
                                    "offset": 0.2
                                  }
                                }
                              },
                              "available": null,
                              "rule": "OnPatchEntry"
                            },
                            {
                              "function_type": "PatchRewardFunction",
                              "amount": null,
                              "probability": {
                                "function_type": "SetValueFunction",
                                "value": {
                                  "family": "Scalar",
                                  "distribution_parameters": {
                                    "family": "Scalar",
                                    "value": 0.2
                                  },
                                  "truncation_parameters": null,
                                  "scaling_parameters": null
                                }
                              },
                              "available": null,
                              "rule": "OnReward"
                            }
                          ]
                        },
                        "patch_virtual_sites_generator": {
                          "inter_site": {
                            "render_specification": {
                              "contrast": 0.5
                            },
                            "label": "InterSite",
                            "length_distribution": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 15.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            },
                            "treadmill_specification": null
                          },
                          "inter_patch": {
                            "render_specification": {
                              "contrast": 1.0
                            },
                            "label": "InterPatch",
                            "length_distribution": {
                              "family": "Exponential",
                              "distribution_parameters": {
                                "family": "Exponential",
                                "rate": 0.006666666666666667
                              },
                              "truncation_parameters": {
                                "truncation_mode": "exclude",
                                "min": 50.0,
                                "max": 500.0
                              },
                              "scaling_parameters": {
                                "scale": 1.0,
                                "offset": 50.0
                              }
                            },
                            "treadmill_specification": null
                          },
                          "post_patch": null,
                          "reward_site": {
                            "render_specification": {
                              "contrast": 0.5
                            },
                            "label": "RewardSite",
                            "length_distribution": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 40.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            },
                            "treadmill_specification": null
                          }
                        },
                        "patch_terminators": [
                          {
                            "terminator_type": "OnChoice",
                            "count": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 1.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            }
                          },
                          {
                            "terminator_type": "OnRejection",
                            "count": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 1.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            }
                          }
                        ]
                      }
                    ],
                    "transition_matrix": [
                      [
                        0.5,
                        0.5
                      ],
                      [
                        0.5,
                        0.5
                      ]
                    ],
                    "first_state_occupancy": [
                      0.5,
                      0.5
                    ]
                  },
                  "end_conditions": [
                    {
                      "condition_type": "PatchCount",
                      "value": {
                        "family": "Exponential",
                        "distribution_parameters": {
                          "family": "Exponential",
                          "rate": 0.04
                        },
                        "truncation_parameters": {
                          "truncation_mode": "exclude",
                          "min": 100.0,
                          "max": 150.0
                        },
                        "scaling_parameters": {
                          "scale": 1.0,
                          "offset": 100.0
                        }
                      }
                    }
                  ]
                },
                {
                  "environment_statistics": {
                    "patches": [
                      {
                        "label": "OdorA",
                        "state_index": 0,
                        "odor_specification": {
                          "index": 0,
                          "concentration": 1.0
                        },
                        "reward_specification": {
                          "operant_logic": {
                            "is_operant": false,
                            "stop_duration": 0.5,
                            "time_to_collect_reward": 100000.0,
                            "grace_distance_threshold": 10.0
                          },
                          "delay": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 0.5
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "amount": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 5.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "probability": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 0.2
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "available": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 999999.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "reward_function": [
                            {
                              "function_type": "PersistentRewardFunction",
                              "amount": null,
                              "probability": {
                                "function_type": "SetValueFunction",
                                "value": {
                                  "family": "Binomial",
                                  "distribution_parameters": {
                                    "family": "Binomial",
                                    "n": 1,
                                    "p": 0.1
                                  },
                                  "truncation_parameters": {
                                    "truncation_mode": "exclude",
                                    "min": 0.2,
                                    "max": 1.0
                                  },
                                  "scaling_parameters": {
                                    "scale": 1.0,
                                    "offset": 0.2
                                  }
                                }
                              },
                              "available": null,
                              "rule": "OnPatchEntry"
                            },
                            {
                              "function_type": "PatchRewardFunction",
                              "amount": null,
                              "probability": {
                                "function_type": "SetValueFunction",
                                "value": {
                                  "family": "Scalar",
                                  "distribution_parameters": {
                                    "family": "Scalar",
                                    "value": 0.2
                                  },
                                  "truncation_parameters": null,
                                  "scaling_parameters": null
                                }
                              },
                              "available": null,
                              "rule": "OnReward"
                            }
                          ]
                        },
                        "patch_virtual_sites_generator": {
                          "inter_site": {
                            "render_specification": {
                              "contrast": 0.5
                            },
                            "label": "InterSite",
                            "length_distribution": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 15.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            },
                            "treadmill_specification": null
                          },
                          "inter_patch": {
                            "render_specification": {
                              "contrast": 1.0
                            },
                            "label": "InterPatch",
                            "length_distribution": {
                              "family": "Exponential",
                              "distribution_parameters": {
                                "family": "Exponential",
                                "rate": 0.006666666666666667
                              },
                              "truncation_parameters": {
                                "truncation_mode": "exclude",
                                "min": 50.0,
                                "max": 500.0
                              },
                              "scaling_parameters": {
                                "scale": 1.0,
                                "offset": 50.0
                              }
                            },
                            "treadmill_specification": null
                          },
                          "post_patch": null,
                          "reward_site": {
                            "render_specification": {
                              "contrast": 0.5
                            },
                            "label": "RewardSite",
                            "length_distribution": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 40.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            },
                            "treadmill_specification": null
                          }
                        },
                        "patch_terminators": [
                          {
                            "terminator_type": "OnChoice",
                            "count": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 1.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            }
                          },
                          {
                            "terminator_type": "OnRejection",
                            "count": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 1.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            }
                          }
                        ]
                      },
                      {
                        "label": "OdorB",
                        "state_index": 1,
                        "odor_specification": {
                          "index": 1,
                          "concentration": 1.0
                        },
                        "reward_specification": {
                          "operant_logic": {
                            "is_operant": false,
                            "stop_duration": 0.5,
                            "time_to_collect_reward": 100000.0,
                            "grace_distance_threshold": 10.0
                          },
                          "delay": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 0.5
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "amount": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 5.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "probability": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 0.8
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "available": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 999999.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "reward_function": [
                            {
                              "function_type": "PersistentRewardFunction",
                              "amount": null,
                              "probability": {
                                "function_type": "SetValueFunction",
                                "value": {
                                  "family": "Binomial",
                                  "distribution_parameters": {
                                    "family": "Binomial",
                                    "n": 1,
                                    "p": 0.4
                                  },
                                  "truncation_parameters": {
                                    "truncation_mode": "exclude",
                                    "min": 0.8,
                                    "max": 1.0
                                  },
                                  "scaling_parameters": {
                                    "scale": 1.0,
                                    "offset": 0.8
                                  }
                                }
                              },
                              "available": null,
                              "rule": "OnPatchEntry"
                            },
                            {
                              "function_type": "PatchRewardFunction",
                              "amount": null,
                              "probability": {
                                "function_type": "SetValueFunction",
                                "value": {
                                  "family": "Scalar",
                                  "distribution_parameters": {
                                    "family": "Scalar",
                                    "value": 0.8
                                  },
                                  "truncation_parameters": null,
                                  "scaling_parameters": null
                                }
                              },
                              "available": null,
                              "rule": "OnReward"
                            }
                          ]
                        },
                        "patch_virtual_sites_generator": {
                          "inter_site": {
                            "render_specification": {
                              "contrast": 0.5
                            },
                            "label": "InterSite",
                            "length_distribution": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 15.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            },
                            "treadmill_specification": null
                          },
                          "inter_patch": {
                            "render_specification": {
                              "contrast": 1.0
                            },
                            "label": "InterPatch",
                            "length_distribution": {
                              "family": "Exponential",
                              "distribution_parameters": {
                                "family": "Exponential",
                                "rate": 0.006666666666666667
                              },
                              "truncation_parameters": {
                                "truncation_mode": "exclude",
                                "min": 50.0,
                                "max": 500.0
                              },
                              "scaling_parameters": {
                                "scale": 1.0,
                                "offset": 50.0
                              }
                            },
                            "treadmill_specification": null
                          },
                          "post_patch": null,
                          "reward_site": {
                            "render_specification": {
                              "contrast": 0.5
                            },
                            "label": "RewardSite",
                            "length_distribution": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 40.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            },
                            "treadmill_specification": null
                          }
                        },
                        "patch_terminators": [
                          {
                            "terminator_type": "OnChoice",
                            "count": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 1.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            }
                          },
                          {
                            "terminator_type": "OnRejection",
                            "count": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 1.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            }
                          }
                        ]
                      }
                    ],
                    "transition_matrix": [
                      [
                        0.5,
                        0.5
                      ],
                      [
                        0.5,
                        0.5
                      ]
                    ],
                    "first_state_occupancy": [
                      0.5,
                      0.5
                    ]
                  },
                  "end_conditions": [
                    {
                      "condition_type": "PatchCount",
                      "value": {
                        "family": "Exponential",
                        "distribution_parameters": {
                          "family": "Exponential",
                          "rate": 0.04
                        },
                        "truncation_parameters": {
                          "truncation_mode": "exclude",
                          "min": 100.0,
                          "max": 150.0
                        },
                        "scaling_parameters": {
                          "scale": 1.0,
                          "offset": 100.0
                        }
                      }
                    }
                  ]
                },
                {
                  "environment_statistics": {
                    "patches": [
                      {
                        "label": "OdorA",
                        "state_index": 0,
                        "odor_specification": {
                          "index": 0,
                          "concentration": 1.0
                        },
                        "reward_specification": {
                          "operant_logic": {
                            "is_operant": false,
                            "stop_duration": 0.5,
                            "time_to_collect_reward": 100000.0,
                            "grace_distance_threshold": 10.0
                          },
                          "delay": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 0.5
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "amount": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 5.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "probability": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 0.5
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "available": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 999999.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "reward_function": [
                            {
                              "function_type": "PersistentRewardFunction",
                              "amount": null,
                              "probability": {
                                "function_type": "SetValueFunction",
                                "value": {
                                  "family": "Binomial",
                                  "distribution_parameters": {
                                    "family": "Binomial",
                                    "n": 1,
                                    "p": 0.2
                                  },
                                  "truncation_parameters": {
                                    "truncation_mode": "exclude",
                                    "min": 0.5,
                                    "max": 1.0
                                  },
                                  "scaling_parameters": {
                                    "scale": 1.0,
                                    "offset": 0.5
                                  }
                                }
                              },
                              "available": null,
                              "rule": "OnPatchEntry"
                            },
                            {
                              "function_type": "PatchRewardFunction",
                              "amount": null,
                              "probability": {
                                "function_type": "SetValueFunction",
                                "value": {
                                  "family": "Scalar",
                                  "distribution_parameters": {
                                    "family": "Scalar",
                                    "value": 0.5
                                  },
                                  "truncation_parameters": null,
                                  "scaling_parameters": null
                                }
                              },
                              "available": null,
                              "rule": "OnReward"
                            }
                          ]
                        },
                        "patch_virtual_sites_generator": {
                          "inter_site": {
                            "render_specification": {
                              "contrast": 0.5
                            },
                            "label": "InterSite",
                            "length_distribution": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 15.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            },
                            "treadmill_specification": null
                          },
                          "inter_patch": {
                            "render_specification": {
                              "contrast": 1.0
                            },
                            "label": "InterPatch",
                            "length_distribution": {
                              "family": "Exponential",
                              "distribution_parameters": {
                                "family": "Exponential",
                                "rate": 0.006666666666666667
                              },
                              "truncation_parameters": {
                                "truncation_mode": "exclude",
                                "min": 50.0,
                                "max": 500.0
                              },
                              "scaling_parameters": {
                                "scale": 1.0,
                                "offset": 50.0
                              }
                            },
                            "treadmill_specification": null
                          },
                          "post_patch": null,
                          "reward_site": {
                            "render_specification": {
                              "contrast": 0.5
                            },
                            "label": "RewardSite",
                            "length_distribution": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 40.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            },
                            "treadmill_specification": null
                          }
                        },
                        "patch_terminators": [
                          {
                            "terminator_type": "OnChoice",
                            "count": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 1.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            }
                          },
                          {
                            "terminator_type": "OnRejection",
                            "count": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 1.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            }
                          }
                        ]
                      },
                      {
                        "label": "OdorB",
                        "state_index": 1,
                        "odor_specification": {
                          "index": 1,
                          "concentration": 1.0
                        },
                        "reward_specification": {
                          "operant_logic": {
                            "is_operant": false,
                            "stop_duration": 0.5,
                            "time_to_collect_reward": 100000.0,
                            "grace_distance_threshold": 10.0
                          },
                          "delay": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 0.5
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "amount": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 5.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "probability": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 0.5
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "available": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 999999.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "reward_function": [
                            {
                              "function_type": "PersistentRewardFunction",
                              "amount": null,
                              "probability": {
                                "function_type": "SetValueFunction",
                                "value": {
                                  "family": "Binomial",
                                  "distribution_parameters": {
                                    "family": "Binomial",
                                    "n": 1,
                                    "p": 0.2
                                  },
                                  "truncation_parameters": {
                                    "truncation_mode": "exclude",
                                    "min": 0.5,
                                    "max": 1.0
                                  },
                                  "scaling_parameters": {
                                    "scale": 1.0,
                                    "offset": 0.5
                                  }
                                }
                              },
                              "available": null,
                              "rule": "OnPatchEntry"
                            },
                            {
                              "function_type": "PatchRewardFunction",
                              "amount": null,
                              "probability": {
                                "function_type": "SetValueFunction",
                                "value": {
                                  "family": "Scalar",
                                  "distribution_parameters": {
                                    "family": "Scalar",
                                    "value": 0.5
                                  },
                                  "truncation_parameters": null,
                                  "scaling_parameters": null
                                }
                              },
                              "available": null,
                              "rule": "OnReward"
                            }
                          ]
                        },
                        "patch_virtual_sites_generator": {
                          "inter_site": {
                            "render_specification": {
                              "contrast": 0.5
                            },
                            "label": "InterSite",
                            "length_distribution": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 15.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            },
                            "treadmill_specification": null
                          },
                          "inter_patch": {
                            "render_specification": {
                              "contrast": 1.0
                            },
                            "label": "InterPatch",
                            "length_distribution": {
                              "family": "Exponential",
                              "distribution_parameters": {
                                "family": "Exponential",
                                "rate": 0.006666666666666667
                              },
                              "truncation_parameters": {
                                "truncation_mode": "exclude",
                                "min": 50.0,
                                "max": 500.0
                              },
                              "scaling_parameters": {
                                "scale": 1.0,
                                "offset": 50.0
                              }
                            },
                            "treadmill_specification": null
                          },
                          "post_patch": null,
                          "reward_site": {
                            "render_specification": {
                              "contrast": 0.5
                            },
                            "label": "RewardSite",
                            "length_distribution": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 40.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            },
                            "treadmill_specification": null
                          }
                        },
                        "patch_terminators": [
                          {
                            "terminator_type": "OnChoice",
                            "count": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 1.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            }
                          },
                          {
                            "terminator_type": "OnRejection",
                            "count": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 1.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            }
                          }
                        ]
                      }
                    ],
                    "transition_matrix": [
                      [
                        0.5,
                        0.5
                      ],
                      [
                        0.5,
                        0.5
                      ]
                    ],
                    "first_state_occupancy": [
                      0.5,
                      0.5
                    ]
                  },
                  "end_conditions": [
                    {
                      "condition_type": "PatchCount",
                      "value": {
                        "family": "Exponential",
                        "distribution_parameters": {
                          "family": "Exponential",
                          "rate": 0.04
                        },
                        "truncation_parameters": {
                          "truncation_mode": "exclude",
                          "min": 100.0,
                          "max": 150.0
                        },
                        "scaling_parameters": {
                          "scale": 1.0,
                          "offset": 100.0
                        }
                      }
                    }
                  ]
                },
                {
                  "environment_statistics": {
                    "patches": [
                      {
                        "label": "OdorA",
                        "state_index": 0,
                        "odor_specification": {
                          "index": 0,
                          "concentration": 1.0
                        },
                        "reward_specification": {
                          "operant_logic": {
                            "is_operant": false,
                            "stop_duration": 0.5,
                            "time_to_collect_reward": 100000.0,
                            "grace_distance_threshold": 10.0
                          },
                          "delay": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 0.5
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "amount": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 5.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "probability": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 0.65
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "available": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 999999.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "reward_function": [
                            {
                              "function_type": "PersistentRewardFunction",
                              "amount": null,
                              "probability": {
                                "function_type": "SetValueFunction",
                                "value": {
                                  "family": "Binomial",
                                  "distribution_parameters": {
                                    "family": "Binomial",
                                    "n": 1,
                                    "p": 0.325
                                  },
                                  "truncation_parameters": {
                                    "truncation_mode": "exclude",
                                    "min": 0.65,
                                    "max": 1.0
                                  },
                                  "scaling_parameters": {
                                    "scale": 1.0,
                                    "offset": 0.65
                                  }
                                }
                              },
                              "available": null,
                              "rule": "OnPatchEntry"
                            },
                            {
                              "function_type": "PatchRewardFunction",
                              "amount": null,
                              "probability": {
                                "function_type": "SetValueFunction",
                                "value": {
                                  "family": "Scalar",
                                  "distribution_parameters": {
                                    "family": "Scalar",
                                    "value": 0.65
                                  },
                                  "truncation_parameters": null,
                                  "scaling_parameters": null
                                }
                              },
                              "available": null,
                              "rule": "OnReward"
                            }
                          ]
                        },
                        "patch_virtual_sites_generator": {
                          "inter_site": {
                            "render_specification": {
                              "contrast": 0.5
                            },
                            "label": "InterSite",
                            "length_distribution": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 15.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            },
                            "treadmill_specification": null
                          },
                          "inter_patch": {
                            "render_specification": {
                              "contrast": 1.0
                            },
                            "label": "InterPatch",
                            "length_distribution": {
                              "family": "Exponential",
                              "distribution_parameters": {
                                "family": "Exponential",
                                "rate": 0.006666666666666667
                              },
                              "truncation_parameters": {
                                "truncation_mode": "exclude",
                                "min": 50.0,
                                "max": 500.0
                              },
                              "scaling_parameters": {
                                "scale": 1.0,
                                "offset": 50.0
                              }
                            },
                            "treadmill_specification": null
                          },
                          "post_patch": null,
                          "reward_site": {
                            "render_specification": {
                              "contrast": 0.5
                            },
                            "label": "RewardSite",
                            "length_distribution": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 40.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            },
                            "treadmill_specification": null
                          }
                        },
                        "patch_terminators": [
                          {
                            "terminator_type": "OnChoice",
                            "count": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 1.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            }
                          },
                          {
                            "terminator_type": "OnRejection",
                            "count": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 1.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            }
                          }
                        ]
                      },
                      {
                        "label": "OdorB",
                        "state_index": 1,
                        "odor_specification": {
                          "index": 1,
                          "concentration": 1.0
                        },
                        "reward_specification": {
                          "operant_logic": {
                            "is_operant": false,
                            "stop_duration": 0.5,
                            "time_to_collect_reward": 100000.0,
                            "grace_distance_threshold": 10.0
                          },
                          "delay": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 0.5
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "amount": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 5.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "probability": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 0.35
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "available": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 999999.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "reward_function": [
                            {
                              "function_type": "PersistentRewardFunction",
                              "amount": null,
                              "probability": {
                                "function_type": "SetValueFunction",
                                "value": {
                                  "family": "Binomial",
                                  "distribution_parameters": {
                                    "family": "Binomial",
                                    "n": 1,
                                    "p": 0.175
                                  },
                                  "truncation_parameters": {
                                    "truncation_mode": "exclude",
                                    "min": 0.35,
                                    "max": 1.0
                                  },
                                  "scaling_parameters": {
                                    "scale": 1.0,
                                    "offset": 0.35
                                  }
                                }
                              },
                              "available": null,
                              "rule": "OnPatchEntry"
                            },
                            {
                              "function_type": "PatchRewardFunction",
                              "amount": null,
                              "probability": {
                                "function_type": "SetValueFunction",
                                "value": {
                                  "family": "Scalar",
                                  "distribution_parameters": {
                                    "family": "Scalar",
                                    "value": 0.35
                                  },
                                  "truncation_parameters": null,
                                  "scaling_parameters": null
                                }
                              },
                              "available": null,
                              "rule": "OnReward"
                            }
                          ]
                        },
                        "patch_virtual_sites_generator": {
                          "inter_site": {
                            "render_specification": {
                              "contrast": 0.5
                            },
                            "label": "InterSite",
                            "length_distribution": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 15.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            },
                            "treadmill_specification": null
                          },
                          "inter_patch": {
                            "render_specification": {
                              "contrast": 1.0
                            },
                            "label": "InterPatch",
                            "length_distribution": {
                              "family": "Exponential",
                              "distribution_parameters": {
                                "family": "Exponential",
                                "rate": 0.006666666666666667
                              },
                              "truncation_parameters": {
                                "truncation_mode": "exclude",
                                "min": 50.0,
                                "max": 500.0
                              },
                              "scaling_parameters": {
                                "scale": 1.0,
                                "offset": 50.0
                              }
                            },
                            "treadmill_specification": null
                          },
                          "post_patch": null,
                          "reward_site": {
                            "render_specification": {
                              "contrast": 0.5
                            },
                            "label": "RewardSite",
                            "length_distribution": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 40.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            },
                            "treadmill_specification": null
                          }
                        },
                        "patch_terminators": [
                          {
                            "terminator_type": "OnChoice",
                            "count": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 1.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            }
                          },
                          {
                            "terminator_type": "OnRejection",
                            "count": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 1.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            }
                          }
                        ]
                      }
                    ],
                    "transition_matrix": [
                      [
                        0.5,
                        0.5
                      ],
                      [
                        0.5,
                        0.5
                      ]
                    ],
                    "first_state_occupancy": [
                      0.5,
                      0.5
                    ]
                  },
                  "end_conditions": [
                    {
                      "condition_type": "PatchCount",
                      "value": {
                        "family": "Exponential",
                        "distribution_parameters": {
                          "family": "Exponential",
                          "rate": 0.04
                        },
                        "truncation_parameters": {
                          "truncation_mode": "exclude",
                          "min": 100.0,
                          "max": 150.0
                        },
                        "scaling_parameters": {
                          "scale": 1.0,
                          "offset": 100.0
                        }
                      }
                    }
                  ]
                },
                {
                  "environment_statistics": {
                    "patches": [
                      {
                        "label": "OdorA",
                        "state_index": 0,
                        "odor_specification": {
                          "index": 0,
                          "concentration": 1.0
                        },
                        "reward_specification": {
                          "operant_logic": {
                            "is_operant": false,
                            "stop_duration": 0.5,
                            "time_to_collect_reward": 100000.0,
                            "grace_distance_threshold": 10.0
                          },
                          "delay": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 0.5
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "amount": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 5.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "probability": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 0.35
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "available": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 999999.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "reward_function": [
                            {
                              "function_type": "PersistentRewardFunction",
                              "amount": null,
                              "probability": {
                                "function_type": "SetValueFunction",
                                "value": {
                                  "family": "Binomial",
                                  "distribution_parameters": {
                                    "family": "Binomial",
                                    "n": 1,
                                    "p": 0.175
                                  },
                                  "truncation_parameters": {
                                    "truncation_mode": "exclude",
                                    "min": 0.35,
                                    "max": 1.0
                                  },
                                  "scaling_parameters": {
                                    "scale": 1.0,
                                    "offset": 0.35
                                  }
                                }
                              },
                              "available": null,
                              "rule": "OnPatchEntry"
                            },
                            {
                              "function_type": "PatchRewardFunction",
                              "amount": null,
                              "probability": {
                                "function_type": "SetValueFunction",
                                "value": {
                                  "family": "Scalar",
                                  "distribution_parameters": {
                                    "family": "Scalar",
                                    "value": 0.35
                                  },
                                  "truncation_parameters": null,
                                  "scaling_parameters": null
                                }
                              },
                              "available": null,
                              "rule": "OnReward"
                            }
                          ]
                        },
                        "patch_virtual_sites_generator": {
                          "inter_site": {
                            "render_specification": {
                              "contrast": 0.5
                            },
                            "label": "InterSite",
                            "length_distribution": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 15.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            },
                            "treadmill_specification": null
                          },
                          "inter_patch": {
                            "render_specification": {
                              "contrast": 1.0
                            },
                            "label": "InterPatch",
                            "length_distribution": {
                              "family": "Exponential",
                              "distribution_parameters": {
                                "family": "Exponential",
                                "rate": 0.006666666666666667
                              },
                              "truncation_parameters": {
                                "truncation_mode": "exclude",
                                "min": 50.0,
                                "max": 500.0
                              },
                              "scaling_parameters": {
                                "scale": 1.0,
                                "offset": 50.0
                              }
                            },
                            "treadmill_specification": null
                          },
                          "post_patch": null,
                          "reward_site": {
                            "render_specification": {
                              "contrast": 0.5
                            },
                            "label": "RewardSite",
                            "length_distribution": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 40.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            },
                            "treadmill_specification": null
                          }
                        },
                        "patch_terminators": [
                          {
                            "terminator_type": "OnChoice",
                            "count": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 1.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            }
                          },
                          {
                            "terminator_type": "OnRejection",
                            "count": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 1.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            }
                          }
                        ]
                      },
                      {
                        "label": "OdorB",
                        "state_index": 1,
                        "odor_specification": {
                          "index": 1,
                          "concentration": 1.0
                        },
                        "reward_specification": {
                          "operant_logic": {
                            "is_operant": false,
                            "stop_duration": 0.5,
                            "time_to_collect_reward": 100000.0,
                            "grace_distance_threshold": 10.0
                          },
                          "delay": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 0.5
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "amount": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 5.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "probability": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 0.15
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "available": {
                            "family": "Scalar",
                            "distribution_parameters": {
                              "family": "Scalar",
                              "value": 999999.0
                            },
                            "truncation_parameters": null,
                            "scaling_parameters": null
                          },
                          "reward_function": [
                            {
                              "function_type": "PersistentRewardFunction",
                              "amount": null,
                              "probability": {
                                "function_type": "SetValueFunction",
                                "value": {
                                  "family": "Binomial",
                                  "distribution_parameters": {
                                    "family": "Binomial",
                                    "n": 1,
                                    "p": 0.325
                                  },
                                  "truncation_parameters": {
                                    "truncation_mode": "exclude",
                                    "min": 0.15,
                                    "max": 1.0
                                  },
                                  "scaling_parameters": {
                                    "scale": 1.0,
                                    "offset": 0.15
                                  }
                                }
                              },
                              "available": null,
                              "rule": "OnPatchEntry"
                            },
                            {
                              "function_type": "PatchRewardFunction",
                              "amount": null,
                              "probability": {
                                "function_type": "SetValueFunction",
                                "value": {
                                  "family": "Scalar",
                                  "distribution_parameters": {
                                    "family": "Scalar",
                                    "value": 0.15
                                  },
                                  "truncation_parameters": null,
                                  "scaling_parameters": null
                                }
                              },
                              "available": null,
                              "rule": "OnReward"
                            }
                          ]
                        },
                        "patch_virtual_sites_generator": {
                          "inter_site": {
                            "render_specification": {
                              "contrast": 0.5
                            },
                            "label": "InterSite",
                            "length_distribution": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 15.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            },
                            "treadmill_specification": null
                          },
                          "inter_patch": {
                            "render_specification": {
                              "contrast": 1.0
                            },
                            "label": "InterPatch",
                            "length_distribution": {
                              "family": "Exponential",
                              "distribution_parameters": {
                                "family": "Exponential",
                                "rate": 0.006666666666666667
                              },
                              "truncation_parameters": {
                                "truncation_mode": "exclude",
                                "min": 50.0,
                                "max": 500.0
                              },
                              "scaling_parameters": {
                                "scale": 1.0,
                                "offset": 50.0
                              }
                            },
                            "treadmill_specification": null
                          },
                          "post_patch": null,
                          "reward_site": {
                            "render_specification": {
                              "contrast": 0.5
                            },
                            "label": "RewardSite",
                            "length_distribution": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 40.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            },
                            "treadmill_specification": null
                          }
                        },
                        "patch_terminators": [
                          {
                            "terminator_type": "OnChoice",
                            "count": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 1.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            }
                          },
                          {
                            "terminator_type": "OnRejection",
                            "count": {
                              "family": "Scalar",
                              "distribution_parameters": {
                                "family": "Scalar",
                                "value": 1.0
                              },
                              "truncation_parameters": null,
                              "scaling_parameters": null
                            }
                          }
                        ]
                      }
                    ],
                    "transition_matrix": [
                      [
                        0.5,
                        0.5
                      ],
                      [
                        0.5,
                        0.5
                      ]
                    ],
                    "first_state_occupancy": [
                      0.5,
                      0.5
                    ]
                  },
                  "end_conditions": [
                    {
                      "condition_type": "PatchCount",
                      "value": {
                        "family": "Exponential",
                        "distribution_parameters": {
                          "family": "Exponential",
                          "rate": 0.04
                        },
                        "truncation_parameters": {
                          "truncation_mode": "exclude",
                          "min": 100.0,
                          "max": 150.0
                        },
                        "scaling_parameters": {
                          "scale": 1.0,
                          "offset": 100.0
                        }
                      }
                    }
                  ]
                }
              ],
              "sampling_mode": "Random"
            },
            "operation_control": {
              "movable_spout_control": {
                "enabled": false,
                "time_to_collect_after_reward": 1.0,
                "retracting_distance": 0.0
              },
              "odor_control": {
                "valve_max_open_time": 10.0,
                "target_total_flow": 1000.0,
                "use_channel_3_as_carrier": true,
                "target_odor_flow": 100.0
              },
              "position_control": {
                "gain": {
                  "x": 1.0,
                  "y": 1.0,
                  "z": 1.0
                },
                "initial_position": {
                  "x": 0.0,
                  "y": 2.56,
                  "z": 0.0
                },
                "frequency_filter_cutoff": 5.0,
                "velocity_threshold": 8.0
              },
              "audio_control": {
                "duration": 0.2,
                "frequency": 9999.0
              }
            }
          },
          "version": "0.6.0-rc12",
          "stage_name": "graduated_stage"
        },
        "graph": {
          "nodes": {},
          "graph": {}
        },
        "start_policies": [],
        "metrics_provider": "aind_behavior_vr_foraging_curricula.single_site_matching.metrics.metrics_from_dataset"
      }
    },
    "graph": {
      "0": [
        [
          "aind_behavior_vr_foraging_curricula.single_site_matching.curriculum.st_s_learn_to_stop_to_s_graduated_stage",
          1
        ]
      ],
      "1": []
    }
  }
}