浏览代码

On Demand Decision (#308)

* On Demand Decision : Use RequestDecision and RequestAction 
 * New Agent Inspector : Use it to set On Demand Decision
 * New BrainParameters interface
 * LSTM memory size is now set in python
 * New C# API
 * Semantic Changes
 * Replaced RunMDP
 * New Bouncer Environment to test On Demand Dscision
/develop-generalizationTraining-TrainerController
GitHub 6 年前
当前提交
f134016b
共有 114 个文件被更改,包括 9966 次插入3654 次删除
  1. 10
      python/Basics.ipynb
  2. 24
      python/tests/test_bc.py
  3. 24
      python/tests/test_ppo.py
  4. 74
      python/tests/test_unityagents.py
  5. 15
      python/tests/test_unitytrainers.py
  6. 2
      python/trainer_config.yaml
  7. 53
      python/unityagents/brain.py
  8. 148
      python/unityagents/environment.py
  9. 2
      python/unitytrainers/bc/models.py
  10. 97
      python/unitytrainers/bc/trainer.py
  11. 11
      python/unitytrainers/buffer.py
  12. 29
      python/unitytrainers/models.py
  13. 2
      python/unitytrainers/ppo/models.py
  14. 129
      python/unitytrainers/ppo/trainer.py
  15. 14
      python/unitytrainers/trainer_controller.py
  16. 59
      unity-environment/Assets/ML-Agents/Editor/BrainEditor.cs
  17. 272
      unity-environment/Assets/ML-Agents/Examples/3DBall/3DHardScene.unity
  18. 845
      unity-environment/Assets/ML-Agents/Examples/3DBall/3DScene.unity
  19. 24
      unity-environment/Assets/ML-Agents/Examples/3DBall/Prefabs/Game.prefab
  20. 34
      unity-environment/Assets/ML-Agents/Examples/3DBall/Prefabs/GameHard.prefab
  21. 45
      unity-environment/Assets/ML-Agents/Examples/3DBall/Scripts/Ball3DAgent.cs
  22. 8
      unity-environment/Assets/ML-Agents/Examples/3DBall/Scripts/Ball3DDecision.cs
  23. 25
      unity-environment/Assets/ML-Agents/Examples/3DBall/Scripts/Ball3DHardAgent.cs
  24. 5
      unity-environment/Assets/ML-Agents/Examples/3DBall/Scripts/Ball3DHardAgent.cs.meta
  25. 6
      unity-environment/Assets/ML-Agents/Examples/Area.meta
  26. 28
      unity-environment/Assets/ML-Agents/Examples/Area/Prefabs/PushArea.prefab
  27. 30
      unity-environment/Assets/ML-Agents/Examples/Area/Prefabs/WallArea.prefab
  28. 239
      unity-environment/Assets/ML-Agents/Examples/Area/Push.unity
  29. 25
      unity-environment/Assets/ML-Agents/Examples/Area/Scripts/AreaAgent.cs
  30. 7
      unity-environment/Assets/ML-Agents/Examples/Area/Scripts/AreaDecision.cs
  31. 4
      unity-environment/Assets/ML-Agents/Examples/Area/Scripts/GoalInteract.cs
  32. 45
      unity-environment/Assets/ML-Agents/Examples/Area/Scripts/Push/PushAgent.cs
  33. 44
      unity-environment/Assets/ML-Agents/Examples/Area/Scripts/Wall/WallAgent.cs
  34. 208
      unity-environment/Assets/ML-Agents/Examples/Area/Wall.unity
  35. 7
      unity-environment/Assets/ML-Agents/Examples/Banana.meta
  36. 393
      unity-environment/Assets/ML-Agents/Examples/Banana/BananaImitation.unity
  37. 540
      unity-environment/Assets/ML-Agents/Examples/Banana/BananaRL.unity
  38. 56
      unity-environment/Assets/ML-Agents/Examples/Banana/Prefabs/Agent 1.prefab
  39. 161
      unity-environment/Assets/ML-Agents/Examples/Banana/Prefabs/AreaPB.prefab
  40. 33
      unity-environment/Assets/ML-Agents/Examples/Banana/Scripts/BananaAgent.cs
  41. 6
      unity-environment/Assets/ML-Agents/Examples/Basic.meta
  42. 203
      unity-environment/Assets/ML-Agents/Examples/Basic/Scene.unity
  43. 17
      unity-environment/Assets/ML-Agents/Examples/Basic/Scripts/BasicAgent.cs
  44. 6
      unity-environment/Assets/ML-Agents/Examples/Basic/Scripts/BasicDecision.cs
  45. 22
      unity-environment/Assets/ML-Agents/Examples/Basic/TFModels/Basic.bytes
  46. 4
      unity-environment/Assets/ML-Agents/Examples/Crawler.meta
  47. 168
      unity-environment/Assets/ML-Agents/Examples/Crawler/Crawler.unity
  48. 37
      unity-environment/Assets/ML-Agents/Examples/Crawler/Resources/Crawler.prefab
  49. 67
      unity-environment/Assets/ML-Agents/Examples/Crawler/Scripts/CrawlerAgentConfigurable.cs
  50. 6
      unity-environment/Assets/ML-Agents/Examples/GridWorld.meta
  51. 279
      unity-environment/Assets/ML-Agents/Examples/GridWorld/GridWorld.unity
  52. 2
      unity-environment/Assets/ML-Agents/Examples/GridWorld/Resources/agent.prefab
  53. 18
      unity-environment/Assets/ML-Agents/Examples/GridWorld/Scripts/GridAgent.cs
  54. 32
      unity-environment/Assets/ML-Agents/Examples/Hallway/Prefabs/HallwayArea.prefab
  55. 27
      unity-environment/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayAgent.cs
  56. 6
      unity-environment/Assets/ML-Agents/Examples/Reacher.meta
  57. 30
      unity-environment/Assets/ML-Agents/Examples/Reacher/Prefabs/Agent.prefab
  58. 154
      unity-environment/Assets/ML-Agents/Examples/Reacher/Scene.unity
  59. 57
      unity-environment/Assets/ML-Agents/Examples/Reacher/Scripts/ReacherAgent.cs
  60. 6
      unity-environment/Assets/ML-Agents/Examples/Reacher/Scripts/ReacherDecision.cs
  61. 2
      unity-environment/Assets/ML-Agents/Examples/Reacher/Scripts/ReacherGoal.cs
  62. 4
      unity-environment/Assets/ML-Agents/Examples/Tennis.meta
  63. 62
      unity-environment/Assets/ML-Agents/Examples/Tennis/Prefabs/TennisArea.prefab
  64. 21
      unity-environment/Assets/ML-Agents/Examples/Tennis/Scripts/TennisAgent.cs
  65. 248
      unity-environment/Assets/ML-Agents/Examples/Tennis/Scripts/hitWall.cs
  66. 301
      unity-environment/Assets/ML-Agents/Examples/Tennis/Tennis.unity
  67. 304
      unity-environment/Assets/ML-Agents/Scripts/Academy.cs
  68. 727
      unity-environment/Assets/ML-Agents/Scripts/Agent.cs
  69. 454
      unity-environment/Assets/ML-Agents/Scripts/Brain.cs
  70. 7
      unity-environment/Assets/ML-Agents/Scripts/Communicator.cs
  71. 7
      unity-environment/Assets/ML-Agents/Scripts/CoreBrain.cs
  72. 25
      unity-environment/Assets/ML-Agents/Scripts/CoreBrainExternal.cs
  73. 63
      unity-environment/Assets/ML-Agents/Scripts/CoreBrainHeuristic.cs
  74. 216
      unity-environment/Assets/ML-Agents/Scripts/CoreBrainInternal.cs
  75. 93
      unity-environment/Assets/ML-Agents/Scripts/CoreBrainPlayer.cs
  76. 4
      unity-environment/Assets/ML-Agents/Scripts/Decision.cs
  77. 265
      unity-environment/Assets/ML-Agents/Scripts/ExternalCommunicator.cs
  78. 5
      unity-environment/Assets/ML-Agents/Scripts/Monitor.cs
  79. 6
      unity-environment/Assets/ML-Agents/Template.meta
  80. 6
      unity-environment/Assets/ML-Agents/Template/Scripts/TemplateAgent.cs
  81. 6
      unity-environment/Assets/ML-Agents/Template/Scripts/TemplateDecision.cs
  82. 68
      unity-environment/Assets/ML-Agents/Editor/AgentEditor.cs
  83. 12
      unity-environment/Assets/ML-Agents/Editor/AgentEditor.cs.meta
  84. 745
      unity-environment/Assets/ML-Agents/Editor/MLAgentsEditModeTest.cs
  85. 12
      unity-environment/Assets/ML-Agents/Editor/MLAgentsEditModeTest.cs.meta
  86. 139
      unity-environment/Assets/ML-Agents/Editor/ResetParameterDrawer.cs
  87. 12
      unity-environment/Assets/ML-Agents/Editor/ResetParameterDrawer.cs.meta
  88. 1001
      unity-environment/Assets/ML-Agents/Examples/3DBall/TFModels/ball-EBS_ppo.bytes
  89. 785
      unity-environment/Assets/ML-Agents/Examples/3DBall/TFModels/ball.bytes
  90. 8
      unity-environment/Assets/ML-Agents/Examples/3DBall/TFModels/ball.bytes.meta
  91. 1001
      unity-environment/Assets/ML-Agents/Examples/3DBall/ball-EBS-hard_ppo.bytes
  92. 1001
      unity-environment/Assets/ML-Agents/Examples/3DBall/ball-EBS_ppo.bytes
  93. 10
      unity-environment/Assets/ML-Agents/Examples/Bouncer.meta
  94. 52
      unity-environment/Assets/ML-Agents/Scripts/ResetParameters.cs
  95. 12
      unity-environment/Assets/ML-Agents/Scripts/ResetParameters.cs.meta
  96. 993
      unity-environment/Assets/ML-Agents/Examples/Bouncer/Bouncer.unity
  97. 9
      unity-environment/Assets/ML-Agents/Examples/Bouncer/Bouncer.unity.meta
  98. 10
      unity-environment/Assets/ML-Agents/Examples/Bouncer/Prefabs.meta

10
python/Basics.ipynb


"env_info = env.reset(train_mode=train_mode)[default_brain]\n",
"\n",
"# Examine the state space for the default brain\n",
"print(\"Agent state looks like: \\n{}\".format(env_info.states[0]))\n",
"print(\"Agent state looks like: \\n{}\".format(env_info.vector_observations[0]))\n",
"for observation in env_info.observations:\n",
"for observation in env_info.visual_observations:\n",
" print(\"Agent observations look like:\")\n",
" if observation.shape[3] == 3:\n",
" plt.imshow(observation[0,:,:,:])\n",

" done = False\n",
" episode_rewards = 0\n",
" while not done:\n",
" if brain.action_space_type == 'continuous':\n",
" if brain.vector_action_space_type == 'continuous':\n",
" brain.action_space_size))[default_brain]\n",
" brain.vector_action_space_size))[default_brain]\n",
" env_info = env.step(np.random.randint(0, brain.action_space_size, \n",
" env_info = env.step(np.random.randint(0, brain.vector_action_space_size, \n",
" size=(len(env_info.agents))))[default_brain]\n",
" episode_rewards += env_info.rewards[0]\n",
" done = env_info.local_done[0]\n",

24
python/tests/test_bc.py


"logPath":"RealFakePath",
"apiNumber":"API-2",
"brainParameters": [{
"stateSize": 3,
"stackedStates": 2,
"actionSize": 2,
"vectorObservationSize": 3,
"numStackedVectorObservations": 2,
"vectorActionSize": 2,
"actionDescriptions": ["",""],
"actionSpaceType": 1,
"stateSpaceType": 1
"vectorActionDescriptions": ["",""],
"vectorActionSpaceType": 1,
"vectorObservationSpaceType": 1
}]
}'''.encode()

"logPath":"RealFakePath",
"apiNumber":"API-2",
"brainParameters": [{
"stateSize": 3,
"stackedStates": 2,
"actionSize": 2,
"vectorObservationSize": 3,
"numStackedVectorObservations": 2,
"vectorActionSize": 2,
"actionDescriptions": ["",""],
"actionSpaceType": 0,
"stateSpaceType": 1
"vectorActionDescriptions": ["",""],
"vectorActionSpaceType": 0,
"vectorObservationSpaceType": 1
}]
}'''.encode()

24
python/tests/test_ppo.py


"logPath":"RealFakePath",
"apiNumber":"API-2",
"brainParameters": [{
"stateSize": 3,
"stackedStates": 2,
"actionSize": 2,
"vectorObservationSize": 3,
"numStackedVectorObservations": 2,
"vectorActionSize": 2,
"actionDescriptions": ["",""],
"actionSpaceType": 1,
"stateSpaceType": 1
"vectorActionDescriptions": ["",""],
"vectorActionSpaceType": 1,
"vectorObservationSpaceType": 1
}]
}'''.encode()

"logPath":"RealFakePath",
"apiNumber":"API-2",
"brainParameters": [{
"stateSize": 3,
"stackedStates": 2,
"actionSize": 2,
"vectorObservationSize": 3,
"numStackedVectorObservations": 2,
"vectorActionSize": 2,
"actionDescriptions": ["",""],
"actionSpaceType": 0,
"stateSpaceType": 1
"vectorActionDescriptions": ["",""],
"vectorActionSpaceType": 0,
"vectorObservationSpaceType": 1
}]
}'''.encode()

74
python/tests/test_unityagents.py


"logPath":"RealFakePath",
"apiNumber":"API-2",
"brainParameters": [{
"stateSize": 3,
"stackedStates" : 2,
"actionSize": 2,
"vectorObservationSize": 3,
"numStackedVectorObservations": 2,
"vectorActionSize": 2,
"actionDescriptions": ["",""],
"actionSpaceType": 1,
"stateSpaceType": 1
"vectorActionDescriptions": ["",""],
"vectorActionSpaceType": 1,
"vectorObservationSpaceType": 1
}]
}'''.encode()

{
"brain_name": "RealFakeBrain",
"agents": [1,2],
"states": [1,2,3,4,5,6,1,2,3,4,5,6],
"vectorObservations": [1,2,3,4,5,6,1,2,3,4,5,6],
"actions": [1,2,3,4],
"vectorActions": [1,2,3,4],
"maxes": [false, false]
"maxes": [false, false],
"textObservations" :[" "," "]
'False'.encode()]
append_length('END_OF_MESSAGE:False')]
dummy_step = ['actions'.encode(),
append_length('''

"states": [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9],
"vectorObservations": [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9],
"actions": [1,2,3,4,5,6],
"vectorActions": [1,2,3,4,5,6],
"maxes": [false, false, false]
"maxes": [false, false, false],
"textObservations" :[" "," ", " "]
'False'.encode(),
append_length('END_OF_MESSAGE:False'),
"states": [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9],
"vectorObservations": [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9],
"actions": [1,2,3,4,5,6],
"vectorActions": [1,2,3,4,5,6],
"maxes": [false, false, false]
"maxes": [false, false, false],
"textObservations" :[" "," ", " "]
'True'.encode()]
append_length('END_OF_MESSAGE:True')]
dummy_curriculum = json.loads('''{
"measure" : "reward",

assert not env.global_done
assert isinstance(brain_info, dict)
assert isinstance(brain_info['RealFakeBrain'], BrainInfo)
assert isinstance(brain_info['RealFakeBrain'].observations, list)
assert isinstance(brain_info['RealFakeBrain'].states, np.ndarray)
assert len(brain_info['RealFakeBrain'].observations) == brain.number_observations
assert brain_info['RealFakeBrain'].states.shape[0] == len(brain_info['RealFakeBrain'].agents)
assert brain_info['RealFakeBrain'].states.shape[1] == brain.state_space_size * brain.stacked_states
assert isinstance(brain_info['RealFakeBrain'].visual_observations, list)
assert isinstance(brain_info['RealFakeBrain'].vector_observations, np.ndarray)
assert len(brain_info['RealFakeBrain'].visual_observations) == brain.number_visual_observations
assert brain_info['RealFakeBrain'].vector_observations.shape[0] == \
len(brain_info['RealFakeBrain'].agents)
assert brain_info['RealFakeBrain'].vector_observations.shape[1] == \
brain.vector_observation_space_size * brain.num_stacked_vector_observations
def test_step():

mock_socket.recv.side_effect = dummy_reset
brain_info = env.reset()
mock_socket.recv.side_effect = dummy_step
brain_info = env.step([0] * brain.action_space_size * len(brain_info['RealFakeBrain'].agents))
brain_info = env.step([0] * brain.vector_action_space_size * len(brain_info['RealFakeBrain'].agents))
brain_info = env.step([0] * brain.action_space_size * len(brain_info['RealFakeBrain'].agents))
brain_info = env.step([0] * brain.vector_action_space_size * len(brain_info['RealFakeBrain'].agents))
env.step([0] * brain.action_space_size * len(brain_info['RealFakeBrain'].agents))
env.step([0] * brain.vector_action_space_size * len(brain_info['RealFakeBrain'].agents))
assert isinstance(brain_info['RealFakeBrain'].observations, list)
assert isinstance(brain_info['RealFakeBrain'].states, np.ndarray)
assert len(brain_info['RealFakeBrain'].observations) == brain.number_observations
assert brain_info['RealFakeBrain'].states.shape[0] == len(brain_info['RealFakeBrain'].agents)
assert brain_info['RealFakeBrain'].states.shape[1] == brain.state_space_size * brain.stacked_states
assert isinstance(brain_info['RealFakeBrain'].visual_observations, list)
assert isinstance(brain_info['RealFakeBrain'].vector_observations, np.ndarray)
assert len(brain_info['RealFakeBrain'].visual_observations) == brain.number_visual_observations
assert brain_info['RealFakeBrain'].vector_observations.shape[0] == \
len(brain_info['RealFakeBrain'].agents)
assert brain_info['RealFakeBrain'].vector_observations.shape[1] == \
brain.vector_observation_space_size * brain.num_stacked_vector_observations
assert not brain_info['RealFakeBrain'].local_done[0]
assert brain_info['RealFakeBrain'].local_done[2]

assert curriculum.get_config(0) == {"param1": 0.7, "param2": 100, "param3": 0.2}
assert curriculum.lesson_length == 0
assert curriculum.get_lesson_number == 2
if __name__ == '__main__':
pytest.main()

15
python/tests/test_unitytrainers.py


"logPath":"RealFakePath",
"apiNumber":"API-2",
"brainParameters": [{
"stateSize": 3,
"stackedStates" : 2,
"actionSize": 2,
"vectorObservationSize": 3,
"numStackedVectorObservations" : 2,
"vectorActionSize": 2,
"actionDescriptions": ["",""],
"actionSpaceType": 1,
"stateSpaceType": 1
"vectorActionDescriptions": ["",""],
"vectorActionSpaceType": 1,
"vectorObservationSpaceType": 1
}]
}'''.encode()

sequence_length: 64
summary_freq: 1000
use_recurrent: false
memory_size: 8
''')
dummy_bc_config = yaml.load('''

sequence_length: 64
summary_freq: 1000
use_recurrent: false
memory_size: 8
''')
dummy_bad_config = yaml.load('''

sequence_length: 64
summary_freq: 1000
use_recurrent: false
memory_size: 8
''')

2
python/trainer_config.yaml


lambd: 0.95
learning_rate: 3.0e-4
max_steps: 5.0e4
memory_size: 256
normalize: false
num_epoch: 5
num_layers: 2

num_epoch: 3
beta: 5.0e-4
hidden_units: 64
use_recurrent: true
sequence_length: 8
time_horizon: 8

53
python/unityagents/brain.py


class BrainInfo:
def __init__(self, observation, state, memory=None, reward=None, agents=None, local_done=None,
action=None, max_reached=None):
def __init__(self, visual_observation, vector_observation, text_observations, memory=None,
reward=None, agents=None, local_done=None,
action=None, max_reached=None):
self.observations = observation
self.states = state
self.visual_observations = visual_observation
self.vector_observations = vector_observation
self.text_observations = text_observations
self.memories = memory
self.rewards = reward
self.local_done = local_done

:param brain_param: Dictionary of brain parameters.
"""
self.brain_name = brain_name
self.state_space_size = brain_param["stateSize"]
self.stacked_states = brain_param["stackedStates"]
self.number_observations = len(brain_param["cameraResolutions"])
self.vector_observation_space_size = brain_param["vectorObservationSize"]
self.num_stacked_vector_observations = brain_param["numStackedVectorObservations"]
self.number_visual_observations = len(brain_param["cameraResolutions"])
self.action_space_size = brain_param["actionSize"]
self.memory_space_size = brain_param["memorySize"]
self.action_descriptions = brain_param["actionDescriptions"]
self.action_space_type = ["discrete", "continuous"][brain_param["actionSpaceType"]]
self.state_space_type = ["discrete", "continuous"][brain_param["stateSpaceType"]]
self.vector_action_space_size = brain_param["vectorActionSize"]
self.vector_action_descriptions = brain_param["vectorActionDescriptions"]
self.vector_action_space_type = ["discrete", "continuous"][brain_param["vectorActionSpaceType"]]
self.vector_observation_space_type = ["discrete", "continuous"][brain_param["vectorObservationSpaceType"]]
Number of observations (per agent): {1}
State space type: {2}
State space size (per agent): {3}
Number of stacked states: {4}
Action space type: {5}
Action space size (per agent): {6}
Memory space size (per agent): {7}
Action descriptions: {8}'''.format(self.brain_name,
str(self.number_observations), self.state_space_type,
str(self.state_space_size), str(self.stacked_states),
self.action_space_type,
str(self.action_space_size),
str(self.memory_space_size),
', '.join(self.action_descriptions))
Number of Visual Observations (per agent): {1}
Vector Observation space type: {2}
Vector Observation space size (per agent): {3}
Number of stacked Vector Observation: {4}
Vector Action space type: {5}
Vector Action space size (per agent): {6}
Vector Action descriptions: {7}'''.format(self.brain_name,
str(self.number_visual_observations),
self.vector_observation_space_type,
str(self.vector_observation_space_size),
str(self.num_stacked_vector_observations),
self.vector_action_space_type,
str(self.vector_action_space_size),
', '.join(self.vector_action_descriptions))

148
python/unityagents/environment.py


self._global_done = None
self._academy_name = p["AcademyName"]
self._log_path = p["logPath"]
self._brains = AllBrainInfo()
# Need to instantiate new AllBrainInfo
self._brains = {}
self._brain_names = p["brainNames"]
self._external_brain_names = p["externalBrainNames"]
self._external_brain_names = [] if self._external_brain_names is None else self._external_brain_names

:return:
"""
state = self._recv_bytes().decode('utf-8')
if state[:14] == "END_OF_MESSAGE":
return {}, state[15:] == 'True'
return state_dict
return state_dict, None
def reset(self, train_mode=True, config=None, lesson=None) -> AllBrainInfo:
"""

Collects experience information from all external brains in environment at current step.
:return: a dictionary of BrainInfo objects.
"""
self._data = AllBrainInfo()
for index in range(self._num_brains):
state_dict = self._get_state_dict()
self._data = {}
while True:
state_dict, end_of_message = self._get_state_dict()
if end_of_message is not None:
self._global_done = end_of_message
for _b in self._brain_names:
if _b not in self._data:
self._data[_b] = BrainInfo([], np.array([]), [], np.array([]),
[], [], [], np.array([]), max_reached=[])
return self._data
if self._brains[b].state_space_type == "continuous":
states = np.array(state_dict["states"]).reshape((n_agent, self._brains[b].state_space_size * self._brains[b].stacked_states))
if self._brains[b].vector_observation_space_type == "continuous":
vector_obs = np.array(state_dict["vectorObservations"]).reshape(
(n_agent, self._brains[b].vector_observation_space_size
* self._brains[b].num_stacked_vector_observations))
states = np.array(state_dict["states"]).reshape((n_agent, self._brains[b].stacked_states))
vector_obs = np.array(state_dict["vectorObservations"]).reshape(
(n_agent, self._brains[b].num_stacked_vector_observations))
"Expecting {1} {2} state but received {3}."
.format(b, n_agent if self._brains[b].state_space_type == "discrete"
else str(self._brains[b].state_space_size * n_agent * self._brains[b].stacked_states),
self._brains[b].state_space_type,
"Expecting {1} {2} state but received {3}."
.format(b, n_agent if self._brains[b].vector_observation_space_type == "discrete"
else str(self._brains[b].vector_observation_space_size * n_agent
* self._brains[b].num_stacked_vector_observations),
self._brains[b].vector_observation_space_type,
memories = np.array(state_dict["memories"]).reshape((n_agent, self._brains[b].memory_space_size))
memories = np.array(state_dict["memories"]).reshape((n_agent, -1))
text_obs = state_dict["textObservations"]
actions = np.array(state_dict["actions"]).reshape((n_agent, -1))
vector_actions = np.array(state_dict["vectorActions"]).reshape((n_agent, -1))
actions = np.array([])
vector_actions = np.array([])
for o in range(self._brains[b].number_observations):
for o in range(self._brains[b].number_visual_observations):
self._data[b] = BrainInfo(observations, vector_obs, text_obs, memories, rewards,
agents, dones, vector_actions, max_reached=maxes)
self._data[b] = BrainInfo(observations, states, memories, rewards, agents,
dones, actions, max_reached=maxes)
try:
self._global_done = self._conn.recv(self._buffer_size).decode('utf-8') == 'True'
except socket.timeout as e:
raise UnityTimeOutException("The environment took too long to respond.", self._log_path)
return self._data
def _send_action(self, action, memory, value):
def _send_action(self, vector_action ,memory, text_action):
:param action: a dictionary of lists of actions.
:param vector_action: a dictionary of lists of vector actions.
:param value: a dictionary of lists of of value estimates.
:param text_action: a dictionary of lists of text actions.
action_message = {"action": action, "memory": memory, "value": value}
action_message = {"vector_action": vector_action, "memory": memory, "text_action": text_action}
self._conn.send(self._append_length(json.dumps(action_message).encode('utf-8')))
@staticmethod

arr = [float(x) for x in arr]
return arr
def step(self, action=None, memory=None, value=None) -> AllBrainInfo:
def step(self, vector_action=None, memory=None, text_action=None) -> AllBrainInfo:
:param action: Agent's action to send to environment. Can be a scalar or vector of int/floats.
:param vector_action: Agent's vector action to send to environment. Can be a scalar or vector of int/floats.
:param value: Value estimate to send to environment for visualization. Can be a scalar or vector of float(s).
:param text_action: Text action to send to environment for.
action = {} if action is None else action
vector_action = {} if vector_action is None else vector_action
value = {} if value is None else value
text_action = {} if text_action is None else text_action
if isinstance(action, (int, np.int_, float, np.float_, list, np.ndarray)):
if isinstance(vector_action, (int, np.int_, float, np.float_, list, np.ndarray)):
action = {self._external_brain_names[0]: action}
vector_action = {self._external_brain_names[0]: vector_action}
"and actions as values".format(self._num_brains))
"and vector_actions as values".format(self._num_brains))
"step cannot take an action input")
"step cannot take a vector_action input")
if isinstance(memory, (int, np.int_, float, np.float_, list, np.ndarray)):
if self._num_external_brains == 1:

raise UnityActionException(
"There are no external brains in the environment, "
"step cannot take a memory input")
if isinstance(value, (int, np.int_, float, np.float_, list, np.ndarray)):
if isinstance(text_action, (str, list, np.ndarray)):
value = {self._external_brain_names[0]: value}
text_action = {self._external_brain_names[0]: text_action}
"and state/action value estimates as values".format(self._num_brains))
"and text_actions as values".format(self._num_brains))
for brain_name in list(action.keys()) + list(memory.keys()) + list(value.keys()):
for brain_name in list(vector_action.keys()) + list(memory.keys()) + list(text_action.keys()):
if brain_name not in self._external_brain_names:
raise UnityActionException(
"The name {0} does not correspond to an external brain "

n_agent = len(self._data[b].agents)
if b not in action:
raise UnityActionException("You need to input an action for the brain {0}".format(b))
action[b] = self._flatten(action[b])
if b not in vector_action:
# raise UnityActionException("You need to input an action for the brain {0}".format(b))
if self._brains[b].vector_action_space_type == "discrete":
vector_action[b] = [0.0] * n_agent
else:
vector_action[b] = [0.0] * n_agent * self._brains[b].vector_action_space_size
else:
vector_action[b] = self._flatten(vector_action[b])
memory[b] = [0.0] * self._brains[b].memory_space_size * n_agent
memory[b] = []
memory[b] = [0.0] * self._brains[b].memory_space_size * n_agent
memory[b] = []
if b not in value:
value[b] = [0.0] * n_agent
if b not in text_action:
text_action[b] = [""] * n_agent
if value[b] is None:
value[b] = [0.0] * n_agent
if text_action[b] is None:
text_action[b] = []
value[b] = self._flatten(value[b])
if not (len(value[b]) == n_agent):
text_action[b] = [""] * n_agent
if not ((len(text_action[b]) == n_agent) or len(text_action[b]) == 0):
"There was a mismatch between the provided value and environment's expectation: "
"The brain {0} expected {1} value but was given {2}".format(b, n_agent, len(value[b])))
if not (len(memory[b]) == self._brains[b].memory_space_size * n_agent):
raise UnityActionException(
"There was a mismatch between the provided memory and environment's expectation: "
"The brain {0} expected {1} memories but was given {2}"
.format(b, self._brains[b].memory_space_size * n_agent, len(memory[b])))
if not ((self._brains[b].action_space_type == "discrete" and len(action[b]) == n_agent) or
(self._brains[b].action_space_type == "continuous" and len(
action[b]) == self._brains[b].action_space_size * n_agent)):
"There was a mismatch between the provided text_action and environment's expectation: "
"The brain {0} expected {1} text_action but was given {2}".format(
b, n_agent, len(text_action[b])))
if not ((self._brains[b].vector_action_space_type == "discrete" and len(vector_action[b]) == n_agent) or
(self._brains[b].vector_action_space_type == "continuous" and len(
vector_action[b]) == self._brains[b].vector_action_space_size * n_agent)):
.format(b, n_agent if self._brains[b].action_space_type == "discrete" else
str(self._brains[b].action_space_size * n_agent), self._brains[b].action_space_type,
str(action[b])))
.format(b, n_agent if self._brains[b].vector_action_space_type == "discrete" else
str(self._brains[b].vector_action_space_size * n_agent),
self._brains[b].vector_action_space_type,
str(vector_action[b])))
self._send_action(action, memory, value)
self._send_action(vector_action, memory, text_action)
return self._get_state()
elif not self._loaded:
raise UnityEnvironmentException("No Unity environment is loaded.")

2
python/unitytrainers/bc/models.py


self.policy = tf.layers.dense(hidden_reg, self.a_size, activation=None, use_bias=False,
kernel_initializer=c_layers.variance_scaling_initializer(factor=0.01))
if brain.action_space_type == "discrete":
if brain.vector_action_space_type == "discrete":
self.action_probs = tf.nn.softmax(self.policy)
self.sample_action = tf.cast(tf.multinomial(self.policy, 1, name="action"), tf.int32)
self.true_action = tf.placeholder(shape=[None], dtype=tf.int32, name="expert_action")

97
python/unitytrainers/bc/trainer.py


"""
self.param_keys = ['brain_to_imitate', 'batch_size', 'time_horizon', 'graph_scope',
'summary_freq', 'max_steps', 'batches_per_epoch', 'use_recurrent', 'hidden_units',
'num_layers', 'sequence_length']
'num_layers', 'sequence_length', 'memory_size']
for k in self.param_keys:
if k not in trainer_parameters:

self.variable_scope = trainer_parameters['graph_scope']
self.brain_to_imitate = trainer_parameters['brain_to_imitate']
self.batch_size = trainer_parameters['batch_size']
self.batches_per_epoch = trainer_parameters['batches_per_epoch']
self.use_recurrent = trainer_parameters['use_recurrent']
self.step = 0

self.m_size = env.brains[brain_name].memory_space_size
self.m_size = trainer_parameters["memory_size"]
self.n_sequences = max(int(trainer_parameters['batch_size'] / self.sequence_length), 1)
self.is_continuous = (env.brains[brain_name].action_space_type == "continuous")
self.use_observations = (env.brains[brain_name].number_observations > 0)
self.is_continuous = (env.brains[brain_name].vector_action_space_type == "continuous")
self.use_observations = (env.brains[brain_name].number_visual_observations > 0)
self.use_states = (env.brains[brain_name].state_space_size > 0)
self.use_states = (env.brains[brain_name].vector_observation_space_size > 0)
self.summary_path = trainer_parameters['summary_path']
if not os.path.exists(self.summary_path):
os.makedirs(self.summary_path)

h_size=int(trainer_parameters['hidden_units']),
lr=float(trainer_parameters['learning_rate']),
n_layers=int(trainer_parameters['num_layers']),
m_size=self.brain.memory_space_size,
m_size=self.m_size,
normalize=False,
use_recurrent=trainer_parameters['use_recurrent'],
brain=self.brain)

:return: a tuple containing action, memories, values and an object
to be passed to add experiences
"""
if len(all_brain_info[self.brain_name].agents) == 0:
return [], [], [], None
for i, _ in enumerate(agent_brain.observations):
feed_dict[self.model.observation_in[i]] = agent_brain.observations[i]
for i, _ in enumerate(agent_brain.visual_observations):
feed_dict[self.model.observation_in[i]] = agent_brain.visual_observations[i]
feed_dict[self.model.state_in] = agent_brain.states
feed_dict[self.model.state_in] = agent_brain.vector_observations
if agent_brain.memories.shape[1] == 0:
agent_brain.memories = np.zeros((len(agent_brain.agents), self.m_size))
feed_dict[self.model.memory_in] = agent_brain.memories
run_list += [self.model.memory_out]
if self.use_recurrent:

info_expert = curr_info[self.brain_to_imitate]
next_info_expert = next_info[self.brain_to_imitate]
for agent_id in info_expert.agents:
if agent_id in next_info_expert.agents:
idx = info_expert.agents.index(agent_id)
idx = info_expert.agents.index(agent_id)
self.training_buffer[agent_id].last_brain_info = info_expert
self.training_buffer[agent_id].last_take_action_outputs = take_action_outputs
info_expert = None
take_action_outputs = None
for agent_id in next_info_expert.agents:
stored_info_expert = self.training_buffer[agent_id].last_brain_info
if stored_info_expert is None:
continue
else:
idx = stored_info_expert.agents.index(agent_id)
if not info_expert.local_done[idx]:
if not stored_info_expert.local_done[idx]:
for i, _ in enumerate(curr_info.observations):
self.training_buffer[agent_id]['observations%d' % i].append(info_expert.observations[i][idx])
for i, _ in enumerate(stored_info_expert.visual_observations):
self.training_buffer[agent_id]['observations%d' % i].append(stored_info_expert.visual_observations[i][idx])
self.training_buffer[agent_id]['states'].append(info_expert.states[idx])
self.training_buffer[agent_id]['states'].append(stored_info_expert.vector_observations[idx])
self.training_buffer[agent_id]['memory'].append(info_expert.memories[idx])
if stored_info_expert.memories.shape[1] == 0:
stored_info_expert.memories = np.zeros((len(stored_info_expert.agents), self.m_size))
self.training_buffer[agent_id]['memory'].append(stored_info_expert.memories[idx])
info_student = next_info[self.brain_name]
info_student = curr_info[self.brain_name]
next_idx = next_info_student.agents.index(agent_id)
if not info_student.local_done[idx]:
if agent_id not in self.cumulative_rewards:
self.cumulative_rewards[agent_id] = 0
self.cumulative_rewards[agent_id] += next_info_student.rewards[next_idx]
if agent_id not in self.episode_steps:
self.episode_steps[agent_id] = 0
self.episode_steps[agent_id] += 1
self.training_buffer[agent_id].last_brain_info = info_student
info_student = None
for agent_id in next_info_student.agents:
stored_info_student = self.training_buffer[agent_id].last_brain_info
if stored_info_student is None:
continue
else:
idx = stored_info_student.agents.index(agent_id)
next_idx = next_info_student.agents.index(agent_id)
if not stored_info_student.local_done[idx]:
if agent_id not in self.cumulative_rewards:
self.cumulative_rewards[agent_id] = 0
self.cumulative_rewards[agent_id] += next_info_student.rewards[next_idx]
if agent_id not in self.episode_steps:
self.episode_steps[agent_id] = 0
self.episode_steps[agent_id] += 1
def process_experiences(self, info: AllBrainInfo):
"""

Returns whether or not the trainer has enough elements to run update model
:return: A boolean corresponding to whether or not update_model() can be run
"""
return len(self.training_buffer.update_buffer['actions']) > self.batch_size
return len(self.training_buffer.update_buffer['actions']) > self.n_sequences
batch_size = self.trainer_parameters['batch_size']
min(len(self.training_buffer.update_buffer['actions']) // self.batch_size, self.batches_per_epoch)):
min(len(self.training_buffer.update_buffer['actions']) // self.n_sequences, self.batches_per_epoch)):
start = j * batch_size
end = (j + 1) * batch_size
start = j * self.n_sequences
end = (j + 1) * self.n_sequences
feed_dict = {self.model.true_action: batch_actions.reshape([-1, self.brain.action_space_size]),
feed_dict = {self.model.true_action: batch_actions.reshape([-1, self.brain.vector_action_space_size]),
self.model.batch_size: batch_size,
self.model.batch_size: self.n_sequences,
feed_dict[self.model.state_in] = batch_states.reshape([-1, self.brain.state_space_size *
self.brain.stacked_states])
feed_dict[self.model.state_in] = batch_states.reshape([-1, self.brain.vector_observation_space_size *
self.brain.num_stacked_vector_observations])
if self.use_observations:
for i, _ in enumerate(self.model.observation_in):
_obs = np.array(_buffer['observations%d' % i][start:end])

feed_dict[self.model.memory_in] = np.zeros([batch_size, self.m_size])
feed_dict[self.model.memory_in] = np.zeros([self.n_sequences, self.m_size])
loss, _ = self.sess.run([self.model.loss, self.model.update], feed_dict=feed_dict)
batch_losses.append(loss)

11
python/unitytrainers/buffer.py


"""
self[:] = []
def __init__(self):
self.last_brain_info = None
self.last_take_action_outputs = None
super(Buffer.AgentBuffer, self).__init__()
def __str__(self):
return ", ".join(["'{0}' : {1}".format(k, str(self[k])) for k in self.keys()])

"""
for k in self.keys():
self[k].reset_field()
self.last_brain_info = None
self.last_take_action_outputs = None
def __getitem__(self, key):
if key not in self.keys():

def reset_all(self):
"""
Resets the update buffer and all the local local_buffers
"""
Resets all the local local_buffers
"""
agent_ids = list(self.keys())
for k in agent_ids:
self[k].reset_agent()

29
python/unitytrainers/models.py


self.m_size = m_size
self.normalize = normalize
self.use_recurrent = use_recurrent
self.a_size = brain.action_space_size
self.a_size = brain.vector_action_space_size
@staticmethod
def create_global_steps():

return tf.multiply(input_activation, tf.nn.sigmoid(input_activation))
@staticmethod
def create_visual_input(o_size_h, o_size_w, bw):
def create_visual_input(o_size_h, o_size_w, bw, name):
observation_in = tf.placeholder(shape=[None, o_size_h, o_size_w, c_channels], dtype=tf.float32)
observation_in = tf.placeholder(shape=[None, o_size_h, o_size_w, c_channels], dtype=tf.float32, name=name)
if self.brain.state_space_type == "continuous":
if self.brain.vector_observation_space_type == "continuous":
self.state_in = tf.placeholder(shape=[None, s_size], dtype=tf.float32, name='state')
if self.normalize:
self.running_mean = tf.get_variable("running_mean", [s_size], trainable=False, dtype=tf.float32,

def create_new_obs(self, num_streams, h_size, num_layers):
brain = self.brain
s_size = brain.state_space_size * brain.stacked_states
if brain.action_space_type == "continuous":
s_size = brain.vector_observation_space_size * brain.num_stacked_vector_observations
if brain.vector_action_space_type == "continuous":
for i in range(brain.number_observations):
for i in range(brain.number_visual_observations):
visual_input = self.create_visual_input(height_size, width_size, bw)
visual_input = tf.identity(visual_input, name="observation_in_" + str(i))
visual_input = self.create_visual_input(height_size, width_size, bw, name="visual_observation_" + str(i))
self.observation_in.append(visual_input)
self.create_vector_input(s_size)

hidden_state, hidden_visual = None, None
if brain.number_observations > 0:
for j in range(brain.number_observations):
if brain.number_visual_observations > 0:
for j in range(brain.number_visual_observations):
if brain.state_space_size > 0:
s_size = brain.state_space_size * brain.stacked_states
if brain.state_space_type == "continuous":
if brain.vector_observation_space_size > 0:
s_size = brain.vector_observation_space_size * brain.num_stacked_vector_observations
if brain.vector_observation_space_type == "continuous":
hidden_state = self.create_continuous_state_encoder(h_size, activation_fn, num_layers)
else:
hidden_state = self.create_discrete_state_encoder(s_size, h_size,

hidden = hidden_streams[0]
if self.use_recurrent:
tf.Variable(self.m_size, name="memory_size", trainable=False, dtype=tf.int32)
self.prev_action = tf.placeholder(shape=[None], dtype=tf.int32, name='prev_action')
self.prev_action_oh = c_layers.one_hot_encoding(self.prev_action, self.a_size)
hidden = tf.concat([hidden, self.prev_action_oh], axis=1)

hidden_streams = self.create_new_obs(num_streams, h_size, num_layers)
if self.use_recurrent:
tf.Variable(self.m_size, name="memory_size", trainable=False, dtype=tf.int32)
self.memory_in = tf.placeholder(shape=[None, self.m_size], dtype=tf.float32, name='recurrent_in')
_half_point = int(self.m_size / 2)
hidden_policy, memory_policy_out = self.create_recurrent_encoder(

2
python/unitytrainers/ppo/models.py


if num_layers < 1:
num_layers = 1
self.last_reward, self.new_reward, self.update_reward = self.create_reward_encoder()
if brain.action_space_type == "continuous":
if brain.vector_action_space_type == "continuous":
self.create_cc_actor_critic(h_size, num_layers)
self.entropy = tf.ones_like(tf.reshape(self.value, [-1])) * self.entropy
else:

129
python/unitytrainers/ppo/trainer.py


'learning_rate',
'max_steps', 'normalize', 'num_epoch', 'num_layers', 'time_horizon', 'sequence_length',
'summary_freq',
'use_recurrent', 'graph_scope', 'summary_path']
'use_recurrent', 'graph_scope', 'summary_path', 'memory_size']
for k in self.param_keys:
if k not in trainer_parameters:

self.sequence_length = 1
self.m_size = None
if self.use_recurrent:
self.m_size = env.brains[brain_name].memory_space_size
self.m_size = trainer_parameters["memory_size"]
self.sequence_length = trainer_parameters["sequence_length"]
if self.use_recurrent:
if self.m_size == 0:

self.training_buffer = Buffer()
self.cumulative_rewards = {}
self.episode_steps = {}
self.is_continuous = (env.brains[brain_name].action_space_type == "continuous")
self.use_observations = (env.brains[brain_name].number_observations > 0)
self.use_states = (env.brains[brain_name].state_space_size > 0)
self.is_continuous = (env.brains[brain_name].vector_action_space_type == "continuous")
self.use_observations = (env.brains[brain_name].number_visual_observations > 0)
self.use_states = (env.brains[brain_name].vector_observation_space_size > 0)
self.summary_path = trainer_parameters['summary_path']
if not os.path.exists(self.summary_path):
os.makedirs(self.summary_path)

"""
steps = self.get_step
curr_brain_info = all_brain_info[self.brain_name]
feed_dict = {self.model.batch_size: len(curr_brain_info.states), self.model.sequence_length: 1}
if len(curr_brain_info.agents) == 0:
return [], [], [], None
feed_dict = {self.model.batch_size: len(curr_brain_info.vector_observations), self.model.sequence_length: 1}
run_list = [self.model.output, self.model.all_probs, self.model.value, self.model.entropy,
self.model.learning_rate]
if self.is_continuous:

if self.use_observations:
for i, _ in enumerate(curr_brain_info.observations):
feed_dict[self.model.observation_in[i]] = curr_brain_info.observations[i]
for i, _ in enumerate(curr_brain_info.visual_observations):
feed_dict[self.model.observation_in[i]] = curr_brain_info.visual_observations[i]
feed_dict[self.model.state_in] = curr_brain_info.states
feed_dict[self.model.state_in] = curr_brain_info.vector_observations
if curr_brain_info.memories.shape[1] == 0:
curr_brain_info.memories = np.zeros((len(curr_brain_info.agents), self.m_size))
if (self.is_training and self.brain.state_space_type == "continuous" and
if (self.is_training and self.brain.vector_observation_space_type == "continuous" and
new_mean, new_variance = self.running_average(curr_brain_info.states, steps, self.model.running_mean,
self.model.running_variance)
new_mean, new_variance = self.running_average(
curr_brain_info.vector_observations, steps, self.model.running_mean, self.model.running_variance)
feed_dict[self.model.new_mean] = new_mean
feed_dict[self.model.new_variance] = new_variance
run_list = run_list + [self.model.update_mean, self.model.update_variance]

self.stats['entropy'].append(run_out[self.model.entropy])
self.stats['learning_rate'].append(run_out[self.model.learning_rate])
if self.use_recurrent:
return run_out[self.model.output], run_out[self.model.memory_out], run_out[self.model.value], run_out
return (run_out[self.model.output],
run_out[self.model.memory_out],
[str(v) for v in run_out[self.model.value]],
run_out)
return run_out[self.model.output], None, run_out[self.model.value], run_out
return (run_out[self.model.output],
None,
[str(v) for v in run_out[self.model.value]],
run_out)
def add_experiences(self, curr_info: AllBrainInfo, next_info: AllBrainInfo, take_action_outputs):
def add_experiences(self, curr_all_info: AllBrainInfo, next_all_info: AllBrainInfo, take_action_outputs):
:param curr_info: Dictionary of all current brains and corresponding BrainInfo.
:param next_info: Dictionary of all current brains and corresponding BrainInfo.
:param curr_all_info: Dictionary of all current brains and corresponding BrainInfo.
:param next_all_info: Dictionary of all current brains and corresponding BrainInfo.
curr_info = curr_info[self.brain_name]
next_info = next_info[self.brain_name]
actions = take_action_outputs[self.model.output]
epsi = 0
if self.is_continuous:
epsi = take_action_outputs[self.model.epsilon]
a_dist = take_action_outputs[self.model.all_probs]
value = take_action_outputs[self.model.value]
curr_info = curr_all_info[self.brain_name]
next_info = next_all_info[self.brain_name]
if agent_id in next_info.agents:
idx = curr_info.agents.index(agent_id)
self.training_buffer[agent_id].last_brain_info = curr_info
self.training_buffer[agent_id].last_take_action_outputs = take_action_outputs
for agent_id in next_info.agents:
stored_info = self.training_buffer[agent_id].last_brain_info
stored_take_action_outputs = self.training_buffer[agent_id].last_take_action_outputs
if stored_info is None:
continue
else:
idx = stored_info.agents.index(agent_id)
if not curr_info.local_done[idx]:
if not stored_info.local_done[idx]:
for i, _ in enumerate(curr_info.observations):
self.training_buffer[agent_id]['observations%d' % i].append(curr_info.observations[i][idx])
for i, _ in enumerate(stored_info.visual_observations):
self.training_buffer[agent_id]['observations%d' % i].append(stored_info.visual_observations[i][idx])
self.training_buffer[agent_id]['states'].append(curr_info.states[idx])
self.training_buffer[agent_id]['states'].append(stored_info.vector_observations[idx])
self.training_buffer[agent_id]['memory'].append(curr_info.memories[idx])
if stored_info.memories.shape[1] == 0:
stored_info.memories = np.zeros((len(stored_info.agents), self.m_size))
self.training_buffer[agent_id]['memory'].append(stored_info.memories[idx])
epsi = stored_take_action_outputs[self.model.epsilon]
actions = stored_take_action_outputs[self.model.output]
a_dist = stored_take_action_outputs[self.model.all_probs]
value = stored_take_action_outputs[self.model.value]
self.training_buffer[agent_id]['prev_action'].append(info.previous_actions[idx])
self.training_buffer[agent_id]['prev_action'].append(stored_info.previous_actions[idx])
if agent_id not in self.cumulative_rewards:
self.cumulative_rewards[agent_id] = 0
self.cumulative_rewards[agent_id] += next_info.rewards[next_idx]

def process_experiences(self, info: AllBrainInfo):
def process_experiences(self, all_info: AllBrainInfo):
:param info: Dictionary of all current brains and corresponding BrainInfo.
:param all_info: Dictionary of all current brains and corresponding BrainInfo.
info = info[self.brain_name]
info = all_info[self.brain_name]
for l in range(len(info.agents)):
agent_actions = self.training_buffer[info.agents[l]]['actions']
if ((info.local_done[l] or len(agent_actions) > self.trainer_parameters['time_horizon'])

else:
feed_dict = {self.model.batch_size: len(info.states), self.model.sequence_length: 1}
feed_dict = {self.model.batch_size: len(info.vector_observations), self.model.sequence_length: 1}
for i in range(len(info.observations)):
feed_dict[self.model.observation_in[i]] = info.observations[i]
for i in range(len(info.visual_observations)):
feed_dict[self.model.observation_in[i]] = info.visual_observations[i]
feed_dict[self.model.state_in] = info.states
feed_dict[self.model.state_in] = info.vector_observations
if info.memories.shape[1] == 0:
info.memories = np.zeros((len(info.vector_observations), self.m_size))
if not self.is_continuous:
if not self.is_continuous and self.use_recurrent:
feed_dict[self.model.prev_action] = np.reshape(info.previous_actions, [-1])
value_next = self.sess.run(self.model.value, feed_dict)[l]
agent_id = info.agents[l]

Returns whether or not the trainer has enough elements to run update model
:return: A boolean corresponding to whether or not update_model() can be run
"""
return len(self.training_buffer.update_buffer['actions']) > self.trainer_parameters['buffer_size']
return len(self.training_buffer.update_buffer['actions']) > \
max(int(self.trainer_parameters['buffer_size'] / self.sequence_length), 1)
def update_model(self):
"""

batch_size = self.trainer_parameters['batch_size']
n_sequences = max(int(self.trainer_parameters['batch_size'] / self.sequence_length), 1)
total_v, total_p = 0, 0
advantages = self.training_buffer.update_buffer['advantages'].get_batch()
self.training_buffer.update_buffer['advantages'].set(

for l in range(len(self.training_buffer.update_buffer['actions']) // batch_size):
start = l * batch_size
end = (l + 1) * batch_size
for l in range(len(self.training_buffer.update_buffer['actions']) // n_sequences):
start = l * n_sequences
end = (l + 1) * n_sequences
feed_dict = {self.model.batch_size: batch_size,
feed_dict = {self.model.batch_size: n_sequences,
self.model.sequence_length: self.sequence_length,
self.model.mask_input: np.array(_buffer['masks'][start:end]).reshape(
[-1]),

self.model.advantage: np.array(_buffer['advantages'][start:end]).reshape([-1]),
self.model.all_old_probs: np.array(
_buffer['action_probs'][start:end]).reshape([-1, self.brain.action_space_size])}
_buffer['action_probs'][start:end]).reshape([-1, self.brain.vector_action_space_size])}
_buffer['epsilons'][start:end]).reshape([-1, self.brain.action_space_size])
_buffer['epsilons'][start:end]).reshape([-1, self.brain.vector_action_space_size])
else:
feed_dict[self.model.action_holder] = np.array(
_buffer['actions'][start:end]).reshape([-1])

if self.use_states:
if self.brain.state_space_type == "continuous":
if self.brain.vector_observation_space_type == "continuous":
[-1, self.brain.state_space_size * self.brain.stacked_states])
[-1, self.brain.vector_observation_space_size * self.brain.num_stacked_vector_observations])
_buffer['states'][start:end]).reshape([-1, self.brain.stacked_states])
_buffer['states'][start:end]).reshape([-1, self.brain.num_stacked_vector_observations])
if self.use_observations:
for i, _ in enumerate(self.model.observation_in):
_obs = np.array(_buffer['observations%d' % i][start:end])

14
python/unitytrainers/trainer_controller.py


tf.set_random_seed(self.seed)
self.env = UnityEnvironment(file_name=env_path, worker_id=self.worker_id,
curriculum=self.curriculum_file, seed=self.seed)
self.logger.info(str(self.env))
self.env_name = os.path.basename(os.path.normpath(env_path)) # Extract out name of environment
def _get_progress(self):

elif not self.trainers[brain_name].parameters["use_recurrent"]:
nodes += [scope + x for x in ["action", "value_estimate", "action_probs"]]
else:
node_list = ["action", "value_estimate", "action_probs", "recurrent_out"]
node_list = ["action", "value_estimate", "action_probs", "recurrent_out", "memory_size"]
nodes += [scope + x for x in node_list]
if len(scopes) > 1:
self.logger.info("List of available scopes :")

for brain_name, trainer in self.trainers.items():
trainer.end_episode()
# Decide and take an action
take_action_actions, take_action_memories, take_action_values, take_action_outputs = {}, {}, {}, {}
take_action_vector, take_action_memories, take_action_text, take_action_outputs = {}, {}, {}, {}
(take_action_actions[brain_name],
(take_action_vector[brain_name],
take_action_values[brain_name],
take_action_text[brain_name],
new_info = self.env.step(action=take_action_actions, memory=take_action_memories,
value=take_action_values)
new_info = self.env.step(vector_action=take_action_vector, memory=take_action_memories,
text_action=take_action_text)
for brain_name, trainer in self.trainers.items():
trainer.add_experiences(curr_info, new_info, take_action_outputs[brain_name])
curr_info = new_info

59
unity-environment/Assets/ML-Agents/Editor/BrainEditor.cs


[CustomEditor (typeof(Brain))]
public class BrainEditor : Editor
{
[SerializeField]
bool _Foldout = true;
public override void OnInspectorGUI ()
{
Brain myBrain = (Brain)target;

}
BrainParameters parameters = myBrain.brainParameters;
if (parameters.actionDescriptions == null || parameters.actionDescriptions.Length != parameters.actionSize)
parameters.actionDescriptions = new string[parameters.actionSize];
if (parameters.vectorActionDescriptions == null || parameters.vectorActionDescriptions.Length != parameters.vectorActionSize)
parameters.vectorActionDescriptions = new string[parameters.vectorActionSize];
SerializedProperty bp = serializedBrain.FindProperty ("brainParameters");
EditorGUILayout.PropertyField(bp, true);
_Foldout = EditorGUILayout.Foldout(_Foldout, "Brain Parameters");
int indentLevel = EditorGUI.indentLevel;
if (_Foldout)
{
EditorGUI.indentLevel++;
EditorGUILayout.LabelField("Vector Observation");
EditorGUI.indentLevel++;
SerializedProperty bpVectorObsType = serializedBrain.FindProperty("brainParameters.vectorObservationSpaceType");
EditorGUILayout.PropertyField(bpVectorObsType, new GUIContent("Space Type", "Corresponds to whether state " +
"vector contains a single integer (Discrete) " +
"or a series of real-valued floats (Continuous)."));
SerializedProperty bpVectorObsSize = serializedBrain.FindProperty("brainParameters.vectorObservationSize");
EditorGUILayout.PropertyField(bpVectorObsSize, new GUIContent("Space Size", "Length of state " +
"vector for brain (In Continuous state space)." +
"Or number of possible values (in Discrete state space)."));
SerializedProperty bpNumStackedVectorObs = serializedBrain.FindProperty("brainParameters.numStackedVectorObservations");
EditorGUILayout.PropertyField(bpNumStackedVectorObs, new GUIContent("Stacked Vectors", "Number of states that" +
" will be stacked before beeing fed to the neural network."));
EditorGUI.indentLevel--;
SerializedProperty bpCamResol = serializedBrain.FindProperty("brainParameters.cameraResolutions");
EditorGUILayout.PropertyField(bpCamResol, new GUIContent("Visual Observation", "Describes height, " +
"width, and whether to greyscale visual observations for the Brain."), true);
EditorGUILayout.LabelField("Vector Action");
EditorGUI.indentLevel++;
SerializedProperty bpVectorActionType = serializedBrain.FindProperty("brainParameters.vectorActionSpaceType");
EditorGUILayout.PropertyField(bpVectorActionType, new GUIContent("Space Type", "Corresponds to whether state" +
" vector contains a single integer (Discrete) " +
"or a series of real-valued floats (Continuous)."));
SerializedProperty bpVectorActionSize = serializedBrain.FindProperty("brainParameters.vectorActionSize");
EditorGUILayout.PropertyField(bpVectorActionSize, new GUIContent("Space Size", "Length of action vector " +
"for brain (In Continuous state space)." +
"Or number of possible values (In Discrete action space)."));
SerializedProperty bpVectorActionDescription = serializedBrain.FindProperty("brainParameters.vectorActionDescriptions");
EditorGUILayout.PropertyField(bpVectorActionDescription, new GUIContent("Action Descriptions", "A list of strings used to name" +
" the available actions for the Brain."), true);
}
EditorGUI.indentLevel = indentLevel;
if (bt.enumValueIndex < 0) {
bt.enumValueIndex = (int)BrainType.Player;

272
unity-environment/Assets/ML-Agents/Examples/3DBall/3DHardScene.unity


m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0.3731316, g: 0.38074902, b: 0.3587254, a: 1}
m_IndirectSpecularColor: {r: 0.37311918, g: 0.38073993, b: 0.35872698, a: 1}
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0

m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ShowResolutionOverlay: 1
m_LightingDataAsset: {fileID: 0}
m_UseShadowmask: 0
--- !u!196 &4

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}
m_IsPrefabParent: 0
--- !u!114 &150114768
--- !u!114 &375778424
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}

m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
continuousPlayerActions:
- key: 276
index: 0
value: 1
- key: 275
index: 0
value: -1
- key: 273
index: 1
value: 1
- key: 274
index: 1
value: -1
discretePlayerActions: []
defaultAction: -1
graphModel: {fileID: 4900000, guid: ba235a8cecf9b489f82c40e372212db6, type: 3}
graphScope:
graphPlaceholders:
- name: epsilon
valueType: 1
minValue: 0
maxValue: 0
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName: []
ActionPlaceholderName: action
brain: {fileID: 667765197}
--- !u!114 &377059262
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 667765197}
--- !u!1 &544547867
GameObject:

m_Name:
m_EditorClassIdentifier:
brainParameters:
stateSize: 5
stackedStates: 3
actionSize: 2
memorySize: 0
vectorObservationSize: 5
numStackedVectorObservations: 1
vectorActionSize: 2
actionDescriptions:
vectorActionDescriptions:
actionSpaceType: 1
stateSpaceType: 1
brainType: 3
vectorActionSpaceType: 1
vectorObservationSpaceType: 1
brainType: 0
- {fileID: 150114768}
- {fileID: 896324096}
- {fileID: 891356012}
- {fileID: 1834580783}
instanceID: 26958
- {fileID: 1329621220}
- {fileID: 1577236039}
- {fileID: 377059262}
- {fileID: 375778424}
instanceID: 62476
--- !u!1001 &794378715
Prefab:
m_ObjectHideFlags: 0

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}
m_IsPrefabParent: 0
--- !u!114 &891356012
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 667765197}
--- !u!114 &896324096
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
brain: {fileID: 667765197}
--- !u!1001 &986641277
Prefab:
m_ObjectHideFlags: 0

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}
m_IsPrefabParent: 0
--- !u!1001 &1206254250
--- !u!1001 &1146080402
Prefab:
m_ObjectHideFlags: 0
serializedVersion: 2

- target: {fileID: 4128795324062154, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}
propertyPath: m_LocalPosition.x
value: -9
objectReference: {fileID: 0}
- target: {fileID: 4128795324062154, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}
propertyPath: m_LocalPosition.y
value: -2
objectReference: {fileID: 0}
- target: {fileID: 4128795324062154, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}
propertyPath: m_LocalPosition.z
value: 5
objectReference: {fileID: 0}
- target: {fileID: 4128795324062154, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4128795324062154, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4128795324062154, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4128795324062154, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4128795324062154, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}
propertyPath: m_RootOrder
value: 5
objectReference: {fileID: 0}
- target: {fileID: 114716278740392856, guid: 50eec9166a3e043dd8102d117835dee6,
type: 2}
propertyPath: brain
value:
objectReference: {fileID: 667765197}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}
m_IsPrefabParent: 0
--- !u!1001 &1206254250
Prefab:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 4128795324062154, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}
propertyPath: m_LocalPosition.x
value: -3
objectReference: {fileID: 0}
- target: {fileID: 4128795324062154, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}

propertyPath: m_Name
value: GameHard (3)
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}
m_IsPrefabParent: 0
--- !u!1001 &1318922267
Prefab:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 4128795324062154, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}
propertyPath: m_LocalPosition.x
value: -9
objectReference: {fileID: 0}
- target: {fileID: 4128795324062154, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}
propertyPath: m_LocalPosition.y
value: -2
objectReference: {fileID: 0}
- target: {fileID: 4128795324062154, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}
propertyPath: m_LocalPosition.z
value: 5
objectReference: {fileID: 0}
- target: {fileID: 4128795324062154, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4128795324062154, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4128795324062154, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4128795324062154, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4128795324062154, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}
propertyPath: m_RootOrder
value: 5
objectReference: {fileID: 0}
- target: {fileID: 114716278740392856, guid: 50eec9166a3e043dd8102d117835dee6,
type: 2}
propertyPath: brain
value:
objectReference: {fileID: 667765197}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}
m_IsPrefabParent: 0

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 50eec9166a3e043dd8102d117835dee6, type: 2}
m_IsPrefabParent: 0
--- !u!114 &1329621220
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
continuousPlayerActions:
- key: 276
index: 0
value: 1
- key: 275
index: 0
value: -1
- key: 273
index: 1
value: 1
- key: 274
index: 1
value: -1
discretePlayerActions: []
defaultAction: -1
brain: {fileID: 667765197}
--- !u!1 &1397918840
GameObject:
m_ObjectHideFlags: 0

m_Father: {fileID: 1583402088}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1577236039
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
brain: {fileID: 667765197}
--- !u!1 &1583402087
GameObject:
m_ObjectHideFlags: 0

m_Name:
m_EditorClassIdentifier:
maxSteps: 0
frameToSkip: 4
waitTime: 0
isInference: 0
trainingConfiguration:
width: 600

qualityLevel: 5
timeScale: 1
targetFrameRate: -1
defaultResetParameters: []
done: 0
resetParameters:
resetParameters: []
currentStep: 0
stepsSinceReset: 0
--- !u!1001 &1591880668
Prefab:
m_ObjectHideFlags: 0

m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1834580783
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
graphModel: {fileID: 4900000, guid: 0e03e86d2b6f24436a00cad74dcd5d5f, type: 3}
graphScope:
graphPlaceholders:
- name: epsilon
valueType: 1
minValue: 0
maxValue: 0
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName: []
ActionPlaceholderName: action
brain: {fileID: 667765197}
--- !u!1001 &1896915880
Prefab:
m_ObjectHideFlags: 0

845
unity-environment/Assets/ML-Agents/Examples/3DBall/3DScene.unity
文件差异内容过多而无法显示
查看文件

24
unity-environment/Assets/ML-Agents/Examples/3DBall/Prefabs/Game.prefab


m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Name:
m_EditorClassIdentifier:
brain: {fileID: 0}
observations: []
maxStep: 5000
resetOnDone: 1
reward: 0
done: 0
value: 0
CumulativeReward: 0
stepCounter: 0
agentStoredAction: []
memory: []
id: 0
agentParameters:
agentCameras: []
maxStep: 5000
resetOnDone: 1
eventBased: 0
numberOfStepsBetweenActions: 1
numberOfActionsBetweenDecisions: 5
ball: {fileID: 1536511242562482}
--- !u!135 &135537954369514846
SphereCollider:

34
unity-environment/Assets/ML-Agents/Examples/3DBall/Prefabs/GameHard.prefab


m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1236545525418104}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -10.3, y: 9, z: 5}
m_LocalPosition: {x: -9, y: -2, z: 5}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 4261594809067724}

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 0
serializedVersion: 3
serializedVersion: 2
m_CookingOptions: 14
m_InflateMesh: 0
m_SkinWidth: 0.01
m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
--- !u!65 &65716795579935884

m_GameObject: {fileID: 1836508099280124}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b8816d537ca88489e89cad8b9b4a39a6, type: 3}
m_Script: {fileID: 11500000, guid: edf26e11cf4ed42eaa3ffb7b91bb4676, type: 3}
observations: []
maxStep: 5000
resetOnDone: 1
state: []
stackedStates: []
reward: 0
done: 0
value: 0
CumulativeReward: 0
stepCounter: 0
agentStoredAction: []
memory: []
id: 0
agentParameters:
agentCameras: []
maxStep: 5000
resetOnDone: 1
eventBased: 0
numberOfStepsBetweenActions: 1
numberOfActionsBetweenDecisions: 5
ball: {fileID: 1943673078433006}
--- !u!135 &135765715237510820
SphereCollider:

45
unity-environment/Assets/ML-Agents/Examples/3DBall/Scripts/Ball3DAgent.cs


[Header("Specific to Ball3D")]
public GameObject ball;
public override List<float> CollectState()
public override void InitializeAgent()
state.Add(gameObject.transform.rotation.z);
state.Add(gameObject.transform.rotation.x);
state.Add((ball.transform.position.x - gameObject.transform.position.x));
state.Add((ball.transform.position.y - gameObject.transform.position.y));
state.Add((ball.transform.position.z - gameObject.transform.position.z));
state.Add(ball.transform.GetComponent<Rigidbody>().velocity.x);
state.Add(ball.transform.GetComponent<Rigidbody>().velocity.y);
state.Add(ball.transform.GetComponent<Rigidbody>().velocity.z);
return state;
}
public override void CollectObservations()
{
AddVectorObs(gameObject.transform.rotation.z);
AddVectorObs(gameObject.transform.rotation.x);
AddVectorObs((ball.transform.position.x - gameObject.transform.position.x));
AddVectorObs((ball.transform.position.y - gameObject.transform.position.y));
AddVectorObs((ball.transform.position.z - gameObject.transform.position.z));
AddVectorObs(ball.transform.GetComponent<Rigidbody>().velocity.x);
AddVectorObs(ball.transform.GetComponent<Rigidbody>().velocity.y);
AddVectorObs(ball.transform.GetComponent<Rigidbody>().velocity.z);
SetTextObs("Testing "+gameObject.GetInstanceID());
public override void AgentStep(float[] act)
public override void AgentAction(float[] act)
if (brain.brainParameters.actionSpaceType == StateType.continuous)
if (brain.brainParameters.vectorActionSpaceType == StateType.continuous)
{
float action_z = 2f * Mathf.Clamp(act[0], -1f, 1f);
if ((gameObject.transform.rotation.z < 0.25f && action_z > 0f) ||

{
gameObject.transform.Rotate(new Vector3(1, 0, 0), action_x);
}
if (!done)
{
reward = 0.1f;
}
SetReward(0.1f);
done = true;
reward = -1f;
Done();
SetReward(-1f);
}

gameObject.transform.Rotate(new Vector3(0, 0, 1), Random.Range(-10f, 10f));
ball.GetComponent<Rigidbody>().velocity = new Vector3(0f, 0f, 0f);
ball.transform.position = new Vector3(Random.Range(-1.5f, 1.5f), 4f, Random.Range(-1.5f, 1.5f)) + gameObject.transform.position;
}

8
unity-environment/Assets/ML-Agents/Examples/3DBall/Scripts/Ball3DDecision.cs


public class Ball3DDecision : MonoBehaviour, Decision
{
public float[] Decide(List<float> state, List<Camera> observation, float reward, bool done, float[] memory)
public float[] Decide(List<float> state, List<Texture2D> observation, float reward, bool done, List<float> memory)
if (gameObject.GetComponent<Brain>().brainParameters.actionSpaceType == StateType.continuous)
if (gameObject.GetComponent<Brain>().brainParameters.vectorActionSpaceType == StateType.continuous)
{
List<float> ret = new List<float>();
if (state[2] < 0 || state[5] < 0)

}
}
public float[] MakeMemory(List<float> state, List<Camera> observation, float reward, bool done, float[] memory)
public List<float> MakeMemory(List<float> state, List<Texture2D> observation, float reward, bool done, List<float> memory)
return new float[0];
return new List<float>();
}
}

25
unity-environment/Assets/ML-Agents/Examples/3DBall/Scripts/Ball3DHardAgent.cs


[Header("Specific to Ball3DHard")]
public GameObject ball;
public override List<float> CollectState()
public override void CollectObservations()
state.Add(gameObject.transform.rotation.z);
state.Add(gameObject.transform.rotation.x);
state.Add((ball.transform.position.x - gameObject.transform.position.x));
state.Add((ball.transform.position.y - gameObject.transform.position.y));
state.Add((ball.transform.position.z - gameObject.transform.position.z));
return state;
AddVectorObs(gameObject.transform.rotation.z);
AddVectorObs(gameObject.transform.rotation.x);
AddVectorObs((ball.transform.position.x - gameObject.transform.position.x));
AddVectorObs((ball.transform.position.y - gameObject.transform.position.y));
AddVectorObs((ball.transform.position.z - gameObject.transform.position.z));
public override void AgentStep(float[] act)
public override void AgentAction(float[] act)
if (brain.brainParameters.actionSpaceType == StateType.continuous)
if (brain.brainParameters.vectorActionSpaceType == StateType.continuous)
{
float action_z = 2f * Mathf.Clamp(act[0], -1f, 1f);
if ((gameObject.transform.rotation.z < 0.25f && action_z > 0f) ||

{
gameObject.transform.Rotate(new Vector3(1, 0, 0), action_x);
}
if (!done)
if (!IsDone())
reward = 0.1f;
SetReward( 0.1f);
}
}
if ((ball.transform.position.y - gameObject.transform.position.y) < -2f ||

done = true;
reward = -1f;
Done();
SetReward(-1f);
}
}

5
unity-environment/Assets/ML-Agents/Examples/3DBall/Scripts/Ball3DHardAgent.cs.meta


fileFormatVersion: 2
guid: b8816d537ca88489e89cad8b9b4a39a6
timeCreated: 1502223572
guid: edf26e11cf4ed42eaa3ffb7b91bb4676
timeCreated: 1517967179
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0

6
unity-environment/Assets/ML-Agents/Examples/Area.meta


fileFormatVersion: 2
guid: dd0ac6aeac49a4adcb3e8db0f7280fc0
guid: 77a923b8620ba41d5a45582687025cda
timeCreated: 1506303336
licenseType: Pro
timeCreated: 1517447132
licenseType: Free
DefaultImporter:
userData:
assetBundleName:

28
unity-environment/Assets/ML-Agents/Examples/Area/Prefabs/PushArea.prefab


m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Name:
m_EditorClassIdentifier:
brain: {fileID: 0}
observations: []
maxStep: 1000
resetOnDone: 1
reward: 0
done: 0
value: 0
CumulativeReward: 0
stepCounter: 0
agentStoredAction: []
memory: []
id: 0
agentParameters:
agentCameras: []
maxStep: 1000
resetOnDone: 1
eventBased: 0
numberOfStepsBetweenActions: 1
numberOfActionsBetweenDecisions: 5
area: {fileID: 1279120735226386}
goalHolder: {fileID: 1576612233868982}
block: {fileID: 1493483966197088}

30
unity-environment/Assets/ML-Agents/Examples/Area/Prefabs/WallArea.prefab


m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Name:
m_EditorClassIdentifier:
brain: {fileID: 0}
observations: []
maxStep: 1000
resetOnDone: 1
reward: 0
done: 0
value: 0
CumulativeReward: 0
stepCounter: 0
agentStoredAction: []
memory: []
id: 0
agentParameters:
agentCameras: []
maxStep: 1000
resetOnDone: 1
eventBased: 0
numberOfStepsBetweenActions: 1
numberOfActionsBetweenDecisions: 5
area: {fileID: 1718829686919056}
goalHolder: {fileID: 1960504220667788}
block: {fileID: 1312874949203312}

239
unity-environment/Assets/ML-Agents/Examples/Area/Push.unity


m_Name:
m_EditorClassIdentifier:
brainParameters:
stateSize: 17
actionSize: 5
memorySize: 0
vectorObservationSize: 17
numStackedVectorObservations: 1
vectorActionSize: 3
actionDescriptions:
-
-
vectorActionDescriptions:
actionSpaceType: 0
stateSpaceType: 1
vectorActionSpaceType: 1
vectorObservationSpaceType: 1
- {fileID: 220175184}
- {fileID: 981702898}
- {fileID: 679502902}
- {fileID: 1501269422}
instanceID: 23538
- {fileID: 1217204056}
- {fileID: 1568715854}
- {fileID: 772741001}
- {fileID: 37706731}
instanceID: 62960
--- !u!114 &37706731
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
graphModel: {fileID: 4900000, guid: 5468dc3aca82c4f46835612724dbd1c4, type: 3}
graphScope:
graphPlaceholders: []
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName: []
ActionPlaceholderName: action
brain: {fileID: 7561199}
--- !u!1001 &69254656
Prefab:
m_ObjectHideFlags: 0

propertyPath: m_RootOrder
value: 3
objectReference: {fileID: 0}
- target: {fileID: 1279120735226386, guid: db6eac8138a454addbb6d1e5f475d886, type: 2}
propertyPath: m_Name
value: Area
objectReference: {fileID: 0}
- target: {fileID: 114258304849110948, guid: db6eac8138a454addbb6d1e5f475d886,
type: 2}
propertyPath: academy
value:
objectReference: {fileID: 1574236047}
- target: {fileID: 114258304849110948, guid: db6eac8138a454addbb6d1e5f475d886,
type: 2}
propertyPath: academy
value:
objectReference: {fileID: 1574236047}
- target: {fileID: 1279120735226386, guid: db6eac8138a454addbb6d1e5f475d886, type: 2}
propertyPath: m_Name
value: Area
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: db6eac8138a454addbb6d1e5f475d886, type: 2}
m_IsPrefabParent: 0

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: db6eac8138a454addbb6d1e5f475d886, type: 2}
m_IsPrefabParent: 0
--- !u!114 &220175184
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
continuousPlayerActions:
- key: 97
index: 0
value: -1
- key: 100
index: 0
value: 1
- key: 119
index: 1
value: 1
- key: 115
index: 1
value: -1
- key: 32
index: 2
value: 1
discretePlayerActions:
- key: 97
value: 1
- key: 100
value: 2
- key: 119
value: 4
- key: 115
value: 3
- key: 32
value: 5
defaultAction: 0
brain: {fileID: 7561199}
--- !u!1001 &266257433
Prefab:
m_ObjectHideFlags: 0

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: db6eac8138a454addbb6d1e5f475d886, type: 2}
m_IsPrefabParent: 0
--- !u!114 &679502902
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 7561199}
--- !u!1 &762086410
GameObject:
m_ObjectHideFlags: 0

m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!114 &772741001
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 7561199}
--- !u!1001 &886829799
Prefab:
m_ObjectHideFlags: 0

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: db6eac8138a454addbb6d1e5f475d886, type: 2}
m_IsPrefabParent: 0
--- !u!114 &981702898
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
brain: {fileID: 7561199}
--- !u!1 &1009000883
GameObject:
m_ObjectHideFlags: 0

m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: db6eac8138a454addbb6d1e5f475d886, type: 2}
m_IsPrefabParent: 0
--- !u!114 &1217204056
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
continuousPlayerActions:
- key: 97
index: 0
value: -1
- key: 100
index: 0
value: 1
- key: 119
index: 1
value: 1
- key: 115
index: 1
value: -1
- key: 32
index: 2
value: 1
discretePlayerActions:
- key: 97
value: 1
- key: 100
value: 2
- key: 119
value: 4
- key: 115
value: 3
- key: 32
value: 5
defaultAction: 0
brain: {fileID: 7561199}
--- !u!1001 &1252515851
Prefab:
m_ObjectHideFlags: 0

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: db6eac8138a454addbb6d1e5f475d886, type: 2}
m_IsPrefabParent: 0
--- !u!114 &1501269422
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
graphModel: {fileID: 4900000, guid: 5468dc3aca82c4f46835612724dbd1c4, type: 3}
graphScope:
graphPlaceholders: []
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName: []
ActionPlaceholderName: action
brain: {fileID: 7561199}
--- !u!1001 &1534810913
Prefab:
m_ObjectHideFlags: 0

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: db6eac8138a454addbb6d1e5f475d886, type: 2}
m_IsPrefabParent: 0
--- !u!114 &1568715854
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
brain: {fileID: 7561199}
--- !u!1 &1574236047
GameObject:
m_ObjectHideFlags: 0

m_Name:
m_EditorClassIdentifier:
maxSteps: 40000
frameToSkip: 4
waitTime: 0
isInference: 0
trainingConfiguration:
width: 80

qualityLevel: 5
timeScale: 1
targetFrameRate: 60
defaultResetParameters:
- key: block_size
value: 1
- key: goal_size
value: 1
- key: x_variation
value: 2.5
done: 0
resetParameters:
resetParameters:
- key: goal_sizeZZZ
value: 1
- key: block_size
value: 1
- key: x_variation
value: 2.5
currentStep: 0
stepsSinceReset: 0
goalSize: 0
blockSize: 0
xVariation: 0

25
unity-environment/Assets/ML-Agents/Examples/Area/Scripts/AreaAgent.cs


public GameObject area;
public override List<float> CollectState()
public override void CollectObservations()
state.Add((transform.position.x - area.transform.position.x));
state.Add((transform.position.y - area.transform.position.y));
state.Add((transform.position.z + 5 - area.transform.position.z));
state.Add(velocity.x);
state.Add(velocity.y);
state.Add(velocity.z);
return state;
AddVectorObs((transform.position.x - area.transform.position.x));
AddVectorObs((transform.position.y - area.transform.position.y));
AddVectorObs((transform.position.z + 5 - area.transform.position.z));
AddVectorObs(velocity.x);
AddVectorObs(velocity.y);
AddVectorObs(velocity.z);
}
public void MoveAgent(float[] act) {

if (brain.brainParameters.actionSpaceType == StateType.continuous)
if (brain.brainParameters.vectorActionSpaceType == StateType.continuous)
{
directionX = Mathf.Clamp(act[0], -1f, 1f);
directionZ = Mathf.Clamp(act[1], -1f, 1f);

}
}
public override void AgentStep(float[] act)
public override void AgentAction(float[] act)
reward = -0.005f;
AddReward(-0.005f);
done = true;
reward = -1f;
Done();
AddReward(-1f);
}
}

7
unity-environment/Assets/ML-Agents/Examples/Area/Scripts/AreaDecision.cs


public class AreaDecision : MonoBehaviour, Decision {
public float[] Decide (List<float> state, List<Camera> observation, float reward, bool done, float[] memory)
public float[] Decide (List<float> state, List<Texture2D> observation, float reward, bool done, List<float> memory)
public float[] MakeMemory (List<float> state, List<Camera> observation, float reward, bool done, float[] memory)
public List<float> MakeMemory (List<float> state, List<Texture2D> observation, float reward, bool done, List<float> memory)
return default(float[]);
return new List<float>();
}
}

4
unity-environment/Assets/ML-Agents/Examples/Area/Scripts/GoalInteract.cs


if (collision.gameObject == myObject)
{
Agent agent = myAgent.GetComponent<Agent>();
agent.done = true;
agent.reward = 1f;
agent.Done();
agent.AddReward(1f);
}
}

45
unity-environment/Assets/ML-Agents/Examples/Area/Scripts/Push/PushAgent.cs


rb = GetComponent<Rigidbody>();
}
public override List<float> CollectState()
public override void CollectObservations()
state.Add((transform.position.x - area.transform.position.x));
state.Add((transform.position.y - area.transform.position.y));
state.Add((transform.position.z + 5 - area.transform.position.z));
AddVectorObs((transform.position.x - area.transform.position.x));
AddVectorObs((transform.position.y - area.transform.position.y));
AddVectorObs((transform.position.z + 5 - area.transform.position.z));
state.Add((goalHolder.transform.position.x - area.transform.position.x));
state.Add((goalHolder.transform.position.y - area.transform.position.y));
state.Add((goalHolder.transform.position.z + 5 - area.transform.position.z));
AddVectorObs((goalHolder.transform.position.x - area.transform.position.x));
AddVectorObs((goalHolder.transform.position.y - area.transform.position.y));
AddVectorObs((goalHolder.transform.position.z + 5 - area.transform.position.z));
state.Add((block.transform.position.x - area.transform.position.x));
state.Add((block.transform.position.y - area.transform.position.y));
state.Add((block.transform.position.z + 5 - area.transform.position.z));
AddVectorObs((block.transform.position.x - area.transform.position.x));
AddVectorObs((block.transform.position.y - area.transform.position.y));
AddVectorObs((block.transform.position.z + 5 - area.transform.position.z));
state.Add(velocity.x);
state.Add(velocity.y);
state.Add(velocity.z);
AddVectorObs(velocity.x);
AddVectorObs(velocity.y);
AddVectorObs(velocity.z);
state.Add(blockVelocity.x);
state.Add(blockVelocity.y);
state.Add(blockVelocity.z);
AddVectorObs(blockVelocity.x);
AddVectorObs(blockVelocity.y);
AddVectorObs(blockVelocity.z);
state.Add(block.transform.localScale.x);
state.Add(goalHolder.transform.localScale.x);
AddVectorObs(block.transform.localScale.x);
AddVectorObs(goalHolder.transform.localScale.x);
return state;
public override void AgentStep(float[] act)
public override void AgentAction(float[] act)
reward = -0.005f;
AddReward( -0.005f);
done = true;
reward = -1f;
Done();
AddReward(-1f);
}
}

44
unity-environment/Assets/ML-Agents/Examples/Area/Scripts/Wall/WallAgent.cs


base.InitializeAgent();
}
public override List<float> CollectState()
public override void CollectObservations()
state.Add((transform.position.x - area.transform.position.x));
state.Add((transform.position.y - area.transform.position.y));
state.Add((transform.position.z + 5 - area.transform.position.z));
AddVectorObs((transform.position.x - area.transform.position.x));
AddVectorObs((transform.position.y - area.transform.position.y));
AddVectorObs((transform.position.z + 5 - area.transform.position.z));
state.Add((goalHolder.transform.position.x - area.transform.position.x));
state.Add((goalHolder.transform.position.y - area.transform.position.y));
state.Add((goalHolder.transform.position.z + 5 - area.transform.position.z));
AddVectorObs((goalHolder.transform.position.x - area.transform.position.x));
AddVectorObs((goalHolder.transform.position.y - area.transform.position.y));
AddVectorObs((goalHolder.transform.position.z + 5 - area.transform.position.z));
state.Add((block.transform.position.x - area.transform.position.x));
state.Add((block.transform.position.y - area.transform.position.y));
state.Add((block.transform.position.z + 5 - area.transform.position.z));
AddVectorObs((block.transform.position.x - area.transform.position.x));
AddVectorObs((block.transform.position.y - area.transform.position.y));
AddVectorObs((block.transform.position.z + 5 - area.transform.position.z));
state.Add(wall.transform.localScale.y);
AddVectorObs(wall.transform.localScale.y);
state.Add(velocity.x);
state.Add(velocity.y);
state.Add(velocity.z);
AddVectorObs(velocity.x);
AddVectorObs(velocity.y);
AddVectorObs(velocity.z);
state.Add(blockVelocity.x);
state.Add(blockVelocity.y);
state.Add(blockVelocity.z);
return state;
AddVectorObs(blockVelocity.x);
AddVectorObs(blockVelocity.y);
AddVectorObs(blockVelocity.z);
public override void AgentStep(float[] act)
public override void AgentAction(float[] act)
reward = -0.005f;
AddReward(-0.005f);
MoveAgent(act);
if (gameObject.transform.position.y < 0.0f ||

done = true;
reward = -1f;
Done();
AddReward( -1f);
}
}

208
unity-environment/Assets/ML-Agents/Examples/Area/Wall.unity


m_Name:
m_EditorClassIdentifier:
brainParameters:
stateSize: 16
actionSize: 6
memorySize: 0
vectorObservationSize: 16
numStackedVectorObservations: 1
vectorActionSize: 3
actionDescriptions:
-
-
vectorActionDescriptions:
-
actionSpaceType: 0
stateSpaceType: 1
vectorActionSpaceType: 1
vectorObservationSpaceType: 1
- {fileID: 1723393899}
- {fileID: 591610699}
- {fileID: 654152925}
- {fileID: 1143332051}
instanceID: 23752
- {fileID: 2044743933}
- {fileID: 341349309}
- {fileID: 1961191857}
- {fileID: 1698447056}
instanceID: 76528
--- !u!1001 &312113717
Prefab:
m_ObjectHideFlags: 0

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 2f5be533719824ee78ab11f49b193ef3, type: 2}
m_IsPrefabParent: 0
--- !u!114 &341349309
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
brain: {fileID: 7561199}
--- !u!1001 &411509070
Prefab:
m_ObjectHideFlags: 0

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 2f5be533719824ee78ab11f49b193ef3, type: 2}
m_IsPrefabParent: 0
--- !u!114 &591610699
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
brain: {fileID: 7561199}
--- !u!1001 &600361895
Prefab:
m_ObjectHideFlags: 0

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 2f5be533719824ee78ab11f49b193ef3, type: 2}
m_IsPrefabParent: 0
--- !u!114 &654152925
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 7561199}
--- !u!1001 &758976483
Prefab:
m_ObjectHideFlags: 0

m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 2f5be533719824ee78ab11f49b193ef3, type: 2}
m_IsPrefabParent: 0
--- !u!114 &1143332051
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
graphModel: {fileID: 4900000, guid: 0953cbdb353884661b9561858d3ebfe7, type: 3}
graphScope:
graphPlaceholders: []
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName: []
ActionPlaceholderName: action
brain: {fileID: 7561199}
--- !u!1001 &1258273376
Prefab:
m_ObjectHideFlags: 0

m_Name:
m_EditorClassIdentifier:
maxSteps: 50000
frameToSkip: 4
waitTime: 0
isInference: 0
trainingConfiguration:
width: 80

qualityLevel: 5
timeScale: 1
targetFrameRate: 60
defaultResetParameters:
- key: min_wall_height
value: 5.5
- key: max_wall_height
value: 6
done: 0
resetParameters:
resetParameters:
- key: min_wall_height
value: 5
- key: max_wall_height
value: 6
currentStep: 0
stepsSinceReset: 0
minWallHeight: 5
maxWallHeight: 6
--- !u!4 &1574236049

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 2f5be533719824ee78ab11f49b193ef3, type: 2}
m_IsPrefabParent: 0
--- !u!114 &1723393899
--- !u!114 &1698447056
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}

m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
continuousPlayerActions:
- key: 119
index: 1
value: 1
- key: 115
index: 1
value: -1
- key: 97
index: 0
value: -1
- key: 100
index: 0
value: 1
- key: 32
index: 2
value: 1
discretePlayerActions:
- key: 97
value: 1
- key: 100
value: 2
- key: 119
value: 4
- key: 115
value: 3
- key: 32
value: 5
defaultAction: 0
graphModel: {fileID: 4900000, guid: 0953cbdb353884661b9561858d3ebfe7, type: 3}
graphScope:
graphPlaceholders: []
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName: []
ActionPlaceholderName: action
brain: {fileID: 7561199}
--- !u!1001 &1898559529
Prefab:

propertyPath: m_RootOrder
value: 3
objectReference: {fileID: 0}
- target: {fileID: 114215545026793406, guid: 2f5be533719824ee78ab11f49b193ef3,
type: 2}
propertyPath: academy
value:
objectReference: {fileID: 1574236047}
- target: {fileID: 114215545026793406, guid: 2f5be533719824ee78ab11f49b193ef3,
type: 2}
propertyPath: academy
value:
objectReference: {fileID: 1574236047}
- target: {fileID: 1718829686919056, guid: 2f5be533719824ee78ab11f49b193ef3, type: 2}
propertyPath: m_Name
value: Area

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 2f5be533719824ee78ab11f49b193ef3, type: 2}
m_IsPrefabParent: 0
--- !u!114 &1961191857
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 7561199}
--- !u!1001 &1967648825
Prefab:
m_ObjectHideFlags: 0

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 2f5be533719824ee78ab11f49b193ef3, type: 2}
m_IsPrefabParent: 0
--- !u!114 &2044743933
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
continuousPlayerActions:
- key: 119
index: 1
value: 1
- key: 115
index: 1
value: -1
- key: 97
index: 0
value: -1
- key: 100
index: 0
value: 1
- key: 32
index: 2
value: 1
discretePlayerActions:
- key: 97
value: 1
- key: 100
value: 2
- key: 119
value: 4
- key: 115
value: 3
- key: 32
value: 5
defaultAction: 0
brain: {fileID: 7561199}
--- !u!1001 &2126429167
Prefab:
m_ObjectHideFlags: 0

7
unity-environment/Assets/ML-Agents/Examples/Banana.meta


fileFormatVersion: 2
guid: 87433157b3ab14e0c96902594599363d
guid: 570a4b05478c54aabb612b2dd0ff4259
timeCreated: 1513127668
licenseType: Pro
timeCreated: 1517447132
licenseType: Free
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

393
unity-environment/Assets/ML-Agents/Examples/Banana/BananaImitation.unity


--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 9
serializedVersion: 8
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3

m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0

m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 1
m_LightmapEditorSettings:
serializedVersion: 10
serializedVersion: 9
m_AtlasSize: 1024
m_TextureWidth: 1024
m_TextureHeight: 1024
m_AO: 1
m_AOMaxDistance: 1
m_CompAOExponent: 1

m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ShowResolutionOverlay: 1
m_LightingDataAsset: {fileID: 112000002, guid: 03723c7f910c3423aa1974f1b9ce8392,
type: 2}
m_UseShadowmask: 1

m_Name:
m_EditorClassIdentifier:
brainParameters:
stateSize: 53
stackedStates: 3
actionSize: 3
memorySize: 0
vectorObservationSize: 53
numStackedVectorObservations: 3
vectorActionSize: 3
actionDescriptions:
vectorActionDescriptions:
actionSpaceType: 1
stateSpaceType: 1
vectorActionSpaceType: 1
vectorObservationSpaceType: 1
- {fileID: 837526513}
- {fileID: 1156835980}
- {fileID: 120402570}
- {fileID: 1137703574}
instanceID: 26830
- {fileID: 1538733473}
- {fileID: 1988528433}
- {fileID: 2036486102}
- {fileID: 1091684600}
instanceID: 48736
--- !u!114 &7561200
MonoBehaviour:
m_ObjectHideFlags: 0

m_PrefabParentObject: {fileID: 4978301839030222, guid: c7684b8f068694edb9b432c4a427e36d,
type: 2}
m_PrefabInternal: {fileID: 93417038}
--- !u!114 &120402570
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 7561199}
--- !u!1 &192430538
GameObject:
m_ObjectHideFlags: 0

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 71a5608933f7d414b998d092ce8d98c3, type: 2}
m_StaticBatchInfo:

m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 330713543}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!114 &338583591
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
graphModel: {fileID: 4900000, guid: 2671f35d7452742cb9f019fb5e30d682, type: 3}
graphScope:
graphPlaceholders:
- name: epsilon
valueType: 1
minValue: -0.5
maxValue: 0.5
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName: []
ActionPlaceholderName: action
brain: {fileID: 7561199}
--- !u!1 &378228137
GameObject:
m_ObjectHideFlags: 0

value: 4
defaultAction: 0
brain: {fileID: 749820610}
--- !u!114 &712078729
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 2015024680}
--- !u!1 &749820607
GameObject:
m_ObjectHideFlags: 0

m_Name:
m_EditorClassIdentifier:
brainParameters:
stateSize: 53
stackedStates: 1
actionSize: 3
memorySize: 0
vectorObservationSize: 1
numStackedVectorObservations: 1
vectorActionSize: 1
actionDescriptions:
-
-
-
actionSpaceType: 1
stateSpaceType: 1
vectorActionDescriptions: []
vectorActionSpaceType: 0
vectorObservationSpaceType: 1
brainType: 0
CoreBrains:
- {fileID: 574935448}

m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 45, y: 45, z: 0}
--- !u!114 &787590871
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
brain: {fileID: 7561199}
--- !u!114 &837526513
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
continuousPlayerActions:
- key: 119
index: 0
value: 1
- key: 97
index: 1
value: -1
- key: 100
index: 1
value: 1
- key: 32
index: 2
value: 1
- key: 115
index: 0
value: -1
discretePlayerActions:
- key: 119
value: 1
- key: 32
value: 2
- key: 97
value: 3
- key: 100
value: 4
defaultAction: 0
brain: {fileID: 7561199}
--- !u!1 &844811898
GameObject:
m_ObjectHideFlags: 0

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: de088c15c5e19472981198726aca0baa, type: 2}
m_IsPrefabParent: 0
--- !u!114 &1037320272
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
brain: {fileID: 7561199}
--- !u!114 &1081143885
MonoBehaviour:
m_ObjectHideFlags: 0

value: 4
defaultAction: 0
brain: {fileID: 7561199}
--- !u!114 &1137703574
--- !u!114 &1091684600
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}

m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
graphModel: {fileID: 4900000, guid: 2671f35d7452742cb9f019fb5e30d682, type: 3}

ObservationPlaceholderName: []
ActionPlaceholderName: action
brain: {fileID: 7561199}
--- !u!114 &1156835980
--- !u!114 &1137703574
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}

m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
graphModel: {fileID: 4900000, guid: 2671f35d7452742cb9f019fb5e30d682, type: 3}
graphScope:
graphPlaceholders:
- name: epsilon
valueType: 1
minValue: -0.5
maxValue: 0.5
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName: []
ActionPlaceholderName: action
brain: {fileID: 7561199}
--- !u!1 &1196437247
GameObject:

m_Name:
m_EditorClassIdentifier:
brainParameters:
stateSize: 53
stackedStates: 1
actionSize: 3
memorySize: 0
vectorObservationSize: 1
numStackedVectorObservations: 1
vectorActionSize: 1
actionDescriptions:
-
-
-
actionSpaceType: 1
stateSpaceType: 1
vectorActionDescriptions: []
vectorActionSpaceType: 0
vectorObservationSpaceType: 1
brainType: 2
CoreBrains:
- {fileID: 1081143885}

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 89f7d13576c6e4dca869ab9230b27995, type: 2}
m_StaticBatchInfo:

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 89f7d13576c6e4dca869ab9230b27995, type: 2}
m_StaticBatchInfo:

m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1478651500}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!114 &1538733473
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
continuousPlayerActions:
- key: 119
index: 0
value: 1
- key: 97
index: 1
value: -1
- key: 100
index: 1
value: 1
- key: 32
index: 2
value: 1
- key: 115
index: 0
value: -1
discretePlayerActions:
- key: 119
value: 1
- key: 32
value: 2
- key: 97
value: 3
- key: 100
value: 4
defaultAction: 0
brain: {fileID: 7561199}
--- !u!1 &1570348456
GameObject:
m_ObjectHideFlags: 0

m_Name:
m_EditorClassIdentifier:
maxSteps: 4000
frameToSkip: 3
waitTime: 0
isInference: 1
trainingConfiguration:
width: 500

qualityLevel: 5
timeScale: 1
targetFrameRate: 60
defaultResetParameters: []
done: 0
maxStepReached: 0
resetParameters:
resetParameters: []
currentStep: 0
stepsSinceReset: 0
agents: []
listArea: []
totalScore: 0

m_Father: {fileID: 0}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1596747894
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
continuousPlayerActions:
- key: 119
index: 0
value: 1
- key: 97
index: 1
value: -1
- key: 100
index: 1
value: 1
- key: 32
index: 2
value: 1
- key: 115
index: 0
value: -1
discretePlayerActions:
- key: 119
value: 1
- key: 32
value: 2
- key: 97
value: 3
- key: 100
value: 4
defaultAction: 0
brain: {fileID: 2015024680}
--- !u!1001 &1603057756
Prefab:
m_ObjectHideFlags: 0

m_PrefabParentObject: {fileID: 4857897180819430, guid: c991009c529854b479276bdb1c5f962e,
type: 2}
m_PrefabInternal: {fileID: 1666412379}
--- !u!114 &1748400633
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
continuousPlayerActions:
- key: 119
index: 0
value: 1
- key: 97
index: 1
value: -1
- key: 100
index: 1
value: 1
- key: 32
index: 2
value: 1
- key: 115
index: 0
value: -1
discretePlayerActions:
- key: 119
value: 1
- key: 32
value: 2
- key: 97
value: 3
- key: 100
value: 4
defaultAction: 0
brain: {fileID: 7561199}
--- !u!1 &1799584680
GameObject:
m_ObjectHideFlags: 0

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 89f7d13576c6e4dca869ab9230b27995, type: 2}
m_StaticBatchInfo:

m_PrefabParentObject: {fileID: 4086859656263244, guid: de088c15c5e19472981198726aca0baa,
type: 2}
m_PrefabInternal: {fileID: 991769960}
--- !u!114 &1988528433
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
brain: {fileID: 7561199}
--- !u!1 &2015024677
GameObject:
m_ObjectHideFlags: 0

m_Name:
m_EditorClassIdentifier:
brainParameters:
stateSize: 53
stackedStates: 3
actionSize: 3
memorySize: 0
vectorObservationSize: 53
numStackedVectorObservations: 3
vectorActionSize: 3
actionDescriptions:
vectorActionDescriptions:
actionSpaceType: 1
stateSpaceType: 1
vectorActionSpaceType: 1
vectorObservationSpaceType: 1
- {fileID: 1748400633}
- {fileID: 787590871}
- {fileID: 712078729}
- {fileID: 1137703574}
instanceID: 28390
- {fileID: 1596747894}
- {fileID: 1037320272}
- {fileID: 2136576395}
- {fileID: 338583591}
instanceID: 50300
--- !u!114 &2019780744
MonoBehaviour:
m_ObjectHideFlags: 0

m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 7561199}
--- !u!114 &2036486102
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 7561199}
--- !u!1 &2038164702
GameObject:
m_ObjectHideFlags: 0

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 89f7d13576c6e4dca869ab9230b27995, type: 2}
m_StaticBatchInfo:

m_EditorClassIdentifier:
broadcast: 1
brain: {fileID: 7561199}
--- !u!114 &2136576395
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 2015024680}

540
unity-environment/Assets/ML-Agents/Examples/Banana/BananaRL.unity


--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 9
serializedVersion: 8
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3

m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0

m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 1
m_LightmapEditorSettings:
serializedVersion: 10
serializedVersion: 9
m_AtlasSize: 1024
m_TextureWidth: 1024
m_TextureHeight: 1024
m_AO: 1
m_AOMaxDistance: 1
m_CompAOExponent: 1

m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ShowResolutionOverlay: 1
m_LightingDataAsset: {fileID: 112000002, guid: 03723c7f910c3423aa1974f1b9ce8392,
type: 2}
m_UseShadowmask: 1

m_Name:
m_EditorClassIdentifier:
brainParameters:
stateSize: 53
stackedStates: 3
actionSize: 3
memorySize: 0
vectorObservationSize: 53
numStackedVectorObservations: 3
vectorActionSize: 3
actionDescriptions:
vectorActionDescriptions:
actionSpaceType: 1
stateSpaceType: 1
vectorActionSpaceType: 1
vectorObservationSpaceType: 1
- {fileID: 495637252}
- {fileID: 952426370}
- {fileID: 1984397056}
- {fileID: 56442270}
instanceID: 41188
- {fileID: 354126811}
- {fileID: 40955824}
- {fileID: 1785615398}
- {fileID: 1447476715}
instanceID: 59456
--- !u!114 &7561200
MonoBehaviour:
m_ObjectHideFlags: 0

m_Script: {fileID: 11500000, guid: c0205d4e23c794363ba1d78b1e3d7339, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!114 &11189749
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 0
continuousPlayerActions:
- key: 119
index: 0
value: 1
- key: 97
index: 1
value: -1
- key: 100
index: 1
value: 1
- key: 32
index: 2
value: 1
discretePlayerActions:
- key: 119
value: 1
- key: 32
value: 2
- key: 97
value: 3
- key: 100
value: 4
defaultAction: 0
brain: {fileID: 1332313144}
--- !u!114 &56442270
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
graphModel: {fileID: 4900000, guid: db9ad5b2ab0ea40f5ba38cfbd819acb6, type: 3}
graphScope:
graphPlaceholders: []
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName: []
ActionPlaceholderName: action
brain: {fileID: 7561199}
--- !u!114 &186485641
--- !u!114 &40955824
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}

m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
--- !u!114 &215913392
--- !u!114 &146879495
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}

m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
broadcast: 1
graphModel: {fileID: 4900000, guid: 02069b74d429b43baa2153891a80e267, type: 3}
graphScope:
graphPlaceholders:
- name: epsilon
valueType: 1
minValue: 0
maxValue: 0
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName: []
ActionPlaceholderName: action
brain: {fileID: 1332313144}
--- !u!114 &241220484
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
brain: {fileID: 7561199}
brain: {fileID: 2142382132}
--- !u!1 &273651478
GameObject:
m_ObjectHideFlags: 0

m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 273651478}
--- !u!114 &276392494
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
continuousPlayerActions:
- key: 119
index: 0
value: 1
- key: 97
index: 1
value: -1
- key: 100
index: 1
value: 1
- key: 32
index: 2
value: 1
- key: 115
index: 0
value: -1
discretePlayerActions:
- key: 119
value: 1
- key: 32
value: 2
- key: 97
value: 3
- key: 100
value: 4
defaultAction: 0
brain: {fileID: 7561199}
--- !u!1 &330713543
GameObject:
m_ObjectHideFlags: 0

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 71a5608933f7d414b998d092ce8d98c3, type: 2}
m_StaticBatchInfo:

m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 330713543}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!114 &354126811
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
continuousPlayerActions:
- key: 119
index: 0
value: 1
- key: 97
index: 1
value: -1
- key: 100
index: 1
value: 1
- key: 32
index: 2
value: 1
- key: 115
index: 0
value: -1
discretePlayerActions:
- key: 119
value: 1
- key: 32
value: 2
- key: 97
value: 3
- key: 100
value: 4
defaultAction: 0
brain: {fileID: 7561199}
--- !u!1 &378228137
GameObject:
m_ObjectHideFlags: 0

m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 0}
--- !u!114 &466564727
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 2142382132}
--- !u!114 &495637252
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
continuousPlayerActions:
- key: 119
index: 0
value: 1
- key: 97
index: 1
value: -1
- key: 100
index: 1
value: 1
- key: 32
index: 2
value: 1
- key: 115
index: 0
value: -1
discretePlayerActions:
- key: 119
value: 1
- key: 32
value: 2
- key: 97
value: 3
- key: 100
value: 4
defaultAction: 0
brain: {fileID: 7561199}
--- !u!1 &499540684
GameObject:
m_ObjectHideFlags: 0

m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 45, y: 45, z: 0}
--- !u!114 &787950881
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 0
continuousPlayerActions:
- key: 119
index: 0
value: 1
- key: 97
index: 1
value: -1
- key: 100
index: 1
value: 1
- key: 32
index: 2
value: 1
discretePlayerActions:
- key: 119
value: 1
- key: 32
value: 2
- key: 97
value: 3
- key: 100
value: 4
defaultAction: 0
brain: {fileID: 1332313144}
--- !u!1 &844811898
GameObject:
m_ObjectHideFlags: 0

m_Father: {fileID: 1812954964}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0}
--- !u!114 &952426370
--- !u!114 &985054487
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}

m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
graphModel: {fileID: 4900000, guid: 02069b74d429b43baa2153891a80e267, type: 3}
graphScope:
graphPlaceholders:
- name: epsilon
valueType: 1
minValue: 0
maxValue: 0
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName: []
ActionPlaceholderName: action
brain: {fileID: 1332313144}
--- !u!114 &1003931466
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 7561199}
--- !u!1 &1009000883
GameObject:

m_AnchoredPosition: {x: -391.37125, y: -239.57645}
m_SizeDelta: {x: 160, y: 30}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1137703574
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
graphModel: {fileID: 4900000, guid: db9ad5b2ab0ea40f5ba38cfbd819acb6, type: 3}
graphScope:
graphPlaceholders: []
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName: []
ActionPlaceholderName: action
brain: {fileID: 7561199}
--- !u!1001 &1209372599
Prefab:
m_ObjectHideFlags: 0

propertyPath: goodMaterial
value:
objectReference: {fileID: 2100000, guid: 8172bbc45544341beb1c63c52c91c3b7, type: 2}
- target: {fileID: 1302727675274720, guid: 95a35afee6ce546a5bb9ed8306dce489, type: 2}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 95a35afee6ce546a5bb9ed8306dce489, type: 2}
m_IsPrefabParent: 0

m_Name:
m_EditorClassIdentifier:
brainParameters:
stateSize: 51
stackedStates: 4
actionSize: 3
memorySize: 0
vectorObservationSize: 1
numStackedVectorObservations: 1
vectorActionSize: 1
actionDescriptions:
-
-
vectorActionDescriptions:
actionSpaceType: 1
stateSpaceType: 1
vectorActionSpaceType: 0
vectorObservationSpaceType: 1
- {fileID: 11189749}
- {fileID: 186485641}
- {fileID: 1770222656}
- {fileID: 215913392}
instanceID: 956816
- {fileID: 787950881}
- {fileID: 1826036420}
- {fileID: 1003931466}
- {fileID: 985054487}
instanceID: 59558
--- !u!1 &1439464260
GameObject:
m_ObjectHideFlags: 0

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 89f7d13576c6e4dca869ab9230b27995, type: 2}
m_StaticBatchInfo:

m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1439464260}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!114 &1447476715
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
graphModel: {fileID: 4900000, guid: db9ad5b2ab0ea40f5ba38cfbd819acb6, type: 3}
graphScope:
graphPlaceholders: []
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName: []
ActionPlaceholderName: action
brain: {fileID: 7561199}
--- !u!1 &1478651500
GameObject:
m_ObjectHideFlags: 0

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 89f7d13576c6e4dca869ab9230b27995, type: 2}
m_StaticBatchInfo:

m_Name:
m_EditorClassIdentifier:
maxSteps: 1500
frameToSkip: 3
waitTime: 0
isInference: 1
trainingConfiguration:
width: 500

qualityLevel: 5
timeScale: 1
targetFrameRate: 60
defaultResetParameters: []
done: 0
maxStepReached: 0
resetParameters:
resetParameters: []
currentStep: 0
stepsSinceReset: 0
agents: []
listArea: []
totalScore: 0

m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1770222656
--- !u!114 &1575219255
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
continuousPlayerActions:
- key: 119
index: 0
value: 1
- key: 97
index: 1
value: -1
- key: 100
index: 1
value: 1
- key: 32
index: 2
value: 1
- key: 115
index: 0
value: -1
discretePlayerActions:
- key: 119
value: 1
- key: 32
value: 2
- key: 97
value: 3
- key: 100
value: 4
defaultAction: 0
brain: {fileID: 7561199}
--- !u!114 &1779545192
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
graphModel: {fileID: 4900000, guid: db9ad5b2ab0ea40f5ba38cfbd819acb6, type: 3}
graphScope:
graphPlaceholders: []
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName: []
ActionPlaceholderName: action
brain: {fileID: 7561199}
--- !u!114 &1785615398
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}

m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 7561199}
--- !u!1 &1799584680

m_Father: {fileID: 0}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1826036420
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
brain: {fileID: 7561199}
--- !u!1 &1859434460
GameObject:
m_ObjectHideFlags: 0

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 89f7d13576c6e4dca869ab9230b27995, type: 2}
m_StaticBatchInfo:

m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1859434460}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!114 &1984397056
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 7561199}
--- !u!1 &2038164702
GameObject:
m_ObjectHideFlags: 0

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 89f7d13576c6e4dca869ab9230b27995, type: 2}
m_StaticBatchInfo:

m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 2038164702}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!114 &2041961576
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
brain: {fileID: 7561199}
--- !u!1 &2142382129
GameObject:
m_ObjectHideFlags: 0

m_Name:
m_EditorClassIdentifier:
brainParameters:
stateSize: 0
stackedStates: 1
actionSize: 3
memorySize: 0
vectorObservationSize: 1
numStackedVectorObservations: 1
vectorActionSize: 1
cameraResolutions:
- width: 84
height: 84

blackAndWhite: 0
actionDescriptions:
-
-
vectorActionDescriptions:
actionSpaceType: 1
stateSpaceType: 1
vectorActionSpaceType: 0
vectorObservationSpaceType: 1
- {fileID: 276392494}
- {fileID: 241220484}
- {fileID: 466564727}
- {fileID: 1137703574}
instanceID: 956930
- {fileID: 1575219255}
- {fileID: 2041961576}
- {fileID: 146879495}
- {fileID: 1779545192}
instanceID: 59630

56
unity-environment/Assets/ML-Agents/Examples/Banana/Prefabs/Agent 1.prefab


m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!1 &1383742658523140
GameObject:
m_ObjectHideFlags: 0

m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
m_IsActive: 1
--- !u!1 &1704394537339112
GameObject:
m_ObjectHideFlags: 0

m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1302727675274720}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -34.2, y: 2, z: -9.559753}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -42.213173, y: 2, z: -9.559753}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 4374955212925988}

m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1668888810723470}
m_LocalRotation: {x: 0.2164396, y: 0, z: 0, w: 0.97629607}
m_LocalPosition: {x: 0, y: 10, z: -15}
m_LocalRotation: {x: 0.13052616, y: 0, z: 0, w: 0.9914449}
m_LocalPosition: {x: 0, y: 5, z: -10}
m_LocalEulerAnglesHint: {x: 25, y: 0, z: 0}
m_LocalEulerAnglesHint: {x: 15, y: 0, z: 0}
--- !u!4 &4508840079990288
Transform:
m_ObjectHideFlags: 1

m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_StereoMirrorMode: 0
--- !u!23 &23279293383186890
MeshRenderer:
m_ObjectHideFlags: 1

m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Name:
m_EditorClassIdentifier:
brain: {fileID: 0}
observations: []
maxStep: 0
resetOnDone: 1
state: []
stackedStates: []
reward: 0
done: 0
value: 0
CumulativeReward: 0
stepCounter: 0
agentStoredAction: []
memory: []
id: 0
agentParameters:
agentCameras: []
maxStep: 0
resetOnDone: 1
eventBased: 0
numberOfStepsBetweenActions: 1
numberOfActionsBetweenDecisions: 4
area: {fileID: 0}
turnSpeed: 150
xForce: 125

161
unity-environment/Assets/ML-Agents/Examples/Banana/Prefabs/AreaPB.prefab
文件差异内容过多而无法显示
查看文件

33
unity-environment/Assets/ML-Agents/Examples/Banana/Scripts/BananaAgent.cs


myAcademy = myAcademyObj.GetComponent<BananaAcademy>();
}
public override List<float> CollectState()
public override void CollectObservations()
state = RayPerception(state, rayDistance, rayAngles, detectableObjects);
RayPerception(rayDistance, rayAngles, detectableObjects);
state.Add(localVelocity.x);
state.Add(localVelocity.z);
state.Add(System.Convert.ToInt32(frozen));
state.Add(System.Convert.ToInt32(shoot));
return state;
AddVectorObs(localVelocity.x);
AddVectorObs(localVelocity.z);
AddVectorObs(System.Convert.ToInt32(frozen));
AddVectorObs(System.Convert.ToInt32(shoot));
public List<float> RayPerception(List<float> state, float rayDistance,
float[] rayAngles, string[] detectableObjects)
{
public void RayPerception(float rayDistance, float[] rayAngles, string[] detectableObjects) {
foreach (float angle in rayAngles)
{
float noise = 0f;

{
subList[detectableObjects.Length] = 1f;
}
state.AddRange(new List<float>(subList));
foreach (float f in subList)
AddVectorObs(f);
return state;
}
public Vector3 GiveCatersian(float radius, float angle)

gameObject.GetComponent<Renderer>().material.color = Color.black;
}
void Unfreeze()
{
frozen = false;

public override void AgentStep(float[] act)
public override void AgentAction(float[] act)
{
MoveAgent(act);
}

{
Satiate();
collision.gameObject.GetComponent<BananaLogic>().OnEaten();
reward += 1f;
AddReward(1f);
bananas += 1;
if (contribute)
{

{
Poison();
collision.gameObject.GetComponent<BananaLogic>().OnEaten();
reward -= 1f;
AddReward(-1f);
if (contribute)
{
myAcademy.totalScore -= 1;

{
done = true;
Done();
}
}

6
unity-environment/Assets/ML-Agents/Examples/Basic.meta


fileFormatVersion: 2
guid: 230c334ab2f144bcda6eea42d18ebdc8
guid: d289c718ca5a54cdfae185081c259106
timeCreated: 1506189168
licenseType: Pro
timeCreated: 1517447132
licenseType: Free
DefaultImporter:
userData:
assetBundleName:

203
unity-environment/Assets/ML-Agents/Examples/Basic/Scene.unity


--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 9
serializedVersion: 8
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3

m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0

m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 1
m_LightmapEditorSettings:
serializedVersion: 10
serializedVersion: 9
m_AtlasSize: 1024
m_TextureWidth: 1024
m_TextureHeight: 1024
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1

m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ShowResolutionOverlay: 1
m_LightingDataAsset: {fileID: 0}
m_UseShadowmask: 1
--- !u!196 &4

debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!114 &223707724
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
brain: {fileID: 0}
--- !u!1 &282272644
GameObject:
m_ObjectHideFlags: 0

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 260483cdfc6b14e26823a02f23bd8baa, type: 2}
m_StaticBatchInfo:

m_Name:
m_EditorClassIdentifier:
brain: {fileID: 846768605}
observations: []
maxStep: 0
resetOnDone: 1
state: []
stackedStates: []
reward: 0
done: 0
maxStepReached: 0
value: 0
CumulativeReward: 0
agentStoredAction: []
memory: []
id: 0
agentParameters:
agentCameras: []
maxStep: 0
resetOnDone: 1
onDemandDecision: 0
numberOfActionsBetweenDecisions: 1
position: 0
smallGoalPosition: -3
largeGoalPosition: 7

maxPosition: 10
--- !u!114 &718270126
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 846768605}
--- !u!1 &762086410
GameObject:
m_ObjectHideFlags: 0

m_Name:
m_EditorClassIdentifier:
brainParameters:
stateSize: 20
stackedStates: 1
actionSize: 2
memorySize: 0
vectorObservationSize: 20
numStackedVectorObservations: 1
vectorActionSize: 2
actionDescriptions:
- Left
- Right
actionSpaceType: 0
stateSpaceType: 0
brainType: 3
vectorActionDescriptions:
-
-
vectorActionSpaceType: 0
vectorObservationSpaceType: 0
brainType: 2
- {fileID: 968741156}
- {fileID: 223707724}
- {fileID: 718270126}
- {fileID: 1383558892}
instanceID: 12322
--- !u!114 &968741156
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
continuousPlayerActions: []
discretePlayerActions:
- key: 97
value: 0
- key: 100
value: 1
defaultAction: -1
brain: {fileID: 846768605}
- {fileID: 2141825928}
- {fileID: 2140501711}
- {fileID: 1624095040}
- {fileID: 1983091511}
instanceID: 11064
--- !u!1 &984725368
GameObject:
m_ObjectHideFlags: 0

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 624b24bbec31f44babfb57ef2dfbc537, type: 2}
m_StaticBatchInfo:

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 624b24bbec31f44babfb57ef2dfbc537, type: 2}
m_StaticBatchInfo:

m_Father: {fileID: 0}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1383558892
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
graphModel: {fileID: 4900000, guid: 07e40c2d0871b4e989b41d1b8519fb93, type: 3}
graphScope:
graphPlaceholders: []
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName: []
ActionPlaceholderName: action
brain: {fileID: 846768605}
--- !u!1 &1574236047
GameObject:
m_ObjectHideFlags: 0

m_Name:
m_EditorClassIdentifier:
maxSteps: 0
frameToSkip: 0
waitTime: 0.5
isInference: 0
trainingConfiguration:
width: 80

qualityLevel: 5
timeScale: 1
targetFrameRate: 60
defaultResetParameters: []
done: 0
maxStepReached: 0
resetParameters:
resetParameters: []
currentStep: 0
stepsSinceReset: 0
--- !u!4 &1574236049
Transform:
m_ObjectHideFlags: 0

m_Father: {fileID: 0}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1624095040
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 846768605}
--- !u!1 &1715640920
GameObject:
m_ObjectHideFlags: 0

m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1983091511
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
graphModel: {fileID: 4900000, guid: 07e40c2d0871b4e989b41d1b8519fb93, type: 3}
graphScope:
graphPlaceholders: []
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName: []
ActionPlaceholderName: action
brain: {fileID: 846768605}
--- !u!114 &2140501711
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
brain: {fileID: 0}
--- !u!114 &2141825928
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
continuousPlayerActions: []
discretePlayerActions:
- key: 97
value: 0
- key: 100
value: 1
defaultAction: -1
brain: {fileID: 846768605}

17
unity-environment/Assets/ML-Agents/Examples/Basic/Scripts/BasicAgent.cs


public int minPosition;
public int maxPosition;
public override List<float> CollectState()
public override void CollectObservations()
state.Add(position);
return state;
AddVectorObs(position);
public override void AgentStep(float[] act)
public override void AgentAction(float[] act)
{
float movement = act[0];
int direction = 0;

gameObject.transform.position = new Vector3(position, 0f, 0f);
reward -= 0.01f;
AddReward( - 0.01f);
done = true;
reward = 0.1f;
Done();
AddReward( 0.1f);
done = true;
reward = 1f;
Done();
AddReward(1f);
}
}

6
unity-environment/Assets/ML-Agents/Examples/Basic/Scripts/BasicDecision.cs


public class BasicDecision : MonoBehaviour, Decision
{
public float[] Decide(List<float> state, List<Camera> observation, float reward, bool done, float[] memory)
public float[] Decide(List<float> state, List<Texture2D> observation, float reward, bool done, List<float> memory)
public float[] MakeMemory(List<float> state, List<Camera> observation, float reward, bool done, float[] memory)
public List<float> MakeMemory(List<float> state, List<Texture2D> observation, float reward, bool done, List<float> memory)
return new float[0];
return new List<float>();
}
}

22
unity-environment/Assets/ML-Agents/Examples/Basic/TFModels/Basic.bytes


DstT0
F
OneHotEncoding/one_hot/depthConst*
value B:*
value B:*
dtype0
L
OneHotEncoding/one_hot/on_valueConst*

axis ���������*
T0*
TI0
�
dtype0*�
value� B� "� �6;�M>،>Iv>��g�ܿ��˾łT�`�>>aP�= ��=�U�>Z+����;A���HE���+y>�� ����/��=�H�>(����� ;F��>i�� �#���'<n�n�M�P?�p�=��z>^��>�����>K)>�>���>�b�&d����>/-�>��T�>�]z>�/���m(�ĵ-�W��e�E��>Y�"?���=�����??cx=t"ڽ)�?{��^�վ���=�B
==Y�=O?��k=�i��O�$��)���1��"��9 >� ?c��>��>Z�> ��0Ly���>>�l��g
����>�?g�˾���>�?X>+�o;�_8>aC��_ ����>��'>#?���>7���'�>����Q�����?���������"7n>IL⾒\?��=m��fqO� t�>8����>���>��=?�l>DY>,qD?'����~ھ��?_���ƥ$��/h=�?"#>Q��=i���G���}����S�-�Խ���=_��� S?�>�ξrVA?�a����B��;^?�/�ˉ��W�a�: ����>$��]`��po >��J��¾����<ք=�+=�M��Z�>��>�����N[>)�ľ�6��̠>)���L�<���> ����)>��B����>p�e>~�(�DȨ=� z>(�����>~�>ޞ�>l��>�uk=�ST>h0�=q������>@���`B ��>��>�t
����=��u>�T>8�=�=�����Ϛ=�VT���r=��>lZ*>��>��:>��m>]y��T����ݐ�Ȥ��9���C�>RT�>�[
> #����>`�L<l��>�"�l�K>� =�ϧ�� u����i��x�Y�vG��0��<�bz�
����'>�_��k>���<�>&.>xA�=���=F��� -2>�k��M9��>@� =0�c�t�F>P�w>G>d�>>���y�����>�%���]&�@�M�9ꋾ$ 5>s岾�v�>�x� �> {=Fչ�N����a]�5�s����>���=�⦾�W���Π=^���>��!��3���"=�Q>`�_>p\�<쎧>Fڒ>B���I=ĉ>NH�>���o�ri����!��ƭ>4_�>T�>�뮾T��>���vB�� ��nt��nF��=��T>P&�=��i�8ӛ>����`�5>��h���=�2����M�u����4�=@x���F�=�3>��&�`r��<��>,�}>����P�)��᷾Լa>8��>`��>t��Z��>�J�uR���=���y�=i�r��F�S巾�^G>� ����>�{��|U�=�\��F�H �>b#���{>�b�=(� =x��=����4�>��8���@+�����g�>js�@����E����>�D�>0��(,>8�ؽ|���,����J��9_ � �>qF=��(��N=�6����ſ>� 9>,��>�0�uf��D����>�d�;�&C���q�Ӌ��}�N����>�To��᪾A����F��|�>�� >d)�>�Y�����>�0�>�6H>�>x�=X%= ⹾',�����>�VҽP9���ed>��]>���
dtype0*i
value`B^"P�>�H�>Uý=�Խ�, ?7��>.F��W�>�A�>9�Ӿ�ƪ>����7�=��>�|R�=��F��;[����=]��>E/��
U
dense/kernel/readIdentity dense/kernel*
T0*

�
dense_1/kernelConst*
dtype0*�
value�B�"��2� �-?���>�֮�!C���?Ő�� �>F�.?�S8�9h?=C��<?�D
�b�?I��-���p�>�(�����>jXL��T?MO�1??���>��۾�|K�^J?9>XC�s2�>����4Q:��:&?�t?y%��{d?3�c�X⣾�Z�>
value�B�"�팼��?l=S����L�=��=)������=�J���� �sm�=ےս��>�>aQw��DܽJ��=݇����=Ū>�Ұ�Dn��Wv�=�>u���rlѽ">�O�=Q��&q���۵=��{=/�⽑S�=�S佦�̽���=r�ǽ.dz=6>V���
[
dense_1/kernel/readIdentitydense_1/kernel*
T0*!

dtype0

multinomial/Multinomial Multinomialdense_2/MatMul#multinomial/Multinomial/num_samples*
seed��7*
seed��*
seed20*
T0
4

dense_2/kernelConst*
dtype0*i
value`B^"P)S�>�؍��$�>~�װ�;��ڽ�1?�1�9���̙�=�.>�]�>���=��K��� �٠�� 㾽U~�eO!>
value`B^"PUi�>�I'��9��ؾx1��k��-r����E����>l����=�1f���u��x�R�t`��A������=x��XH>�X?
[
dense_2/kernel/readIdentitydense_2/kernel*
T0*!

dense_2/biasConst*
dtype0*
valueB*΄v>
valueB*�>
U
dense_2/bias/readIdentity dense_2/bias*
T0*

4
unity-environment/Assets/ML-Agents/Examples/Crawler.meta


fileFormatVersion: 2
guid: 0efc731e39fd04495bee94884abad038
guid: f156237910cf946e78a82c48410fef52
timeCreated: 1509574928
timeCreated: 1517447132
licenseType: Free
DefaultImporter:
userData:

168
unity-environment/Assets/ML-Agents/Examples/Crawler/Crawler.unity


m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0.4465934, g: 0.49642956, b: 0.5748249, a: 1}
m_IndirectSpecularColor: {r: 0.4465785, g: 0.49641252, b: 0.574817, a: 1}
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0

debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!114 &140901381
--- !u!114 &313967998
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}

m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
continuousPlayerActions:
- key: 101
index: 0
value: -1
- key: 101
index: 1
value: -1
- key: 101
index: 2
value: -1
- key: 101
index: 3
value: -1
- key: 114
index: 3
value: 1
- key: 116
index: 11
value: -1
- key: 100
index: 1
value: 1
- key: 119
index: 7
value: -1
discretePlayerActions: []
defaultAction: 0
brain: {fileID: 393360180}
--- !u!1 &393360178
GameObject:

m_Name:
m_EditorClassIdentifier:
brainParameters:
stateSize: 117
actionSize: 12
memorySize: 0
vectorObservationSize: 117
numStackedVectorObservations: 1
vectorActionSize: 12
actionDescriptions:
vectorActionDescriptions:
-
-
-

-
-
-
actionSpaceType: 1
stateSpaceType: 1
brainType: 3
vectorActionSpaceType: 1
vectorObservationSpaceType: 1
brainType: 0
- {fileID: 140901381}
- {fileID: 722649573}
- {fileID: 1365757417}
- {fileID: 1527314308}
instanceID: 38818
--- !u!114 &722649573
- {fileID: 907878449}
- {fileID: 313967998}
- {fileID: 638422104}
- {fileID: 1328078536}
instanceID: 92036
--- !u!114 &638422104
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}

m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
broadcast: 1
brain: {fileID: 393360180}
--- !u!1 &847246804
GameObject:

m_Father: {fileID: 0}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &907878449
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
continuousPlayerActions:
- key: 101
index: 0
value: -1
- key: 101
index: 1
value: -1
- key: 101
index: 2
value: -1
- key: 101
index: 3
value: -1
- key: 114
index: 3
value: 1
- key: 116
index: 11
value: -1
- key: 100
index: 1
value: 1
- key: 119
index: 7
value: -1
discretePlayerActions: []
defaultAction: 0
brain: {fileID: 393360180}
--- !u!1001 &941004243
Prefab:
m_ObjectHideFlags: 0

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 3db4283e33af74336bfedb01d0e011bf, type: 2}
m_IsPrefabParent: 0
--- !u!114 &1365757417
--- !u!114 &1328078536
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}

m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
broadcast: 1
graphModel: {fileID: 4900000, guid: 3569492a1961e4abe87b232f5ccaac90, type: 3}
graphScope:
graphPlaceholders:
- name: epsilon
valueType: 1
minValue: -1
maxValue: 1
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName: []
ActionPlaceholderName: action
brain: {fileID: 393360180}
--- !u!1 &1392866527
GameObject:

m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10

m_PrefabParentObject: {fileID: 4491788954268586, guid: 3db4283e33af74336bfedb01d0e011bf,
type: 2}
m_PrefabInternal: {fileID: 1808602249}
--- !u!114 &1527314308
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
graphModel: {fileID: 4900000, guid: 3569492a1961e4abe87b232f5ccaac90, type: 3}
graphScope:
graphPlaceholders:
- name: epsilon
valueType: 1
minValue: -1
maxValue: 1
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName: []
ActionPlaceholderName: action
brain: {fileID: 393360180}
--- !u!1001 &1599453071
Prefab:
m_ObjectHideFlags: 0

m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 114748406422209060, guid: 3db4283e33af74336bfedb01d0e011bf,
type: 2}
propertyPath: observations.Array.size
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4797508036294378, guid: 3db4283e33af74336bfedb01d0e011bf, type: 2}
propertyPath: m_LocalPosition.x
value: 0

m_Name:
m_EditorClassIdentifier:
maxSteps: 0
frameToSkip: 4
waitTime: 0
isInference: 0
trainingConfiguration:
width: 80

qualityLevel: 5
timeScale: 1
targetFrameRate: 60
defaultResetParameters:
- key: steps
value: 0
done: 0
resetParameters:
resetParameters: []
currentStep: 0
stepsSinceReset: 0

37
unity-environment/Assets/ML-Agents/Examples/Crawler/Resources/Crawler.prefab


m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Name:
m_EditorClassIdentifier:
brain: {fileID: 0}
observations:
- {fileID: 0}
maxStep: 1000
resetOnDone: 1
reward: 0
done: 0
value: 0
CumulativeReward: 0
stepCounter: 0
agentStoredAction: []
memory: []
id: 0
agentParameters:
agentCameras: []
maxStep: 1000
resetOnDone: 1
eventBased: 0
numberOfStepsBetweenActions: 1
numberOfActionsBetweenDecisions: 5
strength: 40
leg_touching:
fell: 0

67
unity-environment/Assets/ML-Agents/Examples/Crawler/Scripts/CrawlerAgentConfigurable.cs


}
public override List<float> CollectState()
{
state.Add(body.transform.rotation.eulerAngles.x);
state.Add(body.transform.rotation.eulerAngles.y);
state.Add(body.transform.rotation.eulerAngles.z);
public override void CollectObservations(){
AddVectorObs(body.transform.rotation.eulerAngles.x);
AddVectorObs(body.transform.rotation.eulerAngles.y);
AddVectorObs(body.transform.rotation.eulerAngles.z);
state.Add(body.gameObject.GetComponent<Rigidbody>().velocity.x);
state.Add(body.gameObject.GetComponent<Rigidbody>().velocity.y);
state.Add(body.gameObject.GetComponent<Rigidbody>().velocity.z);
AddVectorObs(body.gameObject.GetComponent<Rigidbody>().velocity.x);
AddVectorObs(body.gameObject.GetComponent<Rigidbody>().velocity.y);
AddVectorObs(body.gameObject.GetComponent<Rigidbody>().velocity.z);
state.Add((body.gameObject.GetComponent<Rigidbody>().velocity.x - past_velocity.x) / Time.fixedDeltaTime);
state.Add((body.gameObject.GetComponent<Rigidbody>().velocity.y - past_velocity.y) / Time.fixedDeltaTime);
state.Add((body.gameObject.GetComponent<Rigidbody>().velocity.z - past_velocity.z) / Time.fixedDeltaTime);
AddVectorObs((body.gameObject.GetComponent<Rigidbody>().velocity.x - past_velocity.x) / Time.fixedDeltaTime);
AddVectorObs((body.gameObject.GetComponent<Rigidbody>().velocity.y - past_velocity.y) / Time.fixedDeltaTime);
AddVectorObs((body.gameObject.GetComponent<Rigidbody>().velocity.z - past_velocity.z) / Time.fixedDeltaTime);
state.Add(t.localPosition.x);
state.Add(t.localPosition.y);
state.Add(t.localPosition.z);
state.Add(t.localRotation.x);
state.Add(t.localRotation.y);
state.Add(t.localRotation.z);
state.Add(t.localRotation.w);
AddVectorObs(t.localPosition.x);
AddVectorObs(t.localPosition.y);
AddVectorObs(t.localPosition.z);
AddVectorObs(t.localRotation.x);
AddVectorObs(t.localRotation.y);
AddVectorObs(t.localRotation.z);
AddVectorObs(t.localRotation.w);
state.Add(rb.velocity.x);
state.Add(rb.velocity.y);
state.Add(rb.velocity.z);
state.Add(rb.angularVelocity.x);
state.Add(rb.angularVelocity.y);
state.Add(rb.angularVelocity.z);
AddVectorObs(rb.velocity.x);
AddVectorObs(rb.velocity.y);
AddVectorObs(rb.velocity.z);
AddVectorObs(rb.angularVelocity.x);
AddVectorObs(rb.angularVelocity.y);
AddVectorObs(rb.angularVelocity.z);
}

{
if (leg_touching[index])
{
state.Add(1.0f);
AddVectorObs(1.0f);
state.Add(0.0f);
AddVectorObs(0.0f);
}
leg_touching[index] = false;
}

return state;
public override void AgentStep(float[] act)
public override void AgentAction(float[] act)
{
for (int k = 0; k < act.Length; k++)
{

+ act[4] * act[4] + act[5] * act[5] + act[6] * act[6] + act[7] * act[7]
+ act[8] * act[8] + act[9] * act[9] + act[10] * act[10] + act[11] * act[11];
if (!done)
if (!IsDone())
reward = (0
SetReward (0
- 0.01f * torque_penalty
+ 1.0f * body.GetComponent<Rigidbody>().velocity.x
- 0.05f * Mathf.Abs(body.transform.position.z - body.transform.parent.transform.position.z)

if (fell)
{
done = true;
reward = -1;
Done();
AddReward(-1);
Monitor.Log("Reward", reward, MonitorType.slider, body.gameObject.transform);
Monitor.Log("Reward", GetReward(), MonitorType.slider, body.gameObject.transform);
Transform[] allChildren = GetComponentsInChildren<Transform>();
foreach (Transform child in allChildren)
{

6
unity-environment/Assets/ML-Agents/Examples/GridWorld.meta


fileFormatVersion: 2
guid: 99fcc6585b4e641d79032e5e1f1d50cd
guid: 4ae2a938a48094ad5ba642af7b6027ea
timeCreated: 1504127603
licenseType: Pro
timeCreated: 1517366517
licenseType: Free
DefaultImporter:
userData:
assetBundleName:

279
unity-environment/Assets/ML-Agents/Examples/GridWorld/GridWorld.unity


--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 9
serializedVersion: 8
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3

m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0.43668893, g: 0.4842832, b: 0.56452656, a: 1}
m_UseRadianceAmbientProbe: 0
m_IndirectSpecularColor: {r: 0.43667555, g: 0.4842717, b: 0.56452394, a: 1}
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0

m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 1
m_LightmapEditorSettings:
serializedVersion: 10
serializedVersion: 9
m_AtlasSize: 1024
m_TextureWidth: 1024
m_TextureHeight: 1024
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1

m_PVRDirectSampleCount: 32
m_PVRSampleCount: 500
m_PVRBounces: 2
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVRFiltering: 0
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ShowResolutionOverlay: 1
m_PVRFilteringAtrousColorSigma: 1
m_PVRFilteringAtrousNormalSigma: 1
m_PVRFilteringAtrousPositionSigma: 1
m_LightingDataAsset: {fileID: 0}
m_UseShadowmask: 0
--- !u!196 &4

manualTileSize: 0
tileSize: 256
accuratePlacement: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &2047662
GameObject:

m_Name:
m_EditorClassIdentifier:
maxSteps: 0
frameToSkip: 0
waitTime: 0
isInference: 0
trainingConfiguration:
width: 84

qualityLevel: 5
timeScale: 1
targetFrameRate: 60
defaultResetParameters:
- key: gridSize
value: 5
- key: numObstacles
value: 1
- key: numGoals
value: 1
done: 0
maxStepReached: 0
resetParameters:
resetParameters:
- key: gridSize
value: 3
- key: numObstacles
value: 1
- key: numGoals
value: 1
currentStep: 0
stepsSinceReset: 0
actorObjs: []
players:
trueAgent: {fileID: 2008405822}

m_Father: {fileID: 0}
m_RootOrder: 6
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &28817903
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 0
graphModel: {fileID: 4900000, guid: 69bc5a8ff4f4b465b8b374d88541c8bd, type: 3}
graphScope:
graphPlaceholders: []
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName:
- observation_0
ActionPlaceholderName: action
brain: {fileID: 1535917239}
--- !u!1 &87755817
GameObject:
m_ObjectHideFlags: 0

m_Lightmapping: 4
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_FalloffTable:
m_Table[0]: 0
m_Table[1]: 0
m_Table[2]: 0
m_Table[3]: 0
m_Table[4]: 0
m_Table[5]: 0
m_Table[6]: 0
m_Table[7]: 0
m_Table[8]: 0
m_Table[9]: 0
m_Table[10]: 0
m_Table[11]: 0
m_Table[12]: 0
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_ShadowRadius: 0

m_TargetEye: 3
m_HDR: 0
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_StereoMirrorMode: 0
--- !u!4 &231883447
Transform:
m_ObjectHideFlags: 0

m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 45, y: 45, z: 0}
--- !u!114 &292993631
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
brain: {fileID: 1535917239}
--- !u!1 &363761396
GameObject:
m_ObjectHideFlags: 0

m_TargetEye: 3
m_HDR: 0
m_AllowMSAA: 0
m_AllowDynamicResolution: 0
m_StereoMirrorMode: 0
--- !u!1 &742849316
GameObject:
m_ObjectHideFlags: 0

m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &806949374
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 1535917239}
--- !u!1 &959566328
GameObject:
m_ObjectHideFlags: 0

m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 214660f4189b04cada2137381f5c3607, type: 2}
m_StaticBatchInfo:

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Father: {fileID: 486401524}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &997290694
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
continuousPlayerActions: []
discretePlayerActions:
- key: 273
value: 0
- key: 274
value: 1
- key: 276
value: 2
- key: 275
value: 3
defaultAction: -1
brain: {fileID: 1535917239}
--- !u!1 &1045409640
GameObject:
m_ObjectHideFlags: 0

m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 214660f4189b04cada2137381f5c3607, type: 2}
m_StaticBatchInfo:

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Father: {fileID: 486401524}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1094263695
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
brain: {fileID: 1535917239}
--- !u!1 &1208586857
GameObject:
m_ObjectHideFlags: 0

m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 8d8e8962a89d44eb28cf1b21b88014ec, type: 2}
m_StaticBatchInfo:

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 0
serializedVersion: 3
serializedVersion: 2
m_CookingOptions: 14
m_InflateMesh: 0
m_SkinWidth: 0.01
m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
--- !u!33 &1208586860

m_Father: {fileID: 486401524}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1384875141
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
continuousPlayerActions: []
discretePlayerActions:
- key: 273
value: 0
- key: 274
value: 1
- key: 276
value: 2
- key: 275
value: 3
defaultAction: -1
brain: {fileID: 1535917239}
--- !u!1 &1535917237
GameObject:
m_ObjectHideFlags: 0

m_Name:
m_EditorClassIdentifier:
brainParameters:
stateSize: 0
stackedStates: 1
actionSize: 4
memorySize: 0
vectorObservationSize: 0
numStackedVectorObservations: 1
vectorActionSize: 4
actionDescriptions:
- Up
- Down
- Left
- Right
actionSpaceType: 0
stateSpaceType: 1
brainType: 3
vectorActionDescriptions:
-
-
-
-
vectorActionSpaceType: 0
vectorObservationSpaceType: 1
brainType: 2
- {fileID: 997290694}
- {fileID: 1094263695}
- {fileID: 2113356186}
- {fileID: 1810907653}
instanceID: 12304
- {fileID: 1384875141}
- {fileID: 292993631}
- {fileID: 806949374}
- {fileID: 28817903}
instanceID: 11072
--- !u!1 &1553342942
GameObject:
m_ObjectHideFlags: 0

m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 214660f4189b04cada2137381f5c3607, type: 2}
m_StaticBatchInfo:

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Father: {fileID: 486401524}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0}
--- !u!114 &1810907653
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 0
graphModel: {fileID: 4900000, guid: 69bc5a8ff4f4b465b8b374d88541c8bd, type: 3}
graphScope:
graphPlaceholders: []
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName:
- observation_0
ActionPlaceholderName: action
brain: {fileID: 1535917239}
--- !u!1 &1938864789
GameObject:
m_ObjectHideFlags: 0

m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 214660f4189b04cada2137381f5c3607, type: 2}
m_StaticBatchInfo:

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Name:
m_EditorClassIdentifier:
brain: {fileID: 1535917239}
observations:
- {fileID: 489340228}
maxStep: 25
resetOnDone: 1
state: []
stackedStates: []
reward: 0
done: 0
maxStepReached: 0
value: 0
CumulativeReward: 0
agentStoredAction: []
memory: []
id: 0
agentParameters:
agentCameras:
- {fileID: 489340228}
maxStep: 100
resetOnDone: 1
onDemandDecision: 0
numberOfActionsBetweenDecisions: 0
--- !u!114 &2113356186
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 1535917239}

2
unity-environment/Assets/ML-Agents/Examples/GridWorld/Resources/agent.prefab


agentStoredAction: []
memory: []
id: 0
academy: {fileID: 0}
academy: {fileID: 0}

18
unity-environment/Assets/ML-Agents/Examples/GridWorld/Scripts/GridAgent.cs


}
public override List<float> CollectState()
public override void CollectObservations()
return state;
public override void AgentStep(float[] act)
public override void AgentAction(float[] act)
reward = -0.01f;
AddReward(-0.01f);
int action = Mathf.FloorToInt(act[0]);
// 0 - Forward, 1 - Backward, 2 - Left, 3 - Right

if (blockTest.Where(col => col.gameObject.tag == "wall").ToArray().Length == 0)
{
transform.position = targetPos;
done = true;
reward = 1;
Done();
SetReward(1f);
done = true;
reward = -1;
Done();
SetReward(-1f);
}
}

32
unity-environment/Assets/ML-Agents/Examples/Hallway/Prefabs/HallwayArea.prefab


m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
m_StaticBatchInfo:

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 3891f240163794c6083c01266cd38351, type: 2}
m_StaticBatchInfo:

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 8c1052704d10a471aae9b294328689cd, type: 2}
m_StaticBatchInfo:

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 260483cdfc6b14e26823a02f23bd8baa, type: 2}
m_StaticBatchInfo:

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: fd56382c5d1a049b6a909c184a4c6d42, type: 2}
m_StaticBatchInfo:

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
m_StaticBatchInfo:

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
m_StaticBatchInfo:

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 3891f240163794c6083c01266cd38351, type: 2}
m_StaticBatchInfo:

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 14324848a330c4217817001de3315e6e, type: 2}
m_StaticBatchInfo:

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 14324848a330c4217817001de3315e6e, type: 2}
m_StaticBatchInfo:

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
m_StaticBatchInfo:

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
m_StaticBatchInfo:

m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: fd56382c5d1a049b6a909c184a4c6d42, type: 2}
m_StaticBatchInfo:

m_Name:
m_EditorClassIdentifier:
brain: {fileID: 0}
observations: []
maxStep: 3000
resetOnDone: 1
state: []
stackedStates: []
reward: 0
done: 0
maxStepReached: 0
value: 0
CumulativeReward: 0
agentStoredAction: []
memory: []
id: 0
agentParameters:
agentCameras: []
maxStep: 0
resetOnDone: 1
onDemandDecision: 0
numberOfActionsBetweenDecisions: 6
ground: {fileID: 1360208130907292}
area: {fileID: 1745841960385024}
goalA: {fileID: 1185286572034058}

27
unity-environment/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayAgent.cs


}
public List<float> RayPerception(List<float> state, float rayDistance,
public void RayPerception(float rayDistance,
float[] rayAngles, string[] detectableObjects, float height)
{
foreach (float angle in rayAngles)

{
subList[detectableObjects.Length] = 1f;
}
state.AddRange(new List<float>(subList));
foreach (float f in subList)
AddVectorObs(f);
return state;
}
public Vector3 GiveCatersian(float radius, float angle)

}
public override List<float> CollectState()
public override void CollectObservations()
state = RayPerception(state, rayDistance, rayAngles, detectableObjects, 0f);
return state;
RayPerception(rayDistance, rayAngles, detectableObjects, 0f);
}
//swap ground material, wait time seconds, then swap back to the regular ground material.

Vector3 rotateDir = Vector3.zero;
//If we're using Continuous control you will need to change the Action
if (brain.brainParameters.actionSpaceType == StateType.continuous)
if (brain.brainParameters.vectorActionSpaceType == StateType.continuous)
{
dirToGo = transform.forward * Mathf.Clamp(act[0], -1f, 1f);
rotateDir = transform.up * Mathf.Clamp(act[1], -1f, 1f);

agentRB.AddForce(dirToGo * academy.agentRunSpeed, ForceMode.VelocityChange); //GO
}
public override void AgentStep(float[] act)
public override void AgentAction(float[] act)
reward -= 0.0003f;
AddReward(-0.0003f);
MoveAgent(act); //perform agent actions
bool fail = false; // did the agent or block get pushed off the edge?

fail = true; //fell off bro
reward -= 1f; // BAD AGENT
AddReward(-1f); // BAD AGENT
done = true; //if we mark an agent as done it will be reset automatically. AgentReset() will be called.
Done(); //if we mark an agent as done it will be reset automatically. AgentReset() will be called.
}
if (fail)

{
if ((selection == 0 && col.gameObject.name == "GoalA") || (selection == 1 && col.gameObject.name == "GoalB"))
{
reward += 1f; //you get 5 points
AddReward(1f); //you get 5 points
reward -= 0.1f; //you lose a point
AddReward(-0.1f); //you lose a point
done = true; //if we mark an agent as done it will be reset automatically. AgentReset() will be called.
Done(); //if we mark an agent as done it will be reset automatically. AgentReset() will be called.
}
}

6
unity-environment/Assets/ML-Agents/Examples/Reacher.meta


fileFormatVersion: 2
guid: 605a889b6a7da4449a954adbd51b3c3b
guid: 826de37788bd1460286b95e84d53b78c
timeCreated: 1508533646
licenseType: Pro
timeCreated: 1517447132
licenseType: Free
DefaultImporter:
userData:
assetBundleName:

30
unity-environment/Assets/ML-Agents/Examples/Reacher/Prefabs/Agent.prefab


m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Name:
m_EditorClassIdentifier:
brain: {fileID: 0}
observations: []
maxStep: 2000
resetOnDone: 1
reward: 0
done: 0
value: 0
CummulativeReward: 0
stepCounter: 0
agentStoredAction: []
memory: []
id: 0
agentParameters:
agentCameras: []
maxStep: 2000
resetOnDone: 1
eventBased: 0
numberOfStepsBetweenActions: 1
numberOfActionsBetweenDecisions: 1
pendulumA: {fileID: 1644872085946016}
pendulumB: {fileID: 1053261483945176}
hand: {fileID: 1654288206095398}

154
unity-environment/Assets/ML-Agents/Examples/Reacher/Scene.unity


m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 762086411}
m_IndirectSpecularColor: {r: 0.4465934, g: 0.49642956, b: 0.5748249, a: 1}
m_IndirectSpecularColor: {r: 0.4465785, g: 0.49641252, b: 0.574817, a: 1}
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0

m_PVRDirectSampleCount: 32
m_PVRSampleCount: 500
m_PVRBounces: 2
m_PVRFiltering: 0
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVRFilteringAtrousColorSigma: 1
m_PVRFilteringAtrousNormalSigma: 1
m_PVRFilteringAtrousPositionSigma: 1
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_LightingDataAsset: {fileID: 0}
m_UseShadowmask: 1
--- !u!196 &4

manualTileSize: 0
tileSize: 256
accuratePlacement: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1001 &103720292
Prefab:

m_PrefabParentObject: {fileID: 1644872085946016, guid: 2f13abef2db804f96bdc7692a1dcf2b2,
type: 2}
m_PrefabInternal: {fileID: 269521201}
--- !u!114 &283234939
--- !u!114 &327113840
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}

m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
graphModel: {fileID: 4900000, guid: 8db6173148a6f4e7fa654ed627c88d7a, type: 3}
graphScope:
graphPlaceholders:
- name: epsilon
valueType: 1
minValue: -1
maxValue: 1
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName: []
ActionPlaceholderName: action
broadcast: 1
continuousPlayerActions: []
discretePlayerActions: []
defaultAction: -1
brain: {fileID: 846768605}
--- !u!1 &330647278
GameObject:

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_PrefabParentObject: {fileID: 1644872085946016, guid: 2f13abef2db804f96bdc7692a1dcf2b2,
type: 2}
m_PrefabInternal: {fileID: 547117383}
--- !u!114 &551611617
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
graphModel: {fileID: 4900000, guid: 8db6173148a6f4e7fa654ed627c88d7a, type: 3}
graphScope:
graphPlaceholders:
- name: epsilon
valueType: 1
minValue: -1
maxValue: 1
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName: []
ActionPlaceholderName: action
brain: {fileID: 846768605}
--- !u!1001 &591860098
Prefab:
m_ObjectHideFlags: 0

m_Name:
m_EditorClassIdentifier:
brainParameters:
stateSize: 26
actionSize: 4
memorySize: 0
vectorObservationSize: 26
numStackedVectorObservations: 1
vectorActionSize: 4
actionDescriptions:
vectorActionDescriptions:
actionSpaceType: 1
stateSpaceType: 1
brainType: 3
vectorActionSpaceType: 1
vectorObservationSpaceType: 1
brainType: 0
- {fileID: 1245896433}
- {fileID: 1028697498}
- {fileID: 2043793749}
- {fileID: 283234939}
instanceID: 238840
- {fileID: 327113840}
- {fileID: 1028133595}
- {fileID: 1146467767}
- {fileID: 551611617}
instanceID: 95334
--- !u!1001 &915173805
Prefab:
m_ObjectHideFlags: 0

m_PrefabParentObject: {fileID: 1644872085946016, guid: 2f13abef2db804f96bdc7692a1dcf2b2,
type: 2}
m_PrefabInternal: {fileID: 915173805}
--- !u!114 &1028697498
--- !u!114 &1028133595
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}

m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
broadcast: 1
brain: {fileID: 0}
--- !u!1001 &1065008966
Prefab:

m_PrefabParentObject: {fileID: 1644872085946016, guid: 2f13abef2db804f96bdc7692a1dcf2b2,
type: 2}
m_PrefabInternal: {fileID: 1065008966}
--- !u!114 &1146467767
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 846768605}
--- !u!1001 &1147289133
Prefab:
m_ObjectHideFlags: 0

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 2f13abef2db804f96bdc7692a1dcf2b2, type: 2}
m_IsPrefabParent: 0
--- !u!114 &1245896433
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
continuousPlayerActions: []
discretePlayerActions: []
defaultAction: -1
brain: {fileID: 846768605}
--- !u!1001 &1294369606
Prefab:
m_ObjectHideFlags: 0

m_Name:
m_EditorClassIdentifier:
maxSteps: 0
frameToSkip: 0
waitTime: 0
isInference: 0
trainingConfiguration:
width: 80
height: 80

qualityLevel: 5
timeScale: 1
targetFrameRate: 60
defaultResetParameters:
- key: goal_size
value: 5
- key: goal_speed
value: 0.5
done: 0
resetParameters:
resetParameters:
- key: goal_size
value: 5
- key: goal_speed
value: 0.5
currentStep: 0
isInference: 0
windowResize: 0
stepsSinceReset: 0
goalSize: 5
goalSpeed: 0.5
--- !u!4 &1574236049

m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_StereoMirrorMode: 0
--- !u!4 &1715640925
Transform:
m_ObjectHideFlags: 0

m_PrefabParentObject: {fileID: 1644872085946016, guid: 2f13abef2db804f96bdc7692a1dcf2b2,
type: 2}
m_PrefabInternal: {fileID: 1980788453}
--- !u!114 &2043793749
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 846768605}

57
unity-environment/Assets/ML-Agents/Examples/Reacher/Scripts/ReacherAgent.cs


rbB = pendulumB.GetComponent<Rigidbody>();
}
public override List<float> CollectState()
public override void CollectObservations()
state.Add(pendulumA.transform.rotation.x);
state.Add(pendulumA.transform.rotation.y);
state.Add(pendulumA.transform.rotation.z);
state.Add(pendulumA.transform.rotation.w);
state.Add(rbA.angularVelocity.x);
state.Add(rbA.angularVelocity.y);
state.Add(rbA.angularVelocity.z);
state.Add(rbA.velocity.x);
state.Add(rbA.velocity.y);
state.Add(rbA.velocity.z);
AddVectorObs(pendulumA.transform.rotation.x);
AddVectorObs(pendulumA.transform.rotation.y);
AddVectorObs(pendulumA.transform.rotation.z);
AddVectorObs(pendulumA.transform.rotation.w);
AddVectorObs(rbA.angularVelocity.x);
AddVectorObs(rbA.angularVelocity.y);
AddVectorObs(rbA.angularVelocity.z);
AddVectorObs(rbA.velocity.x);
AddVectorObs(rbA.velocity.y);
AddVectorObs(rbA.velocity.z);
state.Add(pendulumB.transform.rotation.x);
state.Add(pendulumB.transform.rotation.y);
state.Add(pendulumB.transform.rotation.z);
state.Add(pendulumB.transform.rotation.w);
state.Add(rbB.angularVelocity.x);
state.Add(rbB.angularVelocity.y);
state.Add(rbB.angularVelocity.z);
state.Add(rbB.velocity.x);
state.Add(rbB.velocity.y);
state.Add(rbB.velocity.z);
AddVectorObs(pendulumB.transform.rotation.x);
AddVectorObs(pendulumB.transform.rotation.y);
AddVectorObs(pendulumB.transform.rotation.z);
AddVectorObs(pendulumB.transform.rotation.w);
AddVectorObs(rbB.angularVelocity.x);
AddVectorObs(rbB.angularVelocity.y);
AddVectorObs(rbB.angularVelocity.z);
AddVectorObs(rbB.velocity.x);
AddVectorObs(rbB.velocity.y);
AddVectorObs(rbB.velocity.z);
state.Add(goal.transform.position.x - transform.position.x);
state.Add(goal.transform.position.y - transform.position.y);
state.Add(goal.transform.position.z - transform.position.z);
AddVectorObs(goal.transform.position.x - transform.position.x);
AddVectorObs(goal.transform.position.y - transform.position.y);
AddVectorObs(goal.transform.position.z - transform.position.z);
state.Add(hand.transform.position.x - transform.position.x);
state.Add(hand.transform.position.y - transform.position.y);
state.Add(hand.transform.position.z - transform.position.z);
AddVectorObs(hand.transform.position.x - transform.position.x);
AddVectorObs(hand.transform.position.y - transform.position.y);
AddVectorObs(hand.transform.position.z - transform.position.z);
return state;
public override void AgentStep(float[] act)
public override void AgentAction(float[] act)
{
goalDegree += goalSpeed;
UpdateGoalPosition();

6
unity-environment/Assets/ML-Agents/Examples/Reacher/Scripts/ReacherDecision.cs


public class ReacherDecision : MonoBehaviour, Decision {
public float[] Decide (List<float> state, List<Camera> observation, float reward, bool done, float[] memory)
public float[] Decide (List<float> state, List<Texture2D> observation, float reward, bool done, List<float> memory)
{
float[] action = new float[4];
for (int i = 0; i < 4; i++) {

}
public float[] MakeMemory (List<float> state, List<Camera> observation, float reward, bool done, float[] memory)
public List<float> MakeMemory (List<float> state, List<Texture2D> observation, float reward, bool done, List<float> memory)
return default(float[]);
return new List<float>();
}
}

2
unity-environment/Assets/ML-Agents/Examples/Reacher/Scripts/ReacherGoal.cs


{
if (other.gameObject == hand)
{
agent.GetComponent<ReacherAgent>().reward = 0.1f;
agent.GetComponent<ReacherAgent>().SetReward( 0.1f);
//agent.GetComponent<PendulumAgent>().done = true;
}
}

4
unity-environment/Assets/ML-Agents/Examples/Tennis.meta


fileFormatVersion: 2
guid: 62e0860165bb840f99b906aa21a9e841
guid: 576258de032e4483bbe66cb979778ba5
timeCreated: 1503445471
timeCreated: 1517447132
licenseType: Free
DefaultImporter:
userData:

62
unity-environment/Assets/ML-Agents/Examples/Tennis/Prefabs/TennisArea.prefab


m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 0
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 0
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 0
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 0
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 0
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Enabled: 0
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1

m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5

m_Name:
m_EditorClassIdentifier:
brain: {fileID: 0}
observations: []
maxStep: 5000
resetOnDone: 1
state: []
stackedStates: []
reward: 0
done: 0
value: 0
CumulativeReward: 0
stepCounter: 0
agentStoredAction: []
memory: []
id: 0
agentParameters:
agentCameras: []
maxStep: 0
resetOnDone: 1
eventBased: 0
numberOfStepsBetweenActions: 1
numberOfActionsBetweenDecisions: 5
ball: {fileID: 1766663729253338}
invertX: 1
invertMult: -1

m_Name:
m_EditorClassIdentifier:
brain: {fileID: 0}
observations: []
maxStep: 5000
resetOnDone: 1
state: []
stackedStates: []
reward: 0
done: 0
value: 0
CumulativeReward: 0
stepCounter: 0
agentStoredAction: []
memory: []
id: 0
agentParameters:
agentCameras: []
maxStep: 0
resetOnDone: 1
eventBased: 0
numberOfStepsBetweenActions: 1
numberOfActionsBetweenDecisions: 5
ball: {fileID: 1766663729253338}
invertX: 0
invertMult: 1

21
unity-environment/Assets/ML-Agents/Examples/Tennis/Scripts/TennisAgent.cs


public GameObject myArea;
public GameObject opponent;
public override List<float> CollectState()
public override void CollectObservations()
state.Add(invertMult * (gameObject.transform.position.x - myArea.transform.position.x));
state.Add(gameObject.transform.position.y - myArea.transform.position.y);
state.Add(invertMult * gameObject.GetComponent<Rigidbody>().velocity.x);
state.Add(gameObject.GetComponent<Rigidbody>().velocity.y);
AddVectorObs(invertMult * (gameObject.transform.position.x - myArea.transform.position.x));
AddVectorObs(gameObject.transform.position.y - myArea.transform.position.y);
AddVectorObs(invertMult * gameObject.GetComponent<Rigidbody>().velocity.x);
AddVectorObs(gameObject.GetComponent<Rigidbody>().velocity.y);
state.Add(invertMult * (ball.transform.position.x - myArea.transform.position.x));
state.Add(ball.transform.position.y - myArea.transform.position.y);
state.Add(invertMult * ball.GetComponent<Rigidbody>().velocity.x);
state.Add(ball.GetComponent<Rigidbody>().velocity.y);
return state;
AddVectorObs(invertMult * (ball.transform.position.x - myArea.transform.position.x));
AddVectorObs(ball.transform.position.y - myArea.transform.position.y);
AddVectorObs(invertMult * ball.GetComponent<Rigidbody>().velocity.x);
AddVectorObs(ball.GetComponent<Rigidbody>().velocity.y);
public override void AgentStep(float[] act)
public override void AgentAction(float[] act)
{
float moveX = 0.0f;
float moveY = 0.0f;

248
unity-environment/Assets/ML-Agents/Examples/Tennis/Scripts/hitWall.cs


public class hitWall : MonoBehaviour
{
public GameObject areaObject;
public int lastAgentHit;
public GameObject areaObject;
public int lastAgentHit;
// Use this for initialization
void Start()
{
lastAgentHit = -1;
}
// Use this for initialization
void Start()
{
lastAgentHit = -1;
}
private void OnTriggerExit(Collider other)
{
TennisArea area = areaObject.GetComponent<TennisArea>();
TennisAgent agentA = area.agentA.GetComponent<TennisAgent>();
TennisAgent agentB = area.agentB.GetComponent<TennisAgent>();
private void OnTriggerExit(Collider other)
{
TennisArea area = areaObject.GetComponent<TennisArea>();
TennisAgent agentA = area.agentA.GetComponent<TennisAgent>();
TennisAgent agentB = area.agentB.GetComponent<TennisAgent>();
if (other.name == "over")
{
if (lastAgentHit == 0)
{
agentA.reward += 0.1f;
}
else
{
agentB.reward += 0.1f;
}
lastAgentHit = 0;
if (other.name == "over")
{
if (lastAgentHit == 0)
{
agentA.AddReward( 0.1f);
}
else
{
agentB.AddReward(0.1f);
}
lastAgentHit = 0;
}
}
}
}
private void OnCollisionEnter(Collision collision)
{
TennisArea area = areaObject.GetComponent<TennisArea>();
TennisAgent agentA = area.agentA.GetComponent<TennisAgent>();
TennisAgent agentB = area.agentB.GetComponent<TennisAgent>();
private void OnCollisionEnter(Collision collision)
{
TennisArea area = areaObject.GetComponent<TennisArea>();
TennisAgent agentA = area.agentA.GetComponent<TennisAgent>();
TennisAgent agentB = area.agentB.GetComponent<TennisAgent>();
if (collision.gameObject.tag == "iWall")
{
if (collision.gameObject.name == "wallA")
{
if (lastAgentHit == 0)
{
agentA.reward = -0.01f;
agentB.reward = 0;
agentB.score += 1;
}
else
{
agentA.reward = 0;
agentB.reward = -0.01f;
agentA.score += 1;
}
}
else if (collision.gameObject.name == "wallB")
{
if (lastAgentHit == 0)
{
agentA.reward = -0.01f;
agentB.reward = 0;
agentB.score += 1;
}
else
{
agentA.reward = 0;
agentB.reward = -0.01f;
agentA.score += 1;
}
}
else if (collision.gameObject.name == "floorA")
{
if (lastAgentHit == 0 || lastAgentHit == -1)
{
agentA.reward = -0.01f;
agentB.reward = 0;
agentB.score += 1;
}
else
{
agentA.reward = -0.01f;
agentB.reward = 0.0f;
agentB.score += 1;
if (collision.gameObject.tag == "iWall")
{
if (collision.gameObject.name == "wallA")
{
if (lastAgentHit == 0)
{
agentA.AddReward( -0.01f);
agentB.SetReward(0);
agentB.score += 1;
}
else
{
agentA.SetReward(0);
agentB.AddReward(-0.01f);
agentA.score += 1;
}
}
else if (collision.gameObject.name == "wallB")
{
if (lastAgentHit == 0)
{
agentA.AddReward( -0.01f);
agentB.SetReward(0);
agentB.score += 1;
}
else
{
agentA.SetReward(0);
agentB.AddReward( -0.01f);
agentA.score += 1;
}
}
else if (collision.gameObject.name == "floorA")
{
if (lastAgentHit == 0 || lastAgentHit == -1)
{
agentA.AddReward( -0.01f);
agentB.SetReward(0);
agentB.score += 1;
}
else
{
agentA.AddReward( -0.01f);
agentB.SetReward(0);
agentB.score += 1;
}
}
else if (collision.gameObject.name == "floorB")
{
if (lastAgentHit == 1 || lastAgentHit == -1)
{
agentA.reward = 0.0f;
agentB.reward = -0.01f;
agentA.score += 1;
}
else
{
agentA.reward = 0;
agentB.reward = -0.01f;
agentA.score += 1;
}
}
else if (collision.gameObject.name == "net")
{
if (lastAgentHit == 0)
{
agentA.reward = -0.01f;
agentB.reward = 0.0f;
agentB.score += 1;
}
else
{
agentA.reward = 0.0f;
agentB.reward = -0.01f;
agentA.score += 1;
}
}
agentA.done = true;
agentB.done = true;
area.MatchReset();
}
}
}
else if (collision.gameObject.name == "floorB")
{
if (lastAgentHit == 1 || lastAgentHit == -1)
{
agentA.SetReward(0);
agentB.AddReward( -0.01f);
agentA.score += 1;
}
else
{
agentA.SetReward(0);
agentB.AddReward( -0.01f);
agentA.score += 1;
}
}
else if (collision.gameObject.name == "net")
{
if (lastAgentHit == 0)
{
agentA.AddReward( -0.01f);
agentB.SetReward(0);
agentB.score += 1;
}
else
{
agentA.SetReward(0);
agentB.AddReward( -0.01f);
agentA.score += 1;
}
}
agentA.Done();
agentB.Done();
area.MatchReset();
}
if (collision.gameObject.tag == "agent")
{
if (collision.gameObject.name == "AgentA")
{
lastAgentHit = 0;
}
else
{
lastAgentHit = 1;
}
}
}
}
if (collision.gameObject.tag == "agent")
{
if (collision.gameObject.name == "AgentA")
{
lastAgentHit = 0;
}
else
{
lastAgentHit = 1;
}
}
}
}

301
unity-environment/Assets/ML-Agents/Examples/Tennis/Tennis.unity


m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ShowResolutionOverlay: 1
m_LightingDataAsset: {fileID: 0}
m_UseShadowmask: 1
--- !u!196 &4

m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 36699497}
--- !u!114 &91946103
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
brain: {fileID: 0}
--- !u!114 &239491048
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 1948813725}
--- !u!1001 &258257356
Prefab:
m_ObjectHideFlags: 0

type: 2}
propertyPath: brain
value:
objectReference: {fileID: 459283648}
objectReference: {fileID: 1948813725}
- target: {fileID: 114800310164848628, guid: 812997c7bc2544b6f927ff684c03450f,
type: 2}
propertyPath: scoreText

type: 2}
propertyPath: brain
value:
objectReference: {fileID: 459283648}
objectReference: {fileID: 1948813725}
- target: {fileID: 114800310164848628, guid: 812997c7bc2544b6f927ff684c03450f,
type: 2}
propertyPath: scoreText

type: 2}
propertyPath: brain
value:
objectReference: {fileID: 459283648}
objectReference: {fileID: 1948813725}
- target: {fileID: 114800310164848628, guid: 812997c7bc2544b6f927ff684c03450f,
type: 2}
propertyPath: scoreText

m_Name:
m_EditorClassIdentifier:
brainParameters:
stateSize: 8
stackedStates: 3
actionSize: 2
memorySize: 0
vectorObservationSize: 8
numStackedVectorObservations: 3
vectorActionSize: 2
actionDescriptions:
vectorActionDescriptions:
actionSpaceType: 1
stateSpaceType: 1
vectorActionSpaceType: 1
vectorObservationSpaceType: 1
- {fileID: 1084879787}
- {fileID: 1699463155}
- {fileID: 1377705146}
- {fileID: 1314073881}
instanceID: 10936
- {fileID: 1421859681}
- {fileID: 471755396}
- {fileID: 582107017}
- {fileID: 1240109700}
instanceID: 101116
--- !u!114 &471755396
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
brain: {fileID: 459283648}
--- !u!114 &508473255
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 1948813725}
--- !u!1001 &530994421
Prefab:
m_ObjectHideFlags: 0

type: 2}
propertyPath: brain
value:
objectReference: {fileID: 459283648}
objectReference: {fileID: 1948813725}
- target: {fileID: 114800310164848628, guid: 812997c7bc2544b6f927ff684c03450f,
type: 2}
propertyPath: scoreText

type: 2}
propertyPath: brain
value:
objectReference: {fileID: 459283648}
objectReference: {fileID: 1948813725}
- target: {fileID: 114800310164848628, guid: 812997c7bc2544b6f927ff684c03450f,
type: 2}
propertyPath: scoreText

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 812997c7bc2544b6f927ff684c03450f, type: 2}
m_IsPrefabParent: 0
--- !u!114 &582107017
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 459283648}
--- !u!1001 &667349971
Prefab:
m_ObjectHideFlags: 0

type: 2}
propertyPath: brain
value:
objectReference: {fileID: 459283648}
objectReference: {fileID: 1948813725}
- target: {fileID: 114800310164848628, guid: 812997c7bc2544b6f927ff684c03450f,
type: 2}
propertyPath: scoreText

type: 2}
propertyPath: brain
value:
objectReference: {fileID: 459283648}
objectReference: {fileID: 1948813725}
- target: {fileID: 114800310164848628, guid: 812997c7bc2544b6f927ff684c03450f,
type: 2}
propertyPath: scoreText

type: 2}
propertyPath: brain
value:
objectReference: {fileID: 459283648}
objectReference: {fileID: 1948813725}
- target: {fileID: 114800310164848628, guid: 812997c7bc2544b6f927ff684c03450f,
type: 2}
propertyPath: scoreText

type: 2}
propertyPath: brain
value:
objectReference: {fileID: 459283648}
objectReference: {fileID: 1948813725}
- target: {fileID: 114800310164848628, guid: 812997c7bc2544b6f927ff684c03450f,
type: 2}
propertyPath: scoreText

m_Script: {fileID: 11500000, guid: f1aadf59c24464a9fb5b4b3a2190c972, type: 3}
m_Name:
m_EditorClassIdentifier:
maxSteps: 0
frameToSkip: 4
waitTime: 0
maxSteps: 25000
isInference: 0
trainingConfiguration:
width: 300

qualityLevel: 5
timeScale: 1
targetFrameRate: 60
defaultResetParameters: []
done: 0
resetParameters:
resetParameters: []
currentStep: 0
stepsSinceReset: 0
--- !u!1001 &1065879750
Prefab:
m_ObjectHideFlags: 0

type: 2}
propertyPath: brain
value:
objectReference: {fileID: 459283648}
objectReference: {fileID: 1948813725}
- target: {fileID: 114800310164848628, guid: 812997c7bc2544b6f927ff684c03450f,
type: 2}
propertyPath: scoreText

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 812997c7bc2544b6f927ff684c03450f, type: 2}
m_IsPrefabParent: 0
--- !u!114 &1084879787
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
continuousPlayerActions:
- key: 97
index: 0
value: -1
- key: 100
index: 0
value: 1
- key: 32
index: 1
value: 1
discretePlayerActions:
- key: 276
value: 0
- key: 275
value: 1
- key: 0
value: 3
- key: 273
value: 2
defaultAction: 3
brain: {fileID: 459283648}
--- !u!1001 &1093755623
Prefab:
m_ObjectHideFlags: 0

type: 2}
propertyPath: brain
value:
objectReference: {fileID: 459283648}
objectReference: {fileID: 1948813725}
- target: {fileID: 114800310164848628, guid: 812997c7bc2544b6f927ff684c03450f,
type: 2}
propertyPath: scoreText

type: 2}
propertyPath: brain
value:
objectReference: {fileID: 459283648}
objectReference: {fileID: 1948813725}
- target: {fileID: 114800310164848628, guid: 812997c7bc2544b6f927ff684c03450f,
type: 2}
propertyPath: scoreText

type: 2}
propertyPath: brain
value:
objectReference: {fileID: 459283648}
objectReference: {fileID: 1948813725}
- target: {fileID: 114800310164848628, guid: 812997c7bc2544b6f927ff684c03450f,
type: 2}
propertyPath: scoreText

type: 2}
propertyPath: brain
value:
objectReference: {fileID: 459283648}
objectReference: {fileID: 1948813725}
- target: {fileID: 114800310164848628, guid: 812997c7bc2544b6f927ff684c03450f,
type: 2}
propertyPath: scoreText

m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 812997c7bc2544b6f927ff684c03450f, type: 2}
m_IsPrefabParent: 0
--- !u!114 &1314073881
--- !u!114 &1240109700
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}

m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
graphModel: {fileID: 4900000, guid: 57cd436ad0d12422ba379708e135815b, type: 3}

ObservationPlaceholderName: []
ActionPlaceholderName: action
brain: {fileID: 459283648}
--- !u!114 &1377705146
--- !u!114 &1317929880
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}

m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
broadcast: 1
brain: {fileID: 0}
--- !u!114 &1421859681
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
continuousPlayerActions:
- key: 97
index: 0
value: -1
- key: 100
index: 0
value: 1
- key: 32
index: 1
value: 1
discretePlayerActions:
- key: 276
value: 0
- key: 275
value: 1
- key: 0
value: 3
- key: 273
value: 2
defaultAction: 3
brain: {fileID: 459283648}
--- !u!1001 &1667694556
Prefab:

type: 2}
propertyPath: brain
value:
objectReference: {fileID: 459283648}
objectReference: {fileID: 1948813725}
- target: {fileID: 114800310164848628, guid: 812997c7bc2544b6f927ff684c03450f,
type: 2}
propertyPath: scoreText

m_ParentPrefab: {fileID: 100100000, guid: 812997c7bc2544b6f927ff684c03450f, type: 2}
m_IsPrefabParent: 0
--- !u!114 &1699463155
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
brain: {fileID: 459283648}
--- !u!1 &1749132593
GameObject:
m_ObjectHideFlags: 0

m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 60, y: 30, z: 0}
--- !u!114 &1800695481
--- !u!114 &1777611709
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}

m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
continuousPlayerActions:

type: 2}
propertyPath: brain
value:
objectReference: {fileID: 459283648}
objectReference: {fileID: 1948813725}
- target: {fileID: 114800310164848628, guid: 812997c7bc2544b6f927ff684c03450f,
type: 2}
propertyPath: scoreText

m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1871669621}
--- !u!114 &1911175829
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
graphModel: {fileID: 4900000, guid: 57cd436ad0d12422ba379708e135815b, type: 3}
graphScope:
graphPlaceholders:
- name: epsilon
valueType: 1
minValue: 0
maxValue: 0
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName: []
ActionPlaceholderName: action
brain: {fileID: 1948813725}
--- !u!1001 &1913269664
Prefab:
m_ObjectHideFlags: 0

type: 2}
propertyPath: brain
value:
objectReference: {fileID: 459283648}
objectReference: {fileID: 1948813725}
- target: {fileID: 114800310164848628, guid: 812997c7bc2544b6f927ff684c03450f,
type: 2}
propertyPath: scoreText

m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
m_IsActive: 1
--- !u!4 &1948813724
Transform:
m_ObjectHideFlags: 0

m_Name:
m_EditorClassIdentifier:
brainParameters:
stateSize: 8
stackedStates: 1
actionSize: 4
memorySize: 0
vectorObservationSize: 8
numStackedVectorObservations: 3
vectorActionSize: 2
actionDescriptions:
vectorActionDescriptions:
-
-
actionSpaceType: 0
stateSpaceType: 1
vectorActionSpaceType: 1
vectorObservationSpaceType: 1
- {fileID: 1800695481}
- {fileID: 91946103}
- {fileID: 239491048}
- {fileID: 2128282384}
instanceID: 50836
- {fileID: 1777611709}
- {fileID: 1317929880}
- {fileID: 508473255}
- {fileID: 1911175829}
instanceID: 101204
--- !u!1001 &1965335106
Prefab:
m_ObjectHideFlags: 0

type: 2}
propertyPath: brain
value:
objectReference: {fileID: 459283648}
objectReference: {fileID: 1948813725}
- target: {fileID: 114800310164848628, guid: 812997c7bc2544b6f927ff684c03450f,
type: 2}
propertyPath: scoreText

m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 2073469450}
--- !u!114 &2128282384
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
graphModel: {fileID: 0}
graphScope:
graphPlaceholders: []
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName: []
ActionPlaceholderName: action
brain: {fileID: 0}

304
unity-environment/Assets/ML-Agents/Scripts/Academy.cs


public abstract class Academy : MonoBehaviour
{
[System.Serializable]
private struct ResetParameter
{
public string key;
public float value;
}
"Once the step counter reaches maximum, the environment will reset.")]
"Once the step counter reaches maximum, " +
"the environment will reset.")]
[Tooltip("How many steps of the environment to skip before asking Brains for decisions.")]
private int frameToSkip;
[SerializeField]
[Tooltip("How many seconds to wait between steps when running in Inference.")]
private float waitTime;
[HideInInspector]
public bool isInference = true;
/**< \brief Do not modify : If true, the Academy will use inference

[Tooltip("The engine-level settings which correspond to rendering quality and engine speed during Training.")]
private ScreenConfiguration trainingConfiguration = new ScreenConfiguration(80, 80, 1, 100.0f, -1);
[Tooltip("The engine-level settings which correspond to rendering quality" +
" and engine speed during Training.")]
private ScreenConfiguration trainingConfiguration =
new ScreenConfiguration(80, 80, 1, 100.0f, -1);
[Tooltip("The engine-level settings which correspond to rendering quality and engine speed during Inference.")]
private ScreenConfiguration inferenceConfiguration = new ScreenConfiguration(1280, 720, 5, 1.0f, 60);
[SerializeField]
[Tooltip("List of custom parameters that can be changed in the environment on reset.")]
private ResetParameter[] defaultResetParameters;
[Tooltip("The engine-level settings which correspond to rendering quality" +
" and engine speed during Inference.")]
private ScreenConfiguration inferenceConfiguration =
new ScreenConfiguration(1280, 720, 5, 1.0f, 60);
/**< \brief Contains a mapping from parameter names to float values. */
/**< You can specify the Default Reset Parameters in the Inspector of the

* environment at reset time. */
public Dictionary<string, float> resetParameters;
[HideInInspector]
private List<Brain> brains = new List<Brain>();
[SerializeField]
[Tooltip("List of custom parameters that can be changed in the " +
"environment on reset.")]
public ResetParameters resetParameters;
ExternalCommand externalCommand;
private bool acceptingSteps;
private int framesSinceAction;
private bool skippingFrames = true;
public event System.Action BrainDecideAction;
public event System.Action<bool, bool, int> AgentSetStatus;
public event System.Action AgentResetIfDone;
public event System.Action AgentSendState;
public event System.Action AgentAct;
public event System.Action AgentForceReset;
[HideInInspector]
public bool done;
private bool done;
[HideInInspector]
public bool maxStepReached;
private bool maxStepReached;
/**< \brief Increments each time a step is taken in the environment. Is
* reset to 0 during AcademyReset(). */
public int currentStep;
public int stepsSinceReset;
private float timeAtStep;
resetParameters = new Dictionary<string, float>();
foreach (ResetParameter kv in defaultResetParameters)
{
resetParameters[kv.key] = kv.value;
}
_InitializeAcademy();
}
void _InitializeAcademy()
{
GetBrains(gameObject, brains);
List<Brain> brains = GetBrains(gameObject);
InitializeAcademy();
communicator = new ExternalCommunicator(this);

foreach (Brain brain in brains)
{
brain.InitializeBrain();
brain.InitializeBrain(this, communicator);
externalCommand = communicator.GetCommand();
communicator.UpdateCommand();
done = true;
acceptingSteps = true;
BrainDecideAction += () => { };
AgentSetStatus += (m, d, i) => { };
AgentResetIfDone += () => { };
AgentSendState += () => { };
AgentAct += () => { };
AgentForceReset += () => { };
if (communicator == null)
{
_AcademyReset();
AgentForceReset();
}
/// Environment specific initialization.
/**

{
if ((!isInference))
{
Screen.SetResolution(trainingConfiguration.width, trainingConfiguration.height, false);
QualitySettings.SetQualityLevel(trainingConfiguration.qualityLevel, true);
Screen.SetResolution(
trainingConfiguration.width,
trainingConfiguration.height,
false);
QualitySettings.SetQualityLevel(
trainingConfiguration.qualityLevel, true);
Application.targetFrameRate = trainingConfiguration.targetFrameRate;
Application.targetFrameRate =
trainingConfiguration.targetFrameRate;
QualitySettings.vSyncCount = 0;
Time.captureFramerate = 60;
Monitor.SetActive(false);

Screen.SetResolution(inferenceConfiguration.width, inferenceConfiguration.height, false);
QualitySettings.SetQualityLevel(inferenceConfiguration.qualityLevel, true);
Screen.SetResolution(
inferenceConfiguration.width,
inferenceConfiguration.height,
false);
QualitySettings.SetQualityLevel(
inferenceConfiguration.qualityLevel, true);
Application.targetFrameRate = inferenceConfiguration.targetFrameRate;
Application.targetFrameRate =
inferenceConfiguration.targetFrameRate;
Time.captureFramerate = 60;
Monitor.SetActive(true);
}

}
// Called after AcademyStep().
internal void Step()
public void Done()
// Reset all agents whose flags are set to done.
foreach (Brain brain in brains)
{
// Set all agents to done if academy is done.
if (done)
{
brain.SendDone();
brain.SendMaxReached();
}
brain.ResetIfDone();
brain.SendState();
brain.ResetDoneAndReward();
}
done = true;
// Called before AcademyReset().
internal void Reset()
public bool IsDone()
currentStep = 0;
episodeCount++;
done = false;
maxStepReached = false;
AcademyReset();
foreach (Brain brain in brains)
{
brain.Reset();
brain.ResetDoneAndReward();
}
return done;
// Instructs all brains to process states to produce actions.
private void DecideAction()
{
if (communicator != null)
{
communicator.UpdateActions();
}
foreach (Brain brain in brains)
{
brain.DecideAction();
}
framesSinceAction = 0;
}
void FixedUpdate()
internal void _AcademyStep()
if (acceptingSteps)
{
RunMdp();
}
}
// Contains logic for taking steps in environment simulation.
/** Based on presence of communicator, inference mode, and frameSkip,
* decides whether the environment should be stepped or reset.
*/
void RunMdp()
{
if ((isInference) && (timeAtStep + waitTime > Time.time))
if (communicator != null)
return;
if (communicator.GetCommand() == ExternalCommand.RESET)
{
Dictionary<string, float> NewResetParameters =
communicator.GetResetParameters();
foreach (KeyValuePair<string, float> kv in NewResetParameters)
{
resetParameters[kv.Key] = kv.Value;
}
_AcademyReset();
AgentForceReset();
communicator.SetCommand(ExternalCommand.STEP);
}
if (communicator.GetCommand() == ExternalCommand.QUIT)
{
Application.Quit();
}
timeAtStep = Time.time;
framesSinceAction += 1;
currentStep += 1;
if ((currentStep >= maxSteps) && maxSteps > 0)
if ((stepsSinceReset >= maxSteps) && maxSteps > 0)
done = true;
Done();
if ((framesSinceAction > frameToSkip) || done)
{
skippingFrames = false;
framesSinceAction = 0;
}
else
{
skippingFrames = true;
}
AgentSetStatus(maxStepReached, done, stepsSinceReset);
if (done)
_AcademyReset();
if (skippingFrames == false)
{
AgentResetIfDone();
if (communicator != null)
{
if (externalCommand == ExternalCommand.STEP)
{
Step();
externalCommand = communicator.GetCommand();
}
if (externalCommand == ExternalCommand.RESET)
{
Dictionary<string, float> NewResetParameters = communicator.GetResetParameters();
foreach (KeyValuePair<string, float> kv in NewResetParameters)
{
resetParameters[kv.Key] = kv.Value;
}
Reset();
externalCommand = ExternalCommand.STEP;
RunMdp();
return;
}
if (externalCommand == ExternalCommand.QUIT)
{
Application.Quit();
return;
}
}
else
{
if (done)
{
Reset();
RunMdp();
return;
}
else
{
Step();
}
}
AgentSendState();
DecideAction();
BrainDecideAction();
}
AcademyStep();
AgentAct();
AcademyStep();
stepsSinceReset += 1;
foreach (Brain brain in brains)
{
brain.Step();
}
private static void GetBrains(GameObject gameObject, List<Brain> brains)
internal void _AcademyReset()
stepsSinceReset = 0;
episodeCount++;
done = false;
maxStepReached = false;
AcademyReset();
}
void FixedUpdate()
{
_AcademyStep();
}
private static List<Brain> GetBrains(GameObject gameObject)
{
List<Brain> brains = new List<Brain>();
for (var i = 0; i < transform.childCount; i++)
{
var child = transform.GetChild(i);

brains.Add(brain);
}
return brains;
}
}

727
unity-environment/Assets/ML-Agents/Scripts/Agent.cs


using UnityEngine;
/// <summary>
/// Agent info.The agent will send an instance of this class to the brain.
/// </summary>
public struct AgentInfo
{
public List<float> vectorObservation;
public List<float> stackedVectorObservation;
public List<Texture2D> visualObservations;
public List<float> memories;
public string textObservation;
public float[] StoredVectorActions;
public string StoredTextActions;
public float reward;
public bool done;
public bool maxStepReached;
public int id;
}
/// <summary>
/// Agent action. The brain will send an instance of this class to the agent
/// when taking a decision.
/// </summary>
public struct AgentAction
{
public float[] vectorActions;
public string textActions;
public List<float> memories;
}
/// <summary>
/// Agent parameters. Reflect the user's settings for the agents of the inspector.
/// </summary>
[System.Serializable]
public class AgentParameters
{
public List<Camera> agentCameras = new List<Camera>();
public int maxStep;
public bool resetOnDone = true;
public bool onDemandDecision;
public int numberOfActionsBetweenDecisions;
}
*
* See Also: \ref Agents.md
[System.Serializable]
[Tooltip("The brain to register this agent to. Can be dragged into the inspector using the Editor.")]
/**< \brief The brain that will control this agent. */
/**< Use the inspector to drag the desired brain gameObject into
* the Brain field */
/// <summary>
/// The brain that will control this agent.
/// Use the inspector to drag the desired brain gameObject into
/// the Brain field.
///</summary>
[HideInInspector]
[Tooltip("A list of Cameras which will be used to generate observations.")]
/**< \brief The list of the cameras the Agent uses as observations. */
/**< These cameras will be used to generate the observations */
public List<Camera> observations;
/// <summary>
/// The info. This is the placeholder for the information the agent will send
/// to the brain.
/// </summary>
private AgentInfo _info;
/// <summary>
/// The action. This is the placeholder for the actions the agent will receive.
/// </summary>
private AgentAction _action;
[Tooltip("The per-agent maximum number of steps.")]
/**< \brief The number of steps the agent takes before being done. */
/**< If set to 0, the agent can only be set to done via a script.
* If set to any positive integer, the agent will be set to done after that
* many steps each episode. */
public int maxStep;
[Tooltip("If checked, the agent will reset on done. Else, AgentOnDone() will be called.")]
/**< \brief Determines the behaviour of the Agent when done.*/
/**< If true, the agent will reset when done.
* If not, the agent will remain done, and no longer take actions.*/
public bool resetOnDone = true;
// State list for the agent.
[HideInInspector]
public List<float> state;
//List of last n states.
[HideInInspector]
public List<float> stackedStates;
/// <summary>
/// The reward. Describes the reward for the given step of the agent.
/// It is reset to 0 at the beginning of every step.
/// Modify in AgentStep().
/// Should be set to positive to reinforcement desired behavior, and
/// set to a negative value to punish undesireable behavior.
/// Additionally, the magnitude of the reward should not exceed 1.0
///</summary>
private float reward;
/**< \brief Describes the reward for the given step of the agent.*/
/**< It is reset to 0 at the beginning of every step.
* Modify in AgentStep().
* Should be set to positive to reinforcement desired behavior, and
* set to a negative value to punish undesireable behavior.
* Additionally, the magnitude of the reward should not exceed 1.0 */
[HideInInspector]
public float reward;
/// Whether or not the agent is requests an action
private bool requestAction;
/**< \brief Whether or not the agent is done*/
/**< Set to true when the agent has acted in some way which ends the
* episode for the given agent. */
[HideInInspector]
public bool done;
/// Whether or not the agent is requests a decision
private bool requestDecision;
/**< \brief Whether or not the max step is reached*/
[HideInInspector]
public bool maxStepReached;
/// <summary>
/// Whether or not the agent is done
/// Set to true when the agent has acted in some way which ends the
/// episode for the given agent.
///</summary>
private bool done;
/**< \brief The current value estimate of the agent */
/**< When using an External brain, you can pass value estimates to the
* agent at every step using env.Step(actions, values).
* If AgentMonitor is attached to the Agent, this value will be displayed.*/
[HideInInspector]
public float value;
/// Whether or not the max step is reached
private bool maxStepReached;
/**< \brief Do not modify: This keeps track of the cumulative reward.*/
[HideInInspector]
public float CumulativeReward;
/// Do not modify: This keeps track of the cumulative reward.
private float cumulativeReward;
/**< \brief Do not modify: This keeps track of the number of steps taken by
* the agent each episode.*/
/// This keeps track of the number of steps taken by the agent each episode.
/**< \brief Do not modify: This keeps track of the last actions decided by
* the brain.*/
[HideInInspector]
public float[] agentStoredAction;
private bool hasAlreadyReset;
private bool terminate;
/**< \brief Do not modify directly: This is used by the brain to store
* information about the previous states of the agent*/
public float[] memory;
public AgentParameters agentParameters;
/**< \brief Do not modify : This is the unique Identifier each agent
* receives at initialization. It is used by the brain to identify
* the agent.*/
[HideInInspector]
public int id;
/// <summary> This is the unique Identifier each agent
/// receives at initialization. It is used by the brain to identify
/// the agent.
/// </summary>
private int id;
void OnEnable()
/// <summary>
/// Unity method called when the agent is istanciated or set to active.
/// </summary>
private void OnEnable()
if (brain != null)
{
brain.agents.Add(id, gameObject.GetComponent<Agent>());
if (brain.brainParameters.actionSpaceType == StateType.continuous)
{
agentStoredAction = new float[brain.brainParameters.actionSize];
}
else
{
agentStoredAction = new float[1];
}
memory = new float[brain.brainParameters.memorySize];
}
Academy aca = Object.FindObjectOfType<Academy>() as Academy;
_InitializeAgent(aca);
}
state = new List<float>(brain.brainParameters.stateSize);
if (brain.brainParameters.stateSpaceType == StateType.continuous)
/// <summary>
/// Is called when the agent is initialized.
/// </summary>
void _InitializeAgent(Academy aca)
{
_info = new AgentInfo();
_action = new AgentAction();
if (aca == null)
throw new UnityAgentsException("No Academy Component could be" +
"found in the scene.");
aca.AgentSetStatus += SetStatus;
aca.AgentResetIfDone += ResetIfDone;
aca.AgentSendState += SendState;
aca.AgentAct += _AgentStep;
aca.AgentForceReset += _AgentReset;
if (brain != null)
stackedStates = new List<float>(brain.brainParameters.stateSize * brain.brainParameters.stackedStates);
stackedStates.AddRange(new float[brain.brainParameters.stateSize * brain.brainParameters.stackedStates]);
ResetState();
stackedStates = new List<float>(brain.brainParameters.stackedStates);
stackedStates.AddRange(new float[brain.brainParameters.stackedStates]);
Debug.Log(
string.Format("The Agent component attached to the " +
"GameObject {0} was initialized without a brain."
, gameObject.name));
/// <summary>
/// Is called when the agent is disabled.
/// </summary>
void _DisableAgent(Academy aca)
{
if (aca != null)
{
aca.AgentSetStatus -= SetStatus;
aca.AgentResetIfDone -= ResetIfDone;
aca.AgentSendState -= SendState;
aca.AgentAct -= _AgentStep;
aca.AgentForceReset -= _AgentReset;
}
}
/// <summary>
/// Gets called when the agent is destroyed or is set inactive.
/// </summary>
//Remove the agent from the list of agents of the brain
brain.agents.Remove(id);
Academy aca = Object.FindObjectOfType<Academy>() as Academy;
_DisableAgent(aca);
/// <summary>
/** Use this method to provide a brain to the agent via script.
* Do not modify brain directly.
@param b The Brain component the agent will subscribe to.*/
/// Use this method to provide a brain to the agent via script.
///<param name= "b" >The Brain the agent will subscribe to.</param>
/// <summary>
RemoveBrain();
brain.agents.Add(id, gameObject.GetComponent<Agent>());
if (brain.brainParameters.actionSpaceType == StateType.continuous)
ResetState();
}
/// <summary>
/// Resets the reward of the agent
/// </summary>
public void ResetReward()
{
reward = 0f;
if (done)
agentStoredAction = new float[brain.brainParameters.actionSize];
cumulativeReward = 0f;
}
}
/// <summary>
/// Use this method to overrite the current reward of the agent.
/// </summary>
/// <param name="newValue">The new value of the reward</param>
public void SetReward(float newValue)
{
cumulativeReward += newValue - reward;
reward = newValue;
}
/// <summary>
/// Use this method to increment the current reward of the agent.
/// </summary>
/// <param name="increment">The value by which the reward will
/// be incremented</param>
public void AddReward(float increment)
{
reward += increment;
cumulativeReward += increment;
}
/// <summary>
/// Gets the reward of the agent.
/// </summary>
/// <returns>The reward.</returns>
public float GetReward()
{
return reward;
}
/// <summary>
/// Gets the cumulative reward.
/// </summary>
public float GetCumulativeReward()
{
return cumulativeReward;
}
/// <summary>
/// Is called then the agent is done. Either game-over, victory or timeout.
/// </summary>
public void Done()
{
done = true;
}
/// <summary>
/// Is called when the agent must request the brain for a new decision.
/// </summary>
public void RequestDecision()
{
requestDecision = true;
RequestAction();
}
/// <summary>
/// Is called then the agent must perform a new action.
/// </summary>
public void RequestAction()
{
requestAction = true;
}
/// <summary>
/// Indicates if the agent has reached his maximum number of steps.
/// </summary>
/// <returns><c>true</c>, if max step reached was reached,
/// <c>false</c> otherwise.</returns>
public bool IsMaxStepReached()
{
return maxStepReached;
}
/// <summary>
/// Indicates if the agent is done
/// </summary>
/// <returns><c>true</c>, if the agent is done,
/// <c>false</c> otherwise.</returns>
public bool IsDone()
{
return done;
}
/// <summary>
/// Resets the info and action fields of the agent. Is called when the agent
/// resets or changes brain.
/// </summary>
private void ResetState()
{
if (brain == null)
return;
BrainParameters param = brain.brainParameters;
if (param.vectorActionSpaceType == StateType.continuous)
{
_action.vectorActions = new float[param.vectorActionSize];
_info.StoredVectorActions = new float[param.vectorActionSize];
agentStoredAction = new float[1];
_action.vectorActions = new float[1];
_info.StoredVectorActions = new float[1];
memory = new float[brain.brainParameters.memorySize];
}
/// When RemoveBrain is called, the agent unsubscribes from its brain.
/** Use this method to give a brain to an agent via script.
* Do not modify brain directly.
* If an agent does not have a brain, it will not update its actions.*/
public void RemoveBrain()
{
if (brain != null)
_action.textActions = "";
_info.memories = new List<float>();
_action.memories = new List<float>();
if (param.vectorObservationSpaceType == StateType.continuous)
{
_info.vectorObservation =
new List<float>(param.vectorObservationSize);
_info.stackedVectorObservation =
new List<float>(param.vectorObservationSize
* brain.brainParameters.numStackedVectorObservations);
_info.stackedVectorObservation.AddRange(
new float[param.vectorObservationSize
* param.numStackedVectorObservations]);
}
else
brain.agents.Remove(id);
_info.vectorObservation = new List<float>(1);
_info.stackedVectorObservation =
new List<float>(param.numStackedVectorObservations);
_info.stackedVectorObservation.AddRange(
new float[param.numStackedVectorObservations]);
_info.visualObservations = new List<Texture2D>();
/// <summary>
/** Must be implemented in agent-specific child class.
* This method called only once when the agent is enabled.
*/
/// Must be implemented in agent-specific child class.
/// This method called only once when the agent is enabled.
/// </summary>
/// Collect the states of the agent with this method
/** Must be implemented in agent-specific child class.
* This method called at every step and collects the state of the agent.
* The lenght of the output must be the same length as the state size field
* in the brain parameters of the brain the agent subscribes to.
* Note : The order of the elements in the state list is important.
* @returns state A list of floats corresponding to the state of the agent.
*/
/// <summary>
/// Sends the state to brain.
/// </summary>
public void SendStateToBrain()
{
if (brain == null)
return;
_info.memories = _action.memories;
_info.StoredVectorActions = _action.vectorActions;
_info.StoredTextActions = _action.textActions;
_info.vectorObservation.Clear();
_info.textObservation = "";
CollectObservations();
public List<float> ClearAndCollectState() {
state.Clear();
CollectState();
if (brain.brainParameters.stateSpaceType == StateType.continuous)
BrainParameters param = brain.brainParameters;
if (param.vectorObservationSpaceType == StateType.continuous)
stackedStates.RemoveRange(0, brain.brainParameters.stateSize);
if (_info.vectorObservation.Count != param.vectorObservationSize)
{
throw new UnityAgentsException(string.Format(
"Vector Observation size mismatch between continuous " +
"agent {0} and brain {1}. " +
"Was Expecting {2} but received {3}. ",
gameObject.name, brain.gameObject.name,
brain.brainParameters.vectorObservationSize,
_info.vectorObservation.Count));
}
_info.stackedVectorObservation.RemoveRange(
0, param.vectorObservationSize);
_info.stackedVectorObservation.AddRange(_info.vectorObservation);
stackedStates.RemoveRange(0, 1);
if (_info.vectorObservation.Count != 1)
{
throw new UnityAgentsException(string.Format(
"Vector Observation size mismatch between discrete agent" +
" {0} and brain {1}. Was Expecting {2} but received {3}. ",
gameObject.name, brain.gameObject.name,
1, _info.vectorObservation.Count));
}
_info.stackedVectorObservation.RemoveRange(0, 1);
_info.stackedVectorObservation.AddRange(_info.vectorObservation);
stackedStates.AddRange(state);
return stackedStates;
_info.visualObservations.Clear();
if (param.cameraResolutions.Length > agentParameters.agentCameras.Count)
{
throw new UnityAgentsException(string.Format(
"Not enough cameras for agent {0} : Bain {1} expecting at " +
"least {2} cameras but only {3} were present.",
gameObject.name, brain.gameObject.name,
brain.brainParameters.cameraResolutions.Length,
agentParameters.agentCameras.Count));
}
for (int i = 0; i < brain.brainParameters.cameraResolutions.Length; i++)
{
_info.visualObservations.Add(ObservationToTexture(
agentParameters.agentCameras[i],
param.cameraResolutions[i].width,
param.cameraResolutions[i].height));
}
_info.reward = reward;
_info.done = done;
_info.maxStepReached = maxStepReached;
_info.id = id;
brain.SendState(this, _info);
}
/// <summary>
/// Collects the observations. Must be implemented by the developer.
/// </summary>
public virtual void CollectObservations()
{
public virtual List<float> CollectState()
/// <summary>
/// Adds a vector observation.
/// Note that the number of vector observation to add
/// must be the same at each CollectObservations call.
/// </summary>
/// <param name="observation">The float value to add to
/// the vector observation.</param>
internal void AddVectorObs(float observation)
return state;
_info.vectorObservation.Add(observation);
}
internal void SetTextObs(string s)
{
_info.textObservation = s;
/// <summary>
/** Must be implemented in agent-specific child class.
* Note: If your state is discrete, you need to convert your
* state into a list of float with length 1.
* @param action The action the agent receives from the brain.
*/
public virtual void AgentStep(float[] action)
/// Must be implemented in agent-specific child class.
/// Note: If your state is discrete, you need to convert your
/// state into a list of float with length 1.
/// </summary>
/// <param name="action">The action the agent receives
/// from the brain.</param>
public virtual void AgentAction(float[] action)
/// <summary>
/** Must be implemented in agent-specific child class.
* Is called when the Agent is done if ResetOneDone is false.
* The agent will remain done.
* You can use this method to remove the agent from the scene.
*/
/// Must be implemented in agent-specific child class.
/// Is called when the Agent is done if ResetOneDone is false.
/// The agent will remain done.
/// You can use this method to remove the agent from the scene.
/// </summary>
/// <summary>
/** Must be implemented in agent-specific child class.
* Is called when the academy is done.
* Is called when the Agent is done if ResetOneDone is true.
*/
/// Must be implemented in agent-specific child class.
/// Is called when the academy is done.
/// Is called when the Agent is done if ResetOneDone is true.
/// </summary>
/// Do not modify : Is used by the brain to reset the agent.
public void Reset()
/// <summary>
/// Is called when the agent resets.
/// </summary>
public void _AgentReset()
memory = new float[brain.brainParameters.memorySize];
stackedStates.Clear();
if (brain.brainParameters.stateSpaceType == StateType.continuous)
{
stackedStates.AddRange(new float[brain.brainParameters.stateSize *
brain.brainParameters.stackedStates]);
}
else
{
stackedStates.AddRange(new float[brain.brainParameters.stackedStates]);
}
ResetState();
CumulativeReward = -reward;
/// Do not modify : Is used by the brain to collect rewards.
public float CollectReward()
/// Is used by the brain give new action to the agent.
public void UpdateAction(AgentAction action)
{
_action = action;
}
public void UpdateVectorAction(float[] v)
{
_action.vectorActions = v;
}
public void UpdateMemoriesAction(List<float> v)
{
_action.memories = v;
}
public void UpdateTextAction(string t)
return reward;
_action.textActions = t;
public void SetCumulativeReward()
/// <summary>
/// Sets the status of the agent.
/// </summary>
/// <param name="acaMaxStep">If set to <c>true</c>
/// The agent must set maxStepReached.</param>
/// <param name="acaDone">If set to <c>true</c>
/// The agent must set done.</param>
private void SetStatus(bool acaMaxStep, bool acaDone, int acaStepCounter)
if (!done) {
CumulativeReward += reward;
}
else{
CumulativeReward = 0f;
if (acaDone)
acaStepCounter = 0;
MakeRequests(acaStepCounter);
if (acaMaxStep)
maxStepReached = true;
if (acaDone)
{
Done();
hasAlreadyReset = false;
// If the Academy needs to reset, the agent should reset
// even if it reseted recently.
/// Do not modify : Is used by the brain to collect done.
public bool CollectDone()
/// <summary>
/// Signals the agent that it must reset if its done flag is set to true.
/// </summary>
private void ResetIfDone()
return done;
// If an agent is done, then it will also
// request for a decision and an action
if (IsDone())
{
if (agentParameters.resetOnDone)
{
if (agentParameters.onDemandDecision)
{
if (!hasAlreadyReset)
{
//If event based, the agent can reset as soon
// as it is done
_AgentReset();
hasAlreadyReset = true;
}
}
else if (requestDecision)
{
// If not event based, the agent must wait to request a
// decsion before reseting to keep multiple agents in sync.
_AgentReset();
}
}
else
{
terminate = true;
RequestDecision();
}
}
/// Do not modify : Is used by the brain give new action to the agent.
public void UpdateAction(float[] a)
/// <summary>
/// Signals the agent that it must sent its decision to the brain.
/// </summary>
private void SendState()
agentStoredAction = a;
if (requestDecision)
{
SendStateToBrain();
ResetReward();
done = false;
maxStepReached = false;
requestDecision = false;
hasAlreadyReset = false;
}
/// Do not modify : Is used by the brain to make the agent perform a step.
public void Step()
/// Is used by the brain to make the agent perform a step.
private void _AgentStep()
AgentStep(agentStoredAction);
stepCounter += 1;
if ((stepCounter > maxStep) && (maxStep > 0))
if (terminate)
{
terminate = false;
ResetReward();
done = false;
maxStepReached = false;
requestDecision = false;
requestAction = false;
hasAlreadyReset = false;
OnDisable();
AgentOnDone();
}
if ((requestAction) && (brain != null))
done = true;
requestAction = false;
AgentAction(_action.vectorActions);
}
if ((stepCounter >= agentParameters.maxStep)
&& (agentParameters.maxStep > 0))
{
Done();
}
stepCounter += 1;
}
/// <summary>
/// Is called after every step, contains the logic to decide if the agent
/// will request a decision at the next step.
/// </summary>
private void MakeRequests(int acaStepCounter)
{
agentParameters.numberOfActionsBetweenDecisions =
Mathf.Max(agentParameters.numberOfActionsBetweenDecisions, 1);
if (!agentParameters.onDemandDecision)
{
RequestAction();
if (acaStepCounter %
agentParameters.numberOfActionsBetweenDecisions == 0)
{
RequestDecision();
}
/// Do not modify : Is used by the brain to reset the Reward.
public void ResetReward()
/** Contains logic for coverting a camera component into a Texture2D. */
public Texture2D ObservationToTexture(Camera cam, int width, int height)
reward = 0;
Rect oldRec = cam.rect;
cam.rect = new Rect(0f, 0f, 1f, 1f);
var depth = 24;
var format = RenderTextureFormat.Default;
var readWrite = RenderTextureReadWrite.Default;
var tempRT =
RenderTexture.GetTemporary(width, height, depth, format, readWrite);
var tex = new Texture2D(width, height, TextureFormat.RGB24, false);
var prevActiveRT = RenderTexture.active;
var prevCameraRT = cam.targetTexture;
// render to offscreen texture (readonly from CPU side)
RenderTexture.active = tempRT;
cam.targetTexture = tempRT;
cam.Render();
tex.ReadPixels(new Rect(0, 0, tex.width, tex.height), 0, 0);
tex.Apply();
cam.targetTexture = prevCameraRT;
cam.rect = oldRec;
RenderTexture.active = prevActiveRT;
RenderTexture.ReleaseTemporary(tempRT);
return tex;
}

454
unity-environment/Assets/ML-Agents/Scripts/Brain.cs


// Class contains all necessary environment parameters
// to be defined and sent to external agent
#if ENABLE_TENSORFLOW
public enum BrainType
{
Player,
Heuristic,
External,
Internal
}
#else
Internal
#endif
public enum StateType
{

[System.Serializable]
public class BrainParameters
{
[Tooltip("Length of state vector for brain (In Continuous state space)." +
"Or number of possible values (in Discrete state space).")]
public int stateSize = 1;
public int vectorObservationSize = 1;
[Tooltip("Number of states that will be staked before beeing fed to the neural network.")]
public int stackedStates = 1;
public int numStackedVectorObservations = 1;
[Tooltip("Length of action vector for brain (In Continuous state space)." +
"Or number of possible values (in Discrete action space).")]
public int actionSize = 1;
/**< \brief If continuous : The length of the float vector that represents the action
public int vectorActionSize = 1;
/**< \brief If continuous : The length of the float vector that represents
* the action
[Tooltip("Length of memory vector for brain. Used with Recurrent networks.")]
public int memorySize = 0;
/**< \brief The length of the float vector that holds the memory for the agent */
[Tooltip("Describes height, width, and whether to greyscale visual observations for the Brain.")]
[Tooltip("A list of strings used to name the available actions for the Brain.")]
public string[] actionDescriptions;
public string[] vectorActionDescriptions;
[Tooltip("Corresponds to whether state vector contains a single integer (Discrete) " +
"or a series of real-valued floats (Continuous).")]
public StateType actionSpaceType = StateType.discrete;
public StateType vectorActionSpaceType = StateType.discrete;
[Tooltip("Corresponds to whether action vector contains a single integer (Discrete)" +
" or a series of real-valued floats (Continuous).")]
public StateType stateSpaceType = StateType.continuous;
public StateType vectorObservationSpaceType = StateType.continuous;
/**< \brief Defines if the state is discrete or continuous */
}

*/
public class Brain : MonoBehaviour
{
// Current agent info
public Dictionary<int, List<float>> currentStates = new Dictionary<int, List<float>>(32);
public Dictionary<int, List<Camera>> currentCameras = new Dictionary<int, List<Camera>>(32);
public Dictionary<int, float> currentRewards = new Dictionary<int, float>(32);
public Dictionary<int, bool> currentDones = new Dictionary<int, bool>(32);
public Dictionary<int, bool> currentMaxes = new Dictionary<int, bool>(32);
public Dictionary<int, float[]> currentActions = new Dictionary<int, float[]>(32);
public Dictionary<int, float[]> currentMemories = new Dictionary<int, float[]>(32);
[Tooltip("Define state, observation, and action spaces for the Brain.")]
private Dictionary<Agent, AgentInfo> agentInfos =
new Dictionary<Agent, AgentInfo>(1024);
[Tooltip("Define state, observation, and action spaces for the Brain.")]
/**< \brief Defines what is the type of the brain :
/**< \brief Defines what is the type of the brain :
[Tooltip("Describes how the Brain will decide actions.")]
[Tooltip("Describes how the Brain will decide actions.")]
[HideInInspector]
/**< \brief Keeps track of the agents which subscribe to this brain*/
public Dictionary<int, Agent> agents = new Dictionary<int, Agent>();
//[HideInInspector]
///**< \brief Keeps track of the agents which subscribe to this brain*/
//public Dictionary<int, Agent> agents = new Dictionary<int, Agent>();
[SerializeField]
ScriptableObject[] CoreBrains;

// instanciated and we create instances of each CoreBrain
if (CoreBrains == null)
{
CoreBrains = new ScriptableObject[System.Enum.GetValues(typeof(BrainType)).Length];
int numCoreBrains = System.Enum.GetValues(typeof(BrainType)).Length;
CoreBrains = new ScriptableObject[numCoreBrains];
CoreBrains[(int)bt] = ScriptableObject.CreateInstance("CoreBrain" + bt.ToString());
CoreBrains[(int)bt] =
ScriptableObject.CreateInstance(
"CoreBrain" + bt.ToString());
}
}

break;
if (CoreBrains[(int)bt] == null)
{
CoreBrains[(int)bt] = ScriptableObject.CreateInstance("CoreBrain" + bt.ToString());
CoreBrains[(int)bt] =
ScriptableObject.CreateInstance(
"CoreBrain" + bt.ToString());
}
}
}

if (CoreBrains.Length < System.Enum.GetValues(typeof(BrainType)).Length)
{
ScriptableObject[] new_CoreBrains = new ScriptableObject[System.Enum.GetValues(typeof(BrainType)).Length];
int numCoreBrains = System.Enum.GetValues(typeof(BrainType)).Length;
ScriptableObject[] new_CoreBrains =
new ScriptableObject[numCoreBrains];
foreach (BrainType bt in System.Enum.GetValues(typeof(BrainType)))
{
if ((int)bt < CoreBrains.Length)

else
{
new_CoreBrains[(int)bt] = ScriptableObject.CreateInstance("CoreBrain" + bt.ToString());
new_CoreBrains[(int)bt] =
ScriptableObject.CreateInstance(
"CoreBrain" + bt.ToString());
}
}
CoreBrains = new_CoreBrains;

{
if (CoreBrains[(int)bt] == null)
{
CoreBrains[(int)bt] = ScriptableObject.CreateInstance("CoreBrain" + bt.ToString());
CoreBrains[(int)bt] =
ScriptableObject.CreateInstance(
"CoreBrain" + bt.ToString());
CoreBrains[(int)bt] = ScriptableObject.Instantiate(CoreBrains[(int)bt]);
CoreBrains[(int)bt] =
ScriptableObject.Instantiate(CoreBrains[(int)bt]);
}
}
instanceID = gameObject.GetInstanceID();

}
/// This is called by the Academy at the start of the environemnt.
public void InitializeBrain()
public void InitializeBrain(Academy aca, Communicator communicator)
coreBrain.InitializeCoreBrain();
}
public void CollectEverything()
{
currentStates.Clear();
currentCameras.Clear();
currentRewards.Clear();
currentDones.Clear();
currentMaxes.Clear();
currentActions.Clear();
currentMemories.Clear();
foreach (KeyValuePair<int, Agent> idAgent in agents)
{
idAgent.Value.SetCumulativeReward();
List<float> states = idAgent.Value.ClearAndCollectState();
if ((states.Count != brainParameters.stateSize * brainParameters.stackedStates) && (brainParameters.stateSpaceType == StateType.continuous))
{
throw new UnityAgentsException(string.Format(@"The number of states does not match for agent {0}:
Was expecting {1} continuous states but received {2}.", idAgent.Value.gameObject.name, brainParameters.stateSize, states.Count));
}
if ((states.Count != brainParameters.stackedStates) && (brainParameters.stateSpaceType == StateType.discrete))
{
throw new UnityAgentsException(string.Format(@"The number of states does not match for agent {0}:
Was expecting 1 discrete states but received {1}.", idAgent.Value.gameObject.name, states.Count));
}
List<Camera> observations = idAgent.Value.observations;
if (observations.Count < brainParameters.cameraResolutions.Count())
{
throw new UnityAgentsException(string.Format(@"The number of observations does not match for agent {0}:
Was expecting at least {1} observation but received {2}.", idAgent.Value.gameObject.name, brainParameters.cameraResolutions.Count(), observations.Count));
}
currentStates.Add(idAgent.Key, states);
currentCameras.Add(idAgent.Key, observations);
currentRewards.Add(idAgent.Key, idAgent.Value.reward);
currentDones.Add(idAgent.Key, idAgent.Value.done);
currentMaxes.Add(idAgent.Key, idAgent.Value.maxStepReached);
currentActions.Add(idAgent.Key, idAgent.Value.agentStoredAction);
currentMemories.Add(idAgent.Key, idAgent.Value.memory);
}
}
/// Collects the states of all the agents which subscribe to this brain
/// and returns a dictionary {id -> state}
public Dictionary<int, List<float>> CollectStates()
{
currentStates.Clear();
foreach (KeyValuePair<int, Agent> idAgent in agents)
{
idAgent.Value.SetCumulativeReward();
List<float> states = idAgent.Value.ClearAndCollectState();
if ((states.Count != brainParameters.stateSize * brainParameters.stackedStates) && (brainParameters.stateSpaceType == StateType.continuous))
{
throw new UnityAgentsException(string.Format(@"The number of states does not match for agent {0}:
Was expecting {1} continuous states but received {2}.", idAgent.Value.gameObject.name, brainParameters.stateSize * brainParameters.stackedStates, states.Count));
}
if ((states.Count != brainParameters.stackedStates) && (brainParameters.stateSpaceType == StateType.discrete))
{
throw new UnityAgentsException(string.Format(@"The number of states does not match for agent {0}:
Was expecting {1} discrete states but received {2}.", idAgent.Value.gameObject.name, brainParameters.stackedStates, states.Count));
}
currentStates.Add(idAgent.Key, states);
}
return currentStates;
}
/// Collects the observations of all the agents which subscribe to this
/// brain and returns a dictionary {id -> Camera}
public Dictionary<int, List<Camera>> CollectObservations()
{
currentCameras.Clear();
foreach (KeyValuePair<int, Agent> idAgent in agents)
{
List<Camera> observations = idAgent.Value.observations;
if (observations.Count < brainParameters.cameraResolutions.Count())
{
throw new UnityAgentsException(string.Format(@"The number of observations does not match for agent {0}:
Was expecting at least {1} observation but received {2}.", idAgent.Value.gameObject.name, brainParameters.cameraResolutions.Count(), observations.Count));
}
currentCameras.Add(idAgent.Key, observations);
}
return currentCameras;
}
/// Collects the rewards of all the agents which subscribe to this brain
/// and returns a dictionary {id -> reward}
public Dictionary<int, float> CollectRewards()
{
currentRewards.Clear();
foreach (KeyValuePair<int, Agent> idAgent in agents)
{
currentRewards.Add(idAgent.Key, idAgent.Value.reward);
}
return currentRewards;
}
/// Collects the done flag of all the agents which subscribe to this brain
/// and returns a dictionary {id -> done}
public Dictionary<int, bool> CollectDones()
{
currentDones.Clear();
foreach (KeyValuePair<int, Agent> idAgent in agents)
{
currentDones.Add(idAgent.Key, idAgent.Value.done);
}
return currentDones;
}
/// Collects the done flag of all the agents which subscribe to this brain
/// and returns a dictionary {id -> done}
public Dictionary<int, bool> CollectMaxes()
{
currentMaxes.Clear();
foreach (KeyValuePair<int, Agent> idAgent in agents)
{
currentMaxes.Add(idAgent.Key, idAgent.Value.maxStepReached);
}
return currentMaxes;
}
/// Collects the actions of all the agents which subscribe to this brain
/// and returns a dictionary {id -> action}
public Dictionary<int, float[]> CollectActions()
{
currentActions.Clear();
foreach (KeyValuePair<int, Agent> idAgent in agents)
{
currentActions.Add(idAgent.Key, idAgent.Value.agentStoredAction);
}
return currentActions;
}
/// Collects the memories of all the agents which subscribe to this brain
/// and returns a dictionary {id -> memories}
public Dictionary<int, float[]> CollectMemories()
{
currentMemories.Clear();
foreach (KeyValuePair<int, Agent> idAgent in agents)
{
currentMemories.Add(idAgent.Key, idAgent.Value.memory);
}
return currentMemories;
}
/// Takes a dictionary {id -> memories} and sends the memories to the
/// corresponding agents
public void SendMemories(Dictionary<int, float[]> memories)
{
foreach (KeyValuePair<int, Agent> idAgent in agents)
{
idAgent.Value.memory = memories[idAgent.Key];
}
}
/// Takes a dictionary {id -> actions} and sends the actions to the
/// corresponding agents
public void SendActions(Dictionary<int, float[]> actions)
{
foreach (KeyValuePair<int, Agent> idAgent in agents)
{
//Add a check here to see if the component was destroyed ?
idAgent.Value.UpdateAction(actions[idAgent.Key]);
}
}
/// Takes a dictionary {id -> values} and sends the values to the
/// corresponding agents
public void SendValues(Dictionary<int, float> values)
{
foreach (KeyValuePair<int, Agent> idAgent in agents)
{
//Add a check here to see if the component was destroyed ?
idAgent.Value.value = values[idAgent.Key];
}
}
///Sets all the agents which subscribe to the brain to done
public void SendDone()
{
foreach (KeyValuePair<int, Agent> idAgent in agents)
{
idAgent.Value.done = true;
}
coreBrain.InitializeCoreBrain(communicator);
aca.BrainDecideAction += DecideAction;
///Sets all the agents which subscribe to the brain to maxStepReached
public void SendMaxReached()
public void SendState(Agent agent, AgentInfo info)
foreach (KeyValuePair<int, Agent> idAgent in agents)
{
idAgent.Value.maxStepReached = true;
}
}
agentInfos.Add(agent, info);
/// Uses coreBrain to call SendState on the CoreBrain
public void SendState()
{
coreBrain.SendState();
/// Uses coreBrain to call decideAction on the CoreBrain
public void DecideAction()
void DecideAction()
coreBrain.DecideAction();
}
coreBrain.DecideAction(agentInfos);
agentInfos.Clear();
/// \brief Is used by the Academy to send a step message to all the agents
/// which are not done
public void Step()
{
var agentsToIterate = agents.Values.ToList();
foreach (Agent agent in agentsToIterate)
{
if (!agent.done)
{
agent.Step();
}
}
}
/// Is used by the Academy to reset the agents if they are done
public void ResetIfDone()
{
var agentsToIterate = agents.Values.ToList();
foreach (Agent agent in agentsToIterate)
{
if (agent.done)
{
if (!agent.resetOnDone)
{
agent.AgentOnDone();
}
else
{
agent.Reset();
}
}
}
}
/// Is used by the Academy to reset all agents
public void Reset()
{
foreach (Agent agent in agents.Values)
{
agent.Reset();
agent.done = false;
agent.maxStepReached = false;
}
}
/// \brief Is used by the Academy reset the done flag and the rewards of the
/// agents that subscribe to the brain
public void ResetDoneAndReward()
{
foreach (Agent agent in agents.Values)
{
if (!agent.done || agent.resetOnDone)
{
agent.ResetReward();
agent.done = false;
agent.maxStepReached = false;
}
}
}
/** Contains logic for coverting a camera component into a Texture2D. */
public Texture2D ObservationToTex(Camera cam, int width, int height)
{
Rect oldRec = cam.rect;
cam.rect = new Rect(0f, 0f, 1f, 1f);
var depth = 24;
var format = RenderTextureFormat.Default;
var readWrite = RenderTextureReadWrite.Default;
var tempRT =
RenderTexture.GetTemporary(width, height, depth, format, readWrite);
var tex = new Texture2D(width, height, TextureFormat.RGB24, false);
var prevActiveRT = RenderTexture.active;
var prevCameraRT = cam.targetTexture;
// render to offscreen texture (readonly from CPU side)
RenderTexture.active = tempRT;
cam.targetTexture = tempRT;
cam.Render();
tex.ReadPixels(new Rect(0, 0, tex.width, tex.height), 0, 0);
tex.Apply();
cam.targetTexture = prevCameraRT;
cam.rect = oldRec;
RenderTexture.active = prevActiveRT;
RenderTexture.ReleaseTemporary(tempRT);
return tex;
}
/// Contains logic to convert the agent's cameras into observation list
/// (as list of float arrays)
public List<float[,,,]> GetObservationMatrixList(List<int> agent_keys)
{
int numImageObservations = brainParameters.cameraResolutions.Length;
var observationMatrixList = new List<float[,,,]>(numImageObservations);
Dictionary<int, List<Camera>> observations = CollectObservations();
for (int obs_number = 0; obs_number < numImageObservations; obs_number++)
{
var width = brainParameters.cameraResolutions[obs_number].width;
var height = brainParameters.cameraResolutions[obs_number].height;
var bw = brainParameters.cameraResolutions[obs_number].blackAndWhite;
var pixels = 0;
if (bw)
pixels = 1;
else
pixels = 3;
var observationMatrix = new float[agent_keys.Count, height,
width, pixels];
var i = 0;
foreach (int k in agent_keys)
{
Camera agent_obs = observations[k][obs_number];
var tex = ObservationToTex(agent_obs, width, height);
Color32[] cc = tex.GetPixels32();
int texHeight = tex.height;
for (int w = 0; w < width; w++)
{
for (int h = 0; h < height; h++)
{
Color32 currentPixel = cc[h * width + w];
if (!bw)
{
observationMatrix[i, texHeight - h - 1, w, 0] = currentPixel.r;
observationMatrix[i, texHeight - h - 1, w, 1] = currentPixel.g;
observationMatrix[i, texHeight - h - 1, w, 2] = currentPixel.b;
}
else
{
observationMatrix[i, texHeight - h - 1, w, 0] = (currentPixel.r + currentPixel.g + currentPixel.b) / 3;
}
}
}
DestroyImmediate(tex);
Resources.UnloadUnusedAssets();
i++;
}
observationMatrixList.Add(observationMatrix);
}
return observationMatrixList;
}
}

7
unity-environment/Assets/ML-Agents/Scripts/Communicator.cs


/// was given outside of Unity
ExternalCommand GetCommand();
void UpdateCommand();
void SetCommand(ExternalCommand c);
Dictionary<string, bool> GetHasTried();
Dictionary<string, bool> GetSent();
}

7
unity-environment/Assets/ML-Agents/Scripts/CoreBrain.cs


/// Implement setBrain so let the coreBrain know what brain is using it
void SetBrain(Brain b);
/// Implement this method to initialize CoreBrain
void InitializeCoreBrain();
void InitializeCoreBrain(Communicator communicator);
void DecideAction();
/// Implement this method to define the logic for sending the actions
void SendState();
void DecideAction(Dictionary<Agent, AgentInfo> agentInfo);
}

25
unity-environment/Assets/ML-Agents/Scripts/CoreBrainExternal.cs


/// Generates the communicator for the Academy if none was present and
/// subscribe to ExternalCommunicator if it was present.
public void InitializeCoreBrain()
public void InitializeCoreBrain(Communicator communicator)
if (brain.gameObject.transform.parent.gameObject.GetComponent<Academy>().communicator == null)
if (communicator == null)
{
coord = null;
throw new UnityAgentsException(string.Format("The brain {0} was set to" +

}
else if (brain.gameObject.transform.parent.gameObject.GetComponent<Academy>().communicator is ExternalCommunicator)
else if (communicator is ExternalCommunicator)
coord = (ExternalCommunicator)brain.gameObject.transform.parent.gameObject.GetComponent<Academy>().communicator;
coord = (ExternalCommunicator)communicator;
coord.SubscribeBrain(brain);
}

/// sends them to the agents
public void DecideAction()
public void DecideAction(Dictionary<Agent, AgentInfo> agentInfo)
brain.SendActions(coord.GetDecidedAction(brain.gameObject.name));
brain.SendMemories(coord.GetMemories(brain.gameObject.name));
brain.SendValues(coord.GetValues(brain.gameObject.name));
coord.GiveBrainInfo(brain, agentInfo);
}
/// Uses the communicator to send the states, observations, rewards and
/// dones outside of Unity
public void SendState()
{
if (coord != null)
{
coord.giveBrainInfo(brain);
}
return ;
}
/// Nothing needs to appear in the inspector

63
unity-environment/Assets/ML-Agents/Scripts/CoreBrainHeuristic.cs


}
/// Create the reference to decision
public void InitializeCoreBrain()
public void InitializeCoreBrain(Communicator communicator)
if ((brain.gameObject.transform.parent.gameObject.GetComponent<Academy>().communicator == null)
if ((communicator == null)
else if (brain.gameObject.transform.parent.gameObject.GetComponent<Academy>().communicator is ExternalCommunicator)
else if (communicator is ExternalCommunicator)
coord = (ExternalCommunicator)brain.gameObject.transform.parent.gameObject.GetComponent<Academy>().communicator;
coord = (ExternalCommunicator)communicator;
public void DecideAction()
public void DecideAction(Dictionary<Agent, AgentInfo> agentInfo)
if (decision == null)
if (coord!=null)
{
coord.GiveBrainInfo(brain, agentInfo);
}
if (decision == null)
var actions = new Dictionary<int, float[]>();
var new_memories = new Dictionary<int, float[]>();
Dictionary<int, List<float>> states = brain.CollectStates();
Dictionary<int, List<Camera>> observations = brain.CollectObservations();
Dictionary<int, float> rewards = brain.CollectRewards();
Dictionary<int, bool> dones = brain.CollectDones();
Dictionary<int, float[]> old_memories = brain.CollectMemories();
foreach (KeyValuePair<int, Agent> idAgent in brain.agents)
foreach (Agent agent in agentInfo.Keys)
actions.Add(idAgent.Key, decision.Decide(
states[idAgent.Key],
observations[idAgent.Key],
rewards[idAgent.Key],
dones[idAgent.Key],
old_memories[idAgent.Key]));
agent.UpdateVectorAction(decision.Decide(
agentInfo[agent].stackedVectorObservation,
agentInfo[agent].visualObservations,
agentInfo[agent].reward,
agentInfo[agent].done,
agentInfo[agent].memories));
foreach (KeyValuePair<int, Agent> idAgent in brain.agents)
foreach (Agent agent in agentInfo.Keys)
new_memories.Add(idAgent.Key, decision.MakeMemory(
states[idAgent.Key],
observations[idAgent.Key],
rewards[idAgent.Key],
dones[idAgent.Key],
old_memories[idAgent.Key]));
}
brain.SendActions(actions);
brain.SendMemories(new_memories);
}
/// Nothing needs to be implemented, the states are collected in DecideAction
public void SendState()
{
if (coord!=null)
{
coord.giveBrainInfo(brain);
agent.UpdateMemoriesAction(decision.MakeMemory(
agentInfo[agent].stackedVectorObservation,
agentInfo[agent].visualObservations,
agentInfo[agent].reward,
agentInfo[agent].done,
agentInfo[agent].memories));
}
}

216
unity-environment/Assets/ML-Agents/Scripts/CoreBrainInternal.cs


[SerializeField]
[Tooltip("If checked, the brain will broadcast states and actions to Python.")]
#pragma warning disable
#pragma warning restore
[System.Serializable]
private struct TensorFlowAgentPlaceholder

public string[] ObservationPlaceholderName;
/// Modify only in inspector : Name of the action node
public string ActionPlaceholderName = "action";
/// Modify only in inspector : Name of the previous action node
public string PreviousActionPlaceholderName = "prev_action";
#if ENABLE_TENSORFLOW
TFGraph graph;

bool hasBatchSize;
bool hasValue;
List<int> agentKeys;
int currentBatchSize;
List<Texture2D> texturesHolder;
int memorySize;
#endif
/// Reference to the brain that uses this CoreBrainInternal

}
/// Loads the tensorflow graph model to generate a TFGraph object
public void InitializeCoreBrain()
public void InitializeCoreBrain(Communicator communicator)
{
#if ENABLE_TENSORFLOW
#if UNITY_ANDROID

}
#endif
if ((brain.gameObject.transform.parent.gameObject.GetComponent<Academy>().communicator == null)
if ((communicator == null)
else if (brain.gameObject.transform.parent.gameObject.GetComponent<Academy>().communicator is ExternalCommunicator)
else if (communicator is ExternalCommunicator)
coord = (ExternalCommunicator)brain.gameObject.transform.parent.gameObject.GetComponent<Academy>().communicator;
coord = (ExternalCommunicator)communicator;
coord.SubscribeBrain(brain);
}

if ((graph[graphScope + RecurrentInPlaceholderName] != null) && (graph[graphScope + RecurrentOutPlaceholderName] != null))
{
hasRecurrent = true;
var runner = session.GetRunner();
runner.Fetch(graph[graphScope + "memory_size"][0]);
var networkOutput = runner.Run()[0].GetValue();
memorySize = (int)networkOutput;
hasState = true;
}
if (graph[graphScope + "value_estimate"] != null)
{
hasValue = true;
hasState = brain.brainParameters.vectorActionSpaceType == StateType.discrete;
}
if (graph[graphScope + PreviousActionPlaceholderName] != null)
{

observationMatrixList = new List<float[,,,]>();
texturesHolder = new List<Texture2D>();
/// Collects information from the agents and store them
public void SendState()
/// Uses the stored information to run the tensorflow graph and generate
/// the actions.
public void DecideAction(Dictionary<Agent, AgentInfo> agentInfo)
agentKeys = new List<int>(brain.agents.Keys);
currentBatchSize = brain.agents.Count;
if (coord != null)
{
coord.GiveBrainInfo(brain, agentInfo);
}
int currentBatchSize = agentInfo.Count();
List<Agent> agentList = agentInfo.Keys.ToList();
if (coord != null)
{
coord.giveBrainInfo(brain);
}
return;
}

{
int stateLength = 1;
if (brain.brainParameters.stateSpaceType == StateType.continuous)
if (brain.brainParameters.vectorObservationSpaceType == StateType.continuous)
stateLength = brain.brainParameters.stateSize;
stateLength = brain.brainParameters.vectorObservationSize;
Dictionary<int, List<float>> states = brain.CollectStates();
inputState = new float[currentBatchSize, stateLength * brain.brainParameters.stackedStates];
inputState = new float[currentBatchSize, stateLength * brain.brainParameters.numStackedVectorObservations];
foreach (int k in agentKeys)
foreach (Agent agent in agentList)
List<float> state_list = states[k];
for (int j = 0; j < stateLength * brain.brainParameters.stackedStates; j++)
List<float> state_list = agentInfo[agent].stackedVectorObservation;
for (int j = 0; j < brain.brainParameters.vectorObservationSize * brain.brainParameters.numStackedVectorObservations; j++)
{
inputState[i, j] = state_list[j];
}

// Create the state tensor
if (hasPrevAction)
{
Dictionary<int, float[]> prevActions = brain.CollectActions();
foreach (int k in agentKeys)
foreach (Agent agent in agentList)
float[] action_list = prevActions[k];
float[] action_list = agentInfo[agent].StoredVectorActions;
// Create the observation tensors
observationMatrixList = brain.GetObservationMatrixList(agentKeys);
observationMatrixList.Clear();
for (int observationIndex = 0; observationIndex < brain.brainParameters.cameraResolutions.Count(); observationIndex++){
texturesHolder.Clear();
foreach (Agent agent in agentList){
texturesHolder.Add(agentInfo[agent].visualObservations[observationIndex]);
}
observationMatrixList.Add(
BatchVisualObservations(texturesHolder, brain.brainParameters.cameraResolutions[observationIndex].blackAndWhite));
}
Dictionary<int, float[]> old_memories = brain.CollectMemories();
inputOldMemories = new float[currentBatchSize, brain.brainParameters.memorySize];
// Need to have variable memory size
inputOldMemories = new float[currentBatchSize, memorySize];
foreach (int k in agentKeys)
foreach (Agent agent in agentList)
float[] m = old_memories[k];
for (int j = 0; j < brain.brainParameters.memorySize; j++)
float[] m = agentInfo[agent].memories.ToArray();
for (int j = 0; j < m.Count(); j++)
inputOldMemories[i, j] = m[j];
}
i++;

if (coord != null)
{
coord.giveBrainInfo(brain);
}
#endif
}
/// Uses the stored information to run the tensorflow graph and generate
/// the actions.
public void DecideAction()
{
#if ENABLE_TENSORFLOW
if (currentBatchSize == 0)
{
return;
}
var runner = session.GetRunner();
try

// Create the state tensor
if (hasState)
{
if (brain.brainParameters.stateSpaceType == StateType.discrete)
if (brain.brainParameters.vectorObservationSpaceType == StateType.discrete)
{
var discreteInputState = new int[currentBatchSize, 1];
for (int i = 0; i < currentBatchSize; i++)

runner.AddInput(graph[graphScope + "sequence_length"][0], 1);
runner.AddInput(graph[graphScope + RecurrentInPlaceholderName][0], inputOldMemories);
runner.Fetch(graph[graphScope + RecurrentOutPlaceholderName][0]);
}
if (hasValue)
{
runner.Fetch(graph[graphScope + "value_estimate"][0]);
}
TFTensor[] networkOutput;

// Create the recurrent tensor
if (hasRecurrent)
{
var new_memories = new Dictionary<int, float[]>();
foreach (int k in agentKeys)
foreach (Agent agent in agentList)
var m = new float[brain.brainParameters.memorySize];
for (int j = 0; j < brain.brainParameters.memorySize; j++)
var m = new float[memorySize];
for (int j = 0; j < memorySize; j++)
new_memories.Add(k, m);
agent.UpdateMemoriesAction(m.ToList());
brain.SendMemories(new_memories);
var actions = new Dictionary<int, float[]>();
if (brain.brainParameters.actionSpaceType == StateType.continuous)
if (brain.brainParameters.vectorActionSpaceType == StateType.continuous)
foreach (int k in agentKeys)
foreach (Agent agent in agentList)
var a = new float[brain.brainParameters.actionSize];
for (int j = 0; j < brain.brainParameters.actionSize; j++)
var a = new float[brain.brainParameters.vectorActionSize];
for (int j = 0; j < brain.brainParameters.vectorActionSize; j++)
actions.Add(k, a);
agent.UpdateVectorAction(a);
else if (brain.brainParameters.actionSpaceType == StateType.discrete)
else if (brain.brainParameters.vectorActionSpaceType == StateType.discrete)
foreach (int k in agentKeys)
foreach (Agent agent in agentList)
actions.Add(k, a);
agent.UpdateVectorAction(a);
brain.SendActions(actions);
if (hasValue)
#else
if (agentInfo.Count > 0)
var values = new Dictionary<int, float>();
float[,] value_tensor;
if (hasRecurrent)
{
value_tensor = networkOutput[2].GetValue() as float[,];
}
else
{
value_tensor = networkOutput[1].GetValue() as float[,];
}
var i = 0;
foreach (int k in agentKeys)
{
var v = (float)(value_tensor[i, 0]);
values.Add(k, v);
i++;
}
brain.SendValues(values);
throw new UnityAgentsException(string.Format(@"The brain {0} was set to Internal but the Tensorflow
library is not present in the Unity project.",
brain.gameObject.name));
#endif
}

EditorGUILayout.LabelField("", GUI.skin.horizontalSlider);
broadcast = EditorGUILayout.Toggle(new GUIContent("Broadcast",
"If checked, the brain will broadcast states and actions to Python."), broadcast);
var serializedBrain = new SerializedObject(this);
GUILayout.Label("Edit the Tensorflow graph parameters here");
var tfGraphModel = serializedBrain.FindProperty("graphModel");

if ((ObservationPlaceholderName[obs_number] == "") || (ObservationPlaceholderName[obs_number] == null))
{
ObservationPlaceholderName[obs_number] = "observation_" + obs_number;
ObservationPlaceholderName[obs_number] = "visual_observation_" + obs_number;
}
}
var opn = serializedBrain.FindProperty("ObservationPlaceholderName");

EditorGUILayout.PropertyField(tfPlaceholders, true);
serializedBrain.ApplyModifiedProperties();
#endif
#if !ENABLE_TENSORFLOW && UNITY_EDITOR
EditorGUILayout.HelpBox (@"You need to install the TensorflowSharp plugin in order to use the internal brain.", MessageType.Error);
#endif
}
/// Contains logic to convert the agent's cameras into observation list
/// (as list of float arrays)
public static float[,,,] BatchVisualObservations(List<Texture2D> textures, bool BlackAndWhite)
{
int batchSize = textures.Count();
int width = textures[0].width;
int height = textures[0].height;
int pixels = 0;
if (BlackAndWhite)
pixels = 1;
else
pixels = 3;
float[,,,] result = new float[batchSize, width, height, pixels];
for (int b = 0; b < batchSize; b++)
{
Color32[] cc = textures[b].GetPixels32();
for (int w = 0; w < width; w++)
{
for (int h = 0; h < height; h++)
{
Color32 currentPixel = cc[h * width + w];
if (!BlackAndWhite)
{
result[b, textures[b].height - h - 1, w, 0] = currentPixel.r;
result[b, textures[b].height - h - 1, w, 1] = currentPixel.g;
result[b, textures[b].height - h - 1, w, 2] = currentPixel.b;
}
else
{
result[b, textures[b].height - h - 1, w, 0] = (currentPixel.r + currentPixel.g + currentPixel.b) / 3;
}
}
}
}
return result;
}
}

93
unity-environment/Assets/ML-Agents/Scripts/CoreBrainPlayer.cs


public int index;
public float value;
}
ExternalCommunicator coord;
[SerializeField]

[SerializeField]
[Tooltip("The list of keys and the value they correspond to for discrete control.")]
[Tooltip("The list of keys and the value they correspond to for discrete control.")]
/// Contains the mapping from input to discrete actions
private DiscretePlayerAction[] discretePlayerActions;
[SerializeField]

}
/// Nothing to implement
public void InitializeCoreBrain()
public void InitializeCoreBrain(Communicator communicator)
if ((brain.gameObject.transform.parent.gameObject.GetComponent<Academy>().communicator == null)
if ((communicator == null)
else if (brain.gameObject.transform.parent.gameObject.GetComponent<Academy>().communicator is ExternalCommunicator)
else if (communicator is ExternalCommunicator)
coord = (ExternalCommunicator)brain.gameObject.transform.parent.gameObject.GetComponent<Academy>().communicator;
coord = (ExternalCommunicator)communicator;
coord.SubscribeBrain(brain);
}
}

public void DecideAction()
public void DecideAction(Dictionary<Agent, AgentInfo> agentInfo)
if (brain.brainParameters.actionSpaceType == StateType.continuous)
if (coord != null)
{
coord.GiveBrainInfo(brain, agentInfo);
}
if (brain.brainParameters.vectorActionSpaceType == StateType.continuous)
var action = new float[brain.brainParameters.actionSize];
foreach (ContinuousPlayerAction cha in continuousPlayerActions)
foreach (Agent agent in agentInfo.Keys)
if (Input.GetKey(cha.key))
var action = new float[brain.brainParameters.vectorActionSize];
foreach (ContinuousPlayerAction cha in continuousPlayerActions)
action[cha.index] = cha.value;
if (Input.GetKey(cha.key))
{
action[cha.index] = cha.value;
}
agent.UpdateVectorAction(action);
var actions = new Dictionary<int, float[]>();
foreach (KeyValuePair<int, Agent> idAgent in brain.agents)
{
actions.Add(idAgent.Key, action);
}
brain.SendActions(actions);
var action = new float[1] { defaultAction };
foreach (DiscretePlayerAction dha in discretePlayerActions)
{
if (Input.GetKey(dha.key))
foreach (Agent agent in agentInfo.Keys)
{
var action = new float[1] { defaultAction };
foreach (DiscretePlayerAction dha in discretePlayerActions)
action[0] = (float)dha.value;
break;
if (Input.GetKey(dha.key))
{
action[0] = (float)dha.value;
break;
}
agent.UpdateVectorAction(action);
var actions = new Dictionary<int, float[]>();
foreach (KeyValuePair<int, Agent> idAgent in brain.agents)
{
actions.Add(idAgent.Key, action);
}
brain.SendActions(actions);
}
/// Nothing to implement, the Player does not use the state to make
/// decisions
public void SendState()
{
if (coord != null)
{
coord.giveBrainInfo(brain);
}
else
{
//The states are collected in order to debug the CollectStates method.
brain.CollectStates();
}
}
/// Displays continuous or discrete input mapping in the inspector

EditorGUILayout.LabelField("", GUI.skin.horizontalSlider);
broadcast = EditorGUILayout.Toggle(new GUIContent("Broadcast",
"If checked, the brain will broadcast states and actions to Python."), broadcast);
broadcast = EditorGUILayout.Toggle(new GUIContent("Broadcast",
"If checked, the brain will broadcast states and actions to Python."), broadcast);
if (brain.brainParameters.actionSpaceType == StateType.continuous)
if (brain.brainParameters.vectorActionSpaceType == StateType.continuous)
GUILayout.Label("Edit the continuous inputs for you actions", EditorStyles.boldLabel);
GUILayout.Label("Edit the continuous inputs for your actions", EditorStyles.boldLabel);
var chas = serializedBrain.FindProperty("continuousPlayerActions");
serializedBrain.Update();
EditorGUILayout.PropertyField(chas, true);

}
foreach (ContinuousPlayerAction cha in continuousPlayerActions)
{
if (cha.index >= brain.brainParameters.actionSize)
if (cha.index >= brain.brainParameters.vectorActionSize)
, cha.key.ToString(), cha.index.ToString(), brain.brainParameters.actionSize.ToString()), MessageType.Error);
, cha.key.ToString(), cha.index.ToString(), brain.brainParameters.vectorActionSize.ToString()), MessageType.Error);
}
}

GUILayout.Label("Edit the discrete inputs for you actions", EditorStyles.boldLabel);
GUILayout.Label("Edit the discrete inputs for your actions", EditorStyles.boldLabel);
defaultAction = EditorGUILayout.IntField("Default Action", defaultAction);
var dhas = serializedBrain.FindProperty("discretePlayerActions");
serializedBrain.Update();

4
unity-environment/Assets/ML-Agents/Scripts/Decision.cs


* @param memory The memories stored from the previous step with MakeMemory()
* @return The vector of actions the agent will take at the next step
*/
float[] Decide(List<float> state, List<Camera> observation, float reward, bool done, float[] memory);
float[] Decide(List<float> state, List<Texture2D> observation, float reward, bool done, List<float> memory);
/// \brief Implement this method to define the logic of memory making for
/// the CoreBrainHeuristic

* @param memory The memories stored from the previous step with MakeMemory()
* @return The vector of memories the agent will use at the next step
*/
float[] MakeMemory(List<float> state, List<Camera> observation, float reward, bool done, float[] memory);
List<float> MakeMemory(List<float> state, List<Texture2D> observation, float reward, bool done, List<float> memory);
}

265
unity-environment/Assets/ML-Agents/Scripts/ExternalCommunicator.cs


public class ExternalCommunicator : Communicator
{
ExternalCommand command = ExternalCommand.QUIT;
Dictionary<string, List<int>> current_agents;
Dictionary<string, List<Agent>> current_agents;
Dictionary<string, Dictionary<int, float[]>> storedActions;
Dictionary<string, Dictionary<int, float[]>> storedMemories;
Dictionary<string, Dictionary<int, float>> storedValues;
Dictionary<string, bool> triedSendState;
// For Messages
List<float> concatenatedStates = new List<float>(defaultNumAgents*defaultNumObservations);
List<float> concatenatedRewards = new List<float>(defaultNumAgents);
List<float> concatenatedMemories = new List<float>(defaultNumAgents * defaultNumObservations);
List<bool> concatenatedDones = new List<bool>(defaultNumAgents);
List<bool> concatenatedMaxes = new List<bool>(defaultNumAgents);
List<float> concatenatedActions = new List<float>(defaultNumAgents * defaultNumObservations);
int comPort;
int randomSeed;

/// Placeholder for state information to send.
[System.Serializable]
[HideInInspector]
public List<float> states;
public List<float> vectorObservations;
public List<float> actions;
public List<float> vectorActions;
public List<string> textObservations;
public List<bool> dones;
public List<bool> maxes;
}

string rMessage;
AgentMessage rMessage;
StringBuilder rMessageString = new StringBuilder(messageLength);
public Dictionary<string, List<float>> action { get; set; }
public Dictionary<string, List<float>> vector_action { get; set; }
public Dictionary<string, List<float>> value { get; set; }
public Dictionary<string, List<string>> text_action { get; set; }
}
/// Placeholder for reset parameter message

{
academy = aca;
brains = new List<Brain>();
current_agents = new Dictionary<string, List<int>>();
current_agents = new Dictionary<string, List<Agent>>();
triedSendState = new Dictionary<string, bool>();
storedActions = new Dictionary<string, Dictionary<int, float[]>>();
storedMemories = new Dictionary<string, Dictionary<int, float[]>>();
storedValues = new Dictionary<string, Dictionary<int, float>>();
}
/// Adds the brain to the list of brains which have already decided their

brains.Add(brain);
triedSendState[brain.gameObject.name] = false;
hasSentState[brain.gameObject.name] = false;
}

sender.Connect("localhost", comPort);
var accParamerters = new AcademyParameters();
accParamerters.brainParameters = new List<BrainParameters>();
accParamerters.brainNames = new List<string>();
accParamerters.externalBrainNames = new List<string>();

SendParameters(accParamerters);
sMessage = new StepMessage();
sMessage.agents = new List<int>(defaultNumAgents);
sMessage.vectorObservations = new List<float>(defaultNumAgents * defaultNumObservations);
sMessage.rewards = new List<float>(defaultNumAgents);
sMessage.memories= new List<float>(defaultNumAgents * defaultNumObservations);
sMessage.dones = new List<bool>(defaultNumAgents);
sMessage.vectorActions = new List<float>(defaultNumAgents * defaultNumObservations);
sMessage.maxes= new List<bool>(defaultNumAgents);
sMessage.textObservations = new List<string>(defaultNumAgents);
//Initialize the list of brains the Communicator must listen to
// Issue : This assumes all brains are broadcasting.
foreach(string k in accParamerters.brainNames){
current_agents[k] = new List<Agent>(defaultNumAgents);
hasSentState[k] = false;
triedSendState[k] = false;
}
}
void HandleLog(string logString, string stackTrace, LogType type)

/// Listens to the socket for a command and returns the corresponding
/// External Command.
public ExternalCommand GetCommand()
public void UpdateCommand()
{
int location = sender.Receive(messageHolder);
string message = Encoding.ASCII.GetString(messageHolder, 0, location);

return ExternalCommand.STEP;
command = ExternalCommand.STEP;
break;
return ExternalCommand.RESET;
command = ExternalCommand.RESET;
break;
return ExternalCommand.QUIT;
command = ExternalCommand.QUIT;
break;
return ExternalCommand.QUIT;
command = ExternalCommand.QUIT;
break;
public ExternalCommand GetCommand()
{
return command;
}
public void SetCommand(ExternalCommand c)
{
command = c;
}
var resetParams = JsonConvert.DeserializeObject<ResetParametersMessage>(rMessage);
var resetParams = JsonConvert.DeserializeObject<ResetParametersMessage>(rMessageString.ToString());
academy.isInference = !resetParams.train_model;
return resetParams.parameters;
}

private void Receive()
{
int location = sender.Receive(messageHolder);
rMessage = Encoding.ASCII.GetString(messageHolder, 0, location);
rMessageString.Clear();
rMessageString.Append(Encoding.ASCII.GetString(messageHolder, 0, location));
private string ReceiveAll(){
sender.Receive(lengthHolder);
private void ReceiveAll()
{
sender.Receive(lengthHolder);
rMessage = "";
while (location != totalLength){
rMessageString.Clear();
while (location != totalLength)
{
rMessage += Encoding.ASCII.GetString(messageHolder, 0, fragment);
rMessageString.Append(Encoding.ASCII.GetString(messageHolder, 0, fragment));
return rMessage;
}
/// Ends connection and closes environment

}
/// Collects the information from the brains and sends it accross the socket
public void giveBrainInfo(Brain brain)
public void GiveBrainInfo(Brain brain, Dictionary<Agent, AgentInfo> agentInfo)
current_agents[brainName] = new List<int>(brain.agents.Keys);
brain.CollectEverything();
triedSendState[brainName] = true;
concatenatedStates.Clear();
concatenatedRewards.Clear();
concatenatedMemories.Clear();
concatenatedDones.Clear();
concatenatedMaxes.Clear();
concatenatedActions.Clear();
foreach (int id in current_agents[brainName])
current_agents[brainName].Clear();
foreach (Agent agent in agentInfo.Keys)
concatenatedStates.AddRange(brain.currentStates[id]);
concatenatedRewards.Add(brain.currentRewards[id]);
concatenatedMemories.AddRange(brain.currentMemories[id].ToList());
concatenatedDones.Add(brain.currentDones[id]);
concatenatedMaxes.Add(brain.currentMaxes[id]);
concatenatedActions.AddRange(brain.currentActions[id].ToList());
current_agents[brainName].Add(agent);
if (current_agents[brainName].Count() > 0)
{
hasSentState[brainName] = true;
sMessage.brain_name = brainName;
sMessage.agents.Clear();
sMessage.vectorObservations.Clear();
sMessage.rewards.Clear();
sMessage.memories.Clear();
sMessage.dones.Clear();
sMessage.vectorActions.Clear();
sMessage.maxes.Clear();
sMessage.textObservations.Clear();
sMessage.brain_name = brainName;
sMessage.agents = current_agents[brainName];
sMessage.states = concatenatedStates;
sMessage.rewards = concatenatedRewards;
sMessage.actions = concatenatedActions;
sMessage.memories = concatenatedMemories;
sMessage.dones = concatenatedDones;
sMessage.maxes = concatenatedMaxes;
int memorySize = 0;
foreach (Agent agent in current_agents[brainName])
{
memorySize = Mathf.Max(agentInfo[agent].memories.Count, memorySize);
}
sMessageString = JsonUtility.ToJson(sMessage);
sender.Send(AppendLength(Encoding.ASCII.GetBytes(sMessageString)));
Receive();
int i = 0;
foreach (resolution res in brain.brainParameters.cameraResolutions)
{
foreach (int id in current_agents[brainName])
foreach (Agent agent in current_agents[brainName])
sender.Send(AppendLength(TexToByteArray(brain.ObservationToTex(brain.currentCameras[id][i], res.width, res.height))));
Receive();
sMessage.agents.Add(agentInfo[agent].id);
sMessage.vectorObservations.AddRange(agentInfo[agent].stackedVectorObservation);
sMessage.rewards.Add(agentInfo[agent].reward);
sMessage.memories.AddRange(agentInfo[agent].memories);
for (int j = 0; j < memorySize - agentInfo[agent].memories.Count; j++ )
sMessage.memories.Add(0f);
sMessage.dones.Add(agentInfo[agent].done);
sMessage.vectorActions.AddRange(agentInfo[agent].StoredVectorActions.ToList());
sMessage.maxes.Add(agentInfo[agent].maxStepReached);
sMessage.textObservations.Add(agentInfo[agent].textObservation);
i++;
}
hasSentState[brainName] = true;
if (hasSentState.Values.All(x => x))
sMessageString = JsonUtility.ToJson(sMessage);
sender.Send(AppendLength(Encoding.ASCII.GetBytes(sMessageString)));
Receive();
int i = 0;
foreach (resolution res in brain.brainParameters.cameraResolutions)
{
foreach (Agent agent in current_agents[brainName])
{
sender.Send(AppendLength(TexToByteArray(agentInfo[agent].visualObservations[i])));
Receive();
}
i++;
}
}
if (triedSendState.Values.All(x => x))
// if all the brains listed have sent their state
sender.Send(Encoding.ASCII.GetBytes((academy.done ? "True" : "False")));
List<string> brainNames = hasSentState.Keys.ToList();
foreach (string k in brainNames)
if (hasSentState.Values.Any(x => x))
{
// if all the brains listed have sent their state
sender.Send(AppendLength(Encoding.ASCII.GetBytes("END_OF_MESSAGE:" + (academy.IsDone() ? "True" : "False"))));
UpdateCommand();
if (GetCommand() == ExternalCommand.STEP)
{
UpdateActions();
}
}
foreach (string k in current_agents.Keys)
triedSendState[k] = false;
public Dictionary<string, bool> GetHasTried(){
return triedSendState;
}
public Dictionary<string, bool> GetSent()
{
return hasSentState;
}
// TO MODIFY --------------------------------------------
var agentMessage = JsonConvert.DeserializeObject<AgentMessage>(rMessage);
rMessage = JsonConvert.DeserializeObject<AgentMessage>(rMessageString.ToString());
foreach (Brain brain in brains)
{

var actionDict = new Dictionary<int, float[]>();
var memoryDict = new Dictionary<int, float[]>();
var valueDict = new Dictionary<int, float>();
var memorySize = rMessage.memory[brainName].Count() / current_agents[brainName].Count();
for (int i = 0; i < current_agents[brainName].Count; i++)
for (int i = 0; i < current_agents[brainName].Count(); i++)
if (brain.brainParameters.actionSpaceType == StateType.continuous)
if (brain.brainParameters.vectorActionSpaceType == StateType.continuous)
actionDict.Add(current_agents[brainName][i],
agentMessage.action[brainName].GetRange(i * brain.brainParameters.actionSize, brain.brainParameters.actionSize).ToArray());
current_agents[brainName][i].UpdateVectorAction(rMessage.vector_action[brainName].GetRange(
i * brain.brainParameters.vectorActionSize, brain.brainParameters.vectorActionSize).ToArray());
actionDict.Add(current_agents[brainName][i],
agentMessage.action[brainName].GetRange(i, 1).ToArray());
current_agents[brainName][i].UpdateVectorAction(rMessage.vector_action[brainName].GetRange(i, 1).ToArray());
memoryDict.Add(current_agents[brainName][i],
agentMessage.memory[brainName].GetRange(i * brain.brainParameters.memorySize, brain.brainParameters.memorySize).ToArray());
valueDict.Add(current_agents[brainName][i],
agentMessage.value[brainName][i]);
current_agents[brainName][i].UpdateMemoriesAction(
rMessage.memory[brainName].GetRange(i * memorySize, memorySize));
if (rMessage.text_action[brainName].Count > 0)
current_agents[brainName][i].UpdateTextAction(rMessage.text_action[brainName][i]);
storedActions[brainName] = actionDict;
storedMemories[brainName] = memoryDict;
storedValues[brainName] = valueDict;
/// Returns the actions corrensponding to the brain called brainName that
/// were received throught the socket.
public Dictionary<int, float[]> GetDecidedAction(string brainName)
{
return storedActions[brainName];
}
/// Returns the memories corrensponding to the brain called brainName that
/// were received throught the socket.
public Dictionary<int, float[]> GetMemories(string brainName)
{
return storedMemories[brainName];
}
/// Returns the values corrensponding to the brain called brainName that
/// were received throught the socket.
public Dictionary<int, float> GetValues(string brainName)
{
return storedValues[brainName];
}
}

5
unity-environment/Assets/ML-Agents/Scripts/Monitor.cs


isInstanciated = true;
}
canvas.SetActive(active);
if (canvas != null)
{
canvas.SetActive(active);
}
}

6
unity-environment/Assets/ML-Agents/Template.meta


fileFormatVersion: 2
guid: 11b74a3b21c094e088c0e9fb4d4167ee
guid: ec7cd430a31bc4a48991b31f59ce04f3
timeCreated: 1504127695
licenseType: Pro
timeCreated: 1517518529
licenseType: Free
DefaultImporter:
userData:
assetBundleName:

6
unity-environment/Assets/ML-Agents/Template/Scripts/TemplateAgent.cs


public override List<float> CollectState()
public override void CollectObservations()
List<float> state = new List<float>();
return state;
public override void AgentStep(float[] act)
public override void AgentAction(float[] act)
{
}

6
unity-environment/Assets/ML-Agents/Template/Scripts/TemplateDecision.cs


public class TemplateDecision : MonoBehaviour, Decision
{
public float[] Decide(List<float> state, List<Camera> observation, float reward, bool done, float[] memory)
public float[] Decide(List<float> state, List<Texture2D> observation, float reward, bool done, List<float> memory)
public float[] MakeMemory(List<float> state, List<Camera> observation, float reward, bool done, float[] memory)
public List<float> MakeMemory(List<float> state, List<Texture2D> observation, float reward, bool done, List<float> memory)
return new float[0];
return new List<float>();
}
}

68
unity-environment/Assets/ML-Agents/Editor/AgentEditor.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.Linq;
/*
This code is meant to modify the behavior of the inspector on Brain Components.
Depending on the type of brain that is used, the available fields will be modified in the inspector accordingly.
*/
[CustomEditor(typeof(Agent), true)]
[CanEditMultipleObjects]
public class AgentEditor : Editor
{
public override void OnInspectorGUI()
{
SerializedObject serializedAgent = serializedObject;
serializedAgent.Update();
SerializedProperty brain = serializedAgent.FindProperty("brain");
SerializedProperty actionsPerDecision = serializedAgent.FindProperty("agentParameters.numberOfActionsBetweenDecisions");
SerializedProperty maxSteps = serializedAgent.FindProperty("agentParameters.maxStep");
SerializedProperty isResetOnDone = serializedAgent.FindProperty("agentParameters.resetOnDone");
SerializedProperty isEBS = serializedAgent.FindProperty("agentParameters.onDemandDecision");
SerializedProperty cameras = serializedAgent.FindProperty("agentParameters.agentCameras");
EditorGUILayout.PropertyField(brain);
EditorGUILayout.LabelField("Agent Cameras");
for (int i = 0; i < cameras.arraySize; i++)
{
EditorGUILayout.PropertyField(cameras.GetArrayElementAtIndex(i), new GUIContent("Camera " + (i + 1).ToString() + ": "));
}
EditorGUILayout.BeginHorizontal();
if (GUILayout.Button("Add Camera", EditorStyles.miniButton))
{
cameras.arraySize++;
}
if (GUILayout.Button("Remove Camera", EditorStyles.miniButton))
{
cameras.arraySize--;
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.PropertyField(maxSteps, new GUIContent("Max Step",
"The per-agent maximum number of steps."));
EditorGUILayout.PropertyField(isResetOnDone, new GUIContent("Reset On Done",
"If checked, the agent will reset on done. Else, AgentOnDone() will be called."));
EditorGUILayout.PropertyField(isEBS, new GUIContent("On Demand Decision", "If checked, you must manually request decisions."));
if (!isEBS.boolValue)
{
EditorGUILayout.PropertyField(actionsPerDecision, new GUIContent("Decision Frequency", "The agent will automatically request a " +
"decision every X steps and perform an action at every step."));
actionsPerDecision.intValue = Mathf.Max(1, actionsPerDecision.intValue);
}
serializedAgent.ApplyModifiedProperties();
EditorGUILayout.LabelField("", GUI.skin.horizontalSlider);
base.OnInspectorGUI();
}
}

12
unity-environment/Assets/ML-Agents/Editor/AgentEditor.cs.meta


fileFormatVersion: 2
guid: c3b291e1cd0c64781861652b579d0ac1
timeCreated: 1503270350
licenseType: Free
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

745
unity-environment/Assets/ML-Agents/Editor/MLAgentsEditModeTest.cs


using UnityEngine;
using UnityEditor;
using UnityEngine.TestTools;
using NUnit.Framework;
using System.Collections;
using System.Reflection;
namespace MLAgentsTests
{
public class TestAcademy : Academy
{
public int initializeAcademyCalls;
public int academyResetCalls;
public int AcademyStepCalls;
public override void InitializeAcademy()
{
initializeAcademyCalls += 1;
}
public override void AcademyReset()
{
academyResetCalls += 1;
}
public override void AcademyStep()
{
AcademyStepCalls += 1;
}
}
public class TestAgent : Agent
{
public int initializeAgentCalls;
public int collectObservationsCalls;
public int agentActionCalls;
public int agentResetCalls;
public int agentOnDoneCalls;
public override void InitializeAgent()
{
initializeAgentCalls += 1;
}
public override void CollectObservations()
{
collectObservationsCalls += 1;
}
public override void AgentAction(float[] act)
{
agentActionCalls += 1;
AddReward(0.1f);
}
public override void AgentReset()
{
agentResetCalls += 1;
}
public override void AgentOnDone()
{
agentOnDoneCalls += 1;
}
}
public class TestBrain : Brain
{
// TODO : Mock a brain
}
public class EditModeTestGeneration
{
[Test]
public void TestAcademy()
{
// Use the Assert class to test conditions.
GameObject acaGO = new GameObject("TestAcademy");
acaGO.AddComponent<TestAcademy>();
TestAcademy aca = acaGO.GetComponent<TestAcademy>();
Assert.AreNotEqual(null, aca);
Assert.AreEqual(0, aca.initializeAcademyCalls);
Assert.AreEqual(0, aca.episodeCount);
Assert.AreEqual(0, aca.stepsSinceReset);
}
[Test]
public void TestAgent()
{
GameObject agentGO = new GameObject("TestAgent");
agentGO.AddComponent<TestAgent>();
TestAgent agent = agentGO.GetComponent<TestAgent>();
Assert.AreNotEqual(null, agent);
Assert.AreEqual(0, agent.initializeAgentCalls);
}
}
public class EditModeTestInitialization
{
[Test]
public void TestAcademy()
{
GameObject acaGO = new GameObject("TestAcademy");
acaGO.AddComponent<TestAcademy>();
TestAcademy aca = acaGO.GetComponent<TestAcademy>();
Assert.AreEqual(0, aca.initializeAcademyCalls);
Assert.AreEqual(0, aca.stepsSinceReset);
Assert.AreEqual(0, aca.episodeCount);
Assert.AreEqual(false, aca.IsDone());
//This will call the method even though it is private
MethodInfo AcademyInitializeMethod = typeof(Academy).GetMethod("_InitializeAcademy",
BindingFlags.Instance | BindingFlags.NonPublic);
AcademyInitializeMethod.Invoke(aca, new object[] { });
Assert.AreEqual(1, aca.initializeAcademyCalls);
Assert.AreEqual(1, aca.episodeCount);
Assert.AreEqual(0, aca.stepsSinceReset);
Assert.AreEqual(false, aca.IsDone());
Assert.AreEqual(1, aca.academyResetCalls);
Assert.AreEqual(0, aca.AcademyStepCalls);
}
[Test]
public void TestAgent()
{
GameObject agentGO1 = new GameObject("TestAgent");
agentGO1.AddComponent<TestAgent>();
TestAgent agent1 = agentGO1.GetComponent<TestAgent>();
GameObject agentGO2 = new GameObject("TestAgent");
agentGO2.AddComponent<TestAgent>();
TestAgent agent2 = agentGO2.GetComponent<TestAgent>();
GameObject acaGO = new GameObject("TestAcademy");
acaGO.AddComponent<TestAcademy>();
TestAcademy aca = acaGO.GetComponent<TestAcademy>();
GameObject brainGO = new GameObject("TestBrain");
brainGO.transform.parent = acaGO.transform;
brainGO.AddComponent<TestBrain>();
TestBrain brain = brainGO.GetComponent<TestBrain>();
brain.brainParameters = new BrainParameters();
brain.brainParameters.vectorObservationSize = 0;
agent1.GiveBrain(brain);
agent2.GiveBrain(brain);
Assert.AreEqual(false, agent1.IsDone());
Assert.AreEqual(false, agent2.IsDone());
Assert.AreEqual(0, agent1.agentResetCalls);
Assert.AreEqual(0, agent2.agentResetCalls);
Assert.AreEqual(0, agent1.initializeAgentCalls);
Assert.AreEqual(0, agent2.initializeAgentCalls);
Assert.AreEqual(0, agent1.agentActionCalls);
Assert.AreEqual(0, agent2.agentActionCalls);
MethodInfo AgentEnableMethod = typeof(Agent).GetMethod("_InitializeAgent",
BindingFlags.Instance | BindingFlags.NonPublic);
MethodInfo AcademyInitializeMethod = typeof(Academy).GetMethod("_InitializeAcademy",
BindingFlags.Instance | BindingFlags.NonPublic);
AgentEnableMethod.Invoke(agent2, new object[] { aca });
AcademyInitializeMethod.Invoke(aca, new object[] { });
AgentEnableMethod.Invoke(agent1, new object[] { aca });
Assert.AreEqual(false, agent1.IsDone());
Assert.AreEqual(false, agent2.IsDone());
//agent1 was not enabled when the academy started
Assert.AreEqual(0, agent1.agentResetCalls);
Assert.AreEqual(1, agent2.agentResetCalls);
Assert.AreEqual(1, agent1.initializeAgentCalls);
Assert.AreEqual(1, agent2.initializeAgentCalls);
Assert.AreEqual(0, agent1.agentActionCalls);
Assert.AreEqual(0, agent2.agentActionCalls);
}
}
public class EditModeTestStep
{
[Test]
public void TestAcademy()
{
GameObject acaGO = new GameObject("TestAcademy");
acaGO.AddComponent<TestAcademy>();
TestAcademy aca = acaGO.GetComponent<TestAcademy>();
MethodInfo AcademyInitializeMethod = typeof(Academy).GetMethod("_InitializeAcademy",
BindingFlags.Instance | BindingFlags.NonPublic);
AcademyInitializeMethod.Invoke(aca, new object[] { });
MethodInfo AcademyStepMethod = typeof(Academy).GetMethod("_AcademyStep",
BindingFlags.Instance | BindingFlags.NonPublic);
for (int i = 0; i < 10; i++){
Assert.AreEqual(1, aca.initializeAcademyCalls);
Assert.AreEqual(1, aca.episodeCount);
Assert.AreEqual(i, aca.stepsSinceReset);
Assert.AreEqual(false, aca.IsDone());
Assert.AreEqual(1, aca.academyResetCalls);
Assert.AreEqual(i, aca.AcademyStepCalls);
AcademyStepMethod.Invoke((object)aca, new object[] { });
}
}
[Test]
public void TestAgent()
{
GameObject agentGO1 = new GameObject("TestAgent");
agentGO1.AddComponent<TestAgent>();
TestAgent agent1 = agentGO1.GetComponent<TestAgent>();
GameObject agentGO2 = new GameObject("TestAgent");
agentGO2.AddComponent<TestAgent>();
TestAgent agent2 = agentGO2.GetComponent<TestAgent>();
GameObject acaGO = new GameObject("TestAcademy");
acaGO.AddComponent<TestAcademy>();
TestAcademy aca = acaGO.GetComponent<TestAcademy>();
GameObject brainGO = new GameObject("TestBrain");
brainGO.transform.parent = acaGO.transform;
brainGO.AddComponent<TestBrain>();
TestBrain brain = brainGO.GetComponent<TestBrain>();
MethodInfo AgentEnableMethod = typeof(Agent).GetMethod("_InitializeAgent",
BindingFlags.Instance | BindingFlags.NonPublic);
MethodInfo AcademyInitializeMethod = typeof(Academy).GetMethod("_InitializeAcademy",
BindingFlags.Instance | BindingFlags.NonPublic);
agent1.agentParameters = new AgentParameters();
agent2.agentParameters = new AgentParameters();
brain.brainParameters = new BrainParameters();
// We use event based so the agent will now try to send anything to the brain
agent1.agentParameters.onDemandDecision = false;
agent1.agentParameters.numberOfActionsBetweenDecisions = 2;
// agent1 will take an action at every step and request a decision every 2 steps
agent2.agentParameters.onDemandDecision = true;
// agent2 will request decisions only when RequestDecision is called
brain.brainParameters.vectorObservationSize = 0;
brain.brainParameters.cameraResolutions = new resolution[0];
agent1.GiveBrain(brain);
agent2.GiveBrain(brain);
AgentEnableMethod.Invoke(agent1, new object[] { aca });
AcademyInitializeMethod.Invoke(aca, new object[] { });
AgentEnableMethod.Invoke(agent2, new object[] { aca });
MethodInfo AcademyStepMethod = typeof(Academy).GetMethod("_AcademyStep",
BindingFlags.Instance | BindingFlags.NonPublic);
int requestDecision =0;
int requestAction=0;
for (int i = 0; i < 50; i++)
{
Assert.AreEqual(1, agent1.agentResetCalls);
Assert.AreEqual(0, agent2.agentResetCalls);
Assert.AreEqual(1, agent1.initializeAgentCalls);
Assert.AreEqual(1, agent2.initializeAgentCalls);
Assert.AreEqual(i, agent1.agentActionCalls);
Assert.AreEqual(requestAction, agent2.agentActionCalls);
Assert.AreEqual((i+1)/2, agent1.collectObservationsCalls);
Assert.AreEqual(requestDecision, agent2.collectObservationsCalls);
if (i % 3 == 0)
{
requestDecision +=1;
requestAction+=1;
agent2.RequestDecision();
}
else if (i % 5 == 0)
{
requestAction += 1;
agent2.RequestAction();
}
AcademyStepMethod.Invoke(aca, new object[] { });
}
}
}
public class EditModeTestReset
{
[Test]
public void TestAcademy()
{
GameObject acaGO = new GameObject("TestAcademy");
acaGO.AddComponent<TestAcademy>();
TestAcademy aca = acaGO.GetComponent<TestAcademy>();
MethodInfo AcademyInitializeMethod = typeof(Academy).GetMethod("_InitializeAcademy",
BindingFlags.Instance | BindingFlags.NonPublic);
AcademyInitializeMethod.Invoke(aca, new object[] { });
MethodInfo AcademyStepMethod = typeof(Academy).GetMethod("_AcademyStep",
BindingFlags.Instance | BindingFlags.NonPublic);
int numberReset = 1;
int stepsSinceReset = 0;
for (int i = 0; i < 50; i++)
{
Assert.AreEqual(stepsSinceReset, aca.stepsSinceReset);
Assert.AreEqual(1, aca.initializeAcademyCalls);
Assert.AreEqual(numberReset, aca.episodeCount);
Assert.AreEqual(false, aca.IsDone());
Assert.AreEqual(numberReset, aca.academyResetCalls);
Assert.AreEqual(i, aca.AcademyStepCalls);
stepsSinceReset += 1;
if (i % 5 == 3)
{
aca.Done();
numberReset += 1;
stepsSinceReset = 1;
Assert.AreEqual(true, aca.IsDone());
}
AcademyStepMethod.Invoke((object)aca, new object[] { });
}
}
[Test]
public void TestAgent()
{
GameObject agentGO1 = new GameObject("TestAgent");
agentGO1.AddComponent<TestAgent>();
TestAgent agent1 = agentGO1.GetComponent<TestAgent>();
GameObject agentGO2 = new GameObject("TestAgent");
agentGO2.AddComponent<TestAgent>();
TestAgent agent2 = agentGO2.GetComponent<TestAgent>();
GameObject acaGO = new GameObject("TestAcademy");
acaGO.AddComponent<TestAcademy>();
TestAcademy aca = acaGO.GetComponent<TestAcademy>();
GameObject brainGO = new GameObject("TestBrain");
brainGO.transform.parent = acaGO.transform;
brainGO.AddComponent<TestBrain>();
TestBrain brain = brainGO.GetComponent<TestBrain>();
MethodInfo AgentEnableMethod = typeof(Agent).GetMethod("_InitializeAgent",
BindingFlags.Instance | BindingFlags.NonPublic);
MethodInfo AcademyInitializeMethod = typeof(Academy).GetMethod("_InitializeAcademy",
BindingFlags.Instance | BindingFlags.NonPublic);
MethodInfo AcademyStepMethod = typeof(Academy).GetMethod("_AcademyStep",
BindingFlags.Instance | BindingFlags.NonPublic);
agent1.agentParameters = new AgentParameters();
agent2.agentParameters = new AgentParameters();
brain.brainParameters = new BrainParameters();
// We use event based so the agent will now try to send anything to the brain
agent1.agentParameters.onDemandDecision = false;
agent1.agentParameters.numberOfActionsBetweenDecisions = 2;
// agent1 will take an action at every step and request a decision every 2 steps
agent2.agentParameters.onDemandDecision = true;
// agent2 will request decisions only when RequestDecision is called
brain.brainParameters.vectorObservationSize = 0;
brain.brainParameters.cameraResolutions = new resolution[0];
agent1.GiveBrain(brain);
agent2.GiveBrain(brain);
AgentEnableMethod.Invoke(agent2, new object[] { aca });
AcademyInitializeMethod.Invoke(aca, new object[] { });
AgentEnableMethod.Invoke(agent1, new object[] { aca });
int numberAgent1Reset = 0; // Agent1 was not enabled at Academy start
int numberAgent2Reset = 1;
int numberAcaReset = 1;
int acaStepsSinceReset = 0;
int agent1StepSinceReset =0;
int agent2StepSinceReset=0;
int requestDecision = 0;
int requestAction = 0;
for (int i = 0; i < 5000; i++)
{
Assert.AreEqual(acaStepsSinceReset, aca.stepsSinceReset);
Assert.AreEqual(1, aca.initializeAcademyCalls);
Assert.AreEqual(numberAcaReset, aca.episodeCount);
Assert.AreEqual(false, aca.IsDone());
Assert.AreEqual(numberAcaReset, aca.academyResetCalls);
Assert.AreEqual(i, aca.AcademyStepCalls);
Assert.AreEqual(agent1StepSinceReset, agent1.stepCounter);
Assert.AreEqual(agent2StepSinceReset, agent2.stepCounter);
Assert.AreEqual(numberAgent1Reset, agent1.agentResetCalls);
Assert.AreEqual(numberAgent2Reset, agent2.agentResetCalls);
acaStepsSinceReset += 1;
agent1StepSinceReset += 1;
agent2StepSinceReset += 1;
if (i % 100 == 3)
{
aca.Done();
numberAcaReset += 1;
acaStepsSinceReset = 1;
}
if (i % 11 == 5)
{
agent1.Done();
}
if (i % 13 == 3)
{
if (!(agent2.IsDone()||aca.IsDone()))
{
// If the agent was already reset before the request decision
// We should not reset again
agent2.Done();
numberAgent2Reset += 1;
agent2StepSinceReset = 1;
}
}
if (i % 3 == 2)
{
requestDecision += 1;
requestAction += 1;
agent2.RequestDecision();
}
else if (i % 5 == 1)
{
requestAction += 1;
agent2.RequestAction();
}
if (agent1.IsDone() && (((acaStepsSinceReset+1) % agent1.agentParameters.numberOfActionsBetweenDecisions==0)) || aca.IsDone())
{
numberAgent1Reset += 1;
agent1StepSinceReset = 1;
}
if (aca.IsDone())
{
numberAgent2Reset += 1;
agent2StepSinceReset = 1;
}
AcademyStepMethod.Invoke((object)aca, new object[] { });
}
}
}
public class EditModeTestMaxStep
{
[Test]
public void TestAcademy()
{
GameObject acaGO = new GameObject("TestAcademy");
acaGO.AddComponent<TestAcademy>();
TestAcademy aca = acaGO.GetComponent<TestAcademy>();
MethodInfo AcademyInitializeMethod = typeof(Academy).GetMethod("_InitializeAcademy",
BindingFlags.Instance | BindingFlags.NonPublic);
AcademyInitializeMethod.Invoke(aca, new object[] { });
MethodInfo AcademyStepMethod = typeof(Academy).GetMethod("_AcademyStep",
BindingFlags.Instance | BindingFlags.NonPublic);
FieldInfo maxStep = typeof(Academy).GetField("maxSteps", BindingFlags.Instance | BindingFlags.NonPublic);
maxStep.SetValue((object)aca, 20);
int numberReset = 1;
int stepsSinceReset = 0;
for (int i = 0; i < 50; i++)
{
Assert.AreEqual(stepsSinceReset, aca.stepsSinceReset);
Assert.AreEqual(1, aca.initializeAcademyCalls);
Assert.AreEqual(numberReset, aca.episodeCount);
Assert.AreEqual(false, aca.IsDone());
Assert.AreEqual(numberReset, aca.academyResetCalls);
Assert.AreEqual(i, aca.AcademyStepCalls);
stepsSinceReset += 1;
if ((i % 20 == 0) && (i>0))
{
numberReset += 1;
stepsSinceReset = 1;
}
AcademyStepMethod.Invoke((object)aca, new object[] { });
}
}
[Test]
public void TestAgent()
{
GameObject agentGO1 = new GameObject("TestAgent");
agentGO1.AddComponent<TestAgent>();
TestAgent agent1 = agentGO1.GetComponent<TestAgent>();
GameObject agentGO2 = new GameObject("TestAgent");
agentGO2.AddComponent<TestAgent>();
TestAgent agent2 = agentGO2.GetComponent<TestAgent>();
GameObject acaGO = new GameObject("TestAcademy");
acaGO.AddComponent<TestAcademy>();
TestAcademy aca = acaGO.GetComponent<TestAcademy>();
GameObject brainGO = new GameObject("TestBrain");
brainGO.transform.parent = acaGO.transform;
brainGO.AddComponent<TestBrain>();
TestBrain brain = brainGO.GetComponent<TestBrain>();
MethodInfo AgentEnableMethod = typeof(Agent).GetMethod("_InitializeAgent",
BindingFlags.Instance | BindingFlags.NonPublic);
MethodInfo AcademyInitializeMethod = typeof(Academy).GetMethod("_InitializeAcademy",
BindingFlags.Instance | BindingFlags.NonPublic);
MethodInfo AcademyStepMethod = typeof(Academy).GetMethod("_AcademyStep",
BindingFlags.Instance | BindingFlags.NonPublic);
FieldInfo maxStep = typeof(Academy).GetField("maxSteps", BindingFlags.Instance | BindingFlags.NonPublic);
maxStep.SetValue((object)aca, 100);
agent1.agentParameters = new AgentParameters();
agent2.agentParameters = new AgentParameters();
brain.brainParameters = new BrainParameters();
// We use event based so the agent will now try to send anything to the brain
agent1.agentParameters.onDemandDecision = false;
agent1.agentParameters.numberOfActionsBetweenDecisions = 1;
// agent1 will take an action at every step and request a decision every 2 steps
agent2.agentParameters.onDemandDecision = true;
// agent2 will request decisions only when RequestDecision is called
agent1.agentParameters.maxStep = 20;
agent2.agentParameters.maxStep = 30;
brain.brainParameters.vectorObservationSize = 0;
brain.brainParameters.cameraResolutions = new resolution[0];
agent1.GiveBrain(brain);
agent2.GiveBrain(brain);
AgentEnableMethod.Invoke(agent2, new object[] { aca });
AcademyInitializeMethod.Invoke(aca, new object[] { });
AgentEnableMethod.Invoke(agent1, new object[] { aca });
int numberAgent1Reset = 0; // Agent1 was not enabled at Academy start
int numberAgent2Reset = 1;
int numberAcaReset = 1;
int acaStepsSinceReset = 0;
int agent1StepSinceReset = 0;
int agent2StepSinceReset = 0;
for (int i = 0; i < 500; i++)
{
Assert.AreEqual(acaStepsSinceReset, aca.stepsSinceReset);
Assert.AreEqual(1, aca.initializeAcademyCalls);
Assert.AreEqual(numberAcaReset, aca.episodeCount);
Assert.AreEqual(numberAcaReset, aca.academyResetCalls);
Assert.AreEqual(i, aca.AcademyStepCalls);
Assert.AreEqual(agent1StepSinceReset, agent1.stepCounter);
Assert.AreEqual(agent2StepSinceReset, agent2.stepCounter);
Assert.AreEqual(numberAgent1Reset, agent1.agentResetCalls);
Assert.AreEqual(numberAgent2Reset, agent2.agentResetCalls);
agent2.RequestDecision(); // we request a decision at each step
acaStepsSinceReset += 1;
agent1StepSinceReset += 1;
agent2StepSinceReset += 1;
if (i > 3)
{
if (i % 100 == 0)
{
acaStepsSinceReset = 1;
agent1StepSinceReset = 1;
agent2StepSinceReset = 1;
numberAcaReset += 1;
numberAgent1Reset += 1;
numberAgent2Reset += 1;
}
else
{
if ((i % 100) % 21 == 0)
{
agent1StepSinceReset = 1;
numberAgent1Reset += 1;
}
if ((i % 100) % 31 == 0)
{
agent2StepSinceReset = 1;
numberAgent2Reset += 1;
}
}
}
AcademyStepMethod.Invoke((object)aca, new object[] { });
}
}
}
public class EditModeTestMiscellaneous
{
[Test]
public void TestResetOnDone()
{
GameObject agentGO1 = new GameObject("TestAgent");
agentGO1.AddComponent<TestAgent>();
TestAgent agent1 = agentGO1.GetComponent<TestAgent>();
GameObject agentGO2 = new GameObject("TestAgent");
agentGO2.AddComponent<TestAgent>();
TestAgent agent2 = agentGO2.GetComponent<TestAgent>();
GameObject acaGO = new GameObject("TestAcademy");
acaGO.AddComponent<TestAcademy>();
TestAcademy aca = acaGO.GetComponent<TestAcademy>();
GameObject brainGO = new GameObject("TestBrain");
brainGO.transform.parent = acaGO.transform;
brainGO.AddComponent<TestBrain>();
TestBrain brain = brainGO.GetComponent<TestBrain>();
MethodInfo AgentEnableMethod = typeof(Agent).GetMethod("_InitializeAgent",
BindingFlags.Instance | BindingFlags.NonPublic);
MethodInfo AcademyInitializeMethod = typeof(Academy).GetMethod("_InitializeAcademy",
BindingFlags.Instance | BindingFlags.NonPublic);
MethodInfo AcademyStepMethod = typeof(Academy).GetMethod("_AcademyStep",
BindingFlags.Instance | BindingFlags.NonPublic);
agent1.agentParameters = new AgentParameters();
agent2.agentParameters = new AgentParameters();
brain.brainParameters = new BrainParameters();
// We use event based so the agent will now try to send anything to the brain
agent1.agentParameters.onDemandDecision = false;
agent1.agentParameters.numberOfActionsBetweenDecisions = 1;
// agent1 will take an action at every step and request a decision every 2 steps
agent2.agentParameters.onDemandDecision = true;
// agent2 will request decisions only when RequestDecision is called
agent1.agentParameters.maxStep = 20;
agent1.agentParameters.resetOnDone = false;
agent2.agentParameters.resetOnDone = false; //Here we specify that the agent does not reset when done
brain.brainParameters.vectorObservationSize = 0;
brain.brainParameters.cameraResolutions = new resolution[0];
agent1.GiveBrain(brain);
agent2.GiveBrain(brain);
AgentEnableMethod.Invoke(agent2, new object[] { aca });
AcademyInitializeMethod.Invoke(aca, new object[] { });
AgentEnableMethod.Invoke(agent1, new object[] { aca });
int agent1ResetOnDone = 0;
int agent2ResetOnDone = 0;
int acaStepsSinceReset = 0;
int agent1StepSinceReset = 0;
int agent2StepSinceReset = 0;
for (int i = 0; i < 50; i++)
{
Assert.AreEqual(i, aca.AcademyStepCalls);
Assert.AreEqual(agent1StepSinceReset, agent1.stepCounter);
Assert.AreEqual(agent2StepSinceReset, agent2.stepCounter);
Assert.AreEqual(agent1ResetOnDone, agent1.agentOnDoneCalls);
Assert.AreEqual(agent2ResetOnDone, agent2.agentOnDoneCalls);
agent2.RequestDecision(); // we request a decision at each step
acaStepsSinceReset += 1;
if (agent1ResetOnDone ==0)
agent1StepSinceReset += 1;
if (agent2ResetOnDone == 0)
agent2StepSinceReset += 1;
if ((i > 2) && (i % 21 == 0)){
agent1ResetOnDone = 1;
}
if (i == 31)
{
agent2ResetOnDone = 1;
agent2.Done();
}
AcademyStepMethod.Invoke((object)aca, new object[] { });
}
}
[Test]
public void TestCumulativeReward()
{
GameObject agentGO1 = new GameObject("TestAgent");
agentGO1.AddComponent<TestAgent>();
TestAgent agent1 = agentGO1.GetComponent<TestAgent>();
GameObject agentGO2 = new GameObject("TestAgent");
agentGO2.AddComponent<TestAgent>();
TestAgent agent2 = agentGO2.GetComponent<TestAgent>();
GameObject acaGO = new GameObject("TestAcademy");
acaGO.AddComponent<TestAcademy>();
TestAcademy aca = acaGO.GetComponent<TestAcademy>();
GameObject brainGO = new GameObject("TestBrain");
brainGO.transform.parent = acaGO.transform;
brainGO.AddComponent<TestBrain>();
TestBrain brain = brainGO.GetComponent<TestBrain>();
MethodInfo AgentEnableMethod = typeof(Agent).GetMethod("_InitializeAgent",
BindingFlags.Instance | BindingFlags.NonPublic);
MethodInfo AcademyInitializeMethod = typeof(Academy).GetMethod("_InitializeAcademy",
BindingFlags.Instance | BindingFlags.NonPublic);
MethodInfo AcademyStepMethod = typeof(Academy).GetMethod("_AcademyStep",
BindingFlags.Instance | BindingFlags.NonPublic);
agent1.agentParameters = new AgentParameters();
agent2.agentParameters = new AgentParameters();
brain.brainParameters = new BrainParameters();
// We use event based so the agent will now try to send anything to the brain
agent1.agentParameters.onDemandDecision = false;
agent1.agentParameters.numberOfActionsBetweenDecisions = 3;
// agent1 will take an action at every step and request a decision every 2 steps
agent2.agentParameters.onDemandDecision = true;
// agent2 will request decisions only when RequestDecision is called
agent1.agentParameters.maxStep = 20;
brain.brainParameters.vectorObservationSize = 0;
brain.brainParameters.cameraResolutions = new resolution[0];
agent1.GiveBrain(brain);
agent2.GiveBrain(brain);
AgentEnableMethod.Invoke(agent2, new object[] { aca });
AcademyInitializeMethod.Invoke(aca, new object[] { });
AgentEnableMethod.Invoke(agent1, new object[] { aca });
int j = 0;
for (int i = 0; i < 500; i++)
{
agent2.RequestAction();
Assert.LessOrEqual(Mathf.Abs(j * 0.1f + j * 10f - agent1.GetCumulativeReward()), 0.05f);
Assert.LessOrEqual(Mathf.Abs(i * 0.1f- agent2.GetCumulativeReward()), 0.05f);
AcademyStepMethod.Invoke((object)aca, new object[] { });
agent1.AddReward(10f);
if ((i % 21 == 0) && (i>0))
{
j = 0;
}
j++;
}
}
}
}

12
unity-environment/Assets/ML-Agents/Editor/MLAgentsEditModeTest.cs.meta


fileFormatVersion: 2
guid: 64f5b117b5f304a4281f16eb904311fd
timeCreated: 1518706577
licenseType: Free
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

139
unity-environment/Assets/ML-Agents/Editor/ResetParameterDrawer.cs


using UnityEngine;
using UnityEditor;
using System;
using System.Linq;
using UnityEditor.SceneManagement;
[CustomPropertyDrawer(typeof(ResetParameters))]
public class ResetParameterDrawer : PropertyDrawer
{
private ResetParameters _Dictionary;
private const float lineHeight = 17f;
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
{
CheckInitialize(property, label);
return (_Dictionary.Count + 2) * lineHeight;
}
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
CheckInitialize(property, label);
position.height = lineHeight;
EditorGUI.LabelField(position, label);
EditorGUI.BeginProperty(position, label, property);
foreach (var item in _Dictionary)
{
var key = item.Key;
var value = item.Value;
position.y += lineHeight;
// This is the rectangle for the key
var keyRect = position;
keyRect.x += 20;
keyRect.width /= 2;
keyRect.width -= 24;
EditorGUI.BeginChangeCheck();
var newKey = EditorGUI.TextField(keyRect, key);
if (EditorGUI.EndChangeCheck())
{
EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
try
{
_Dictionary.Remove(key);
_Dictionary.Add(newKey, value);
}
catch (Exception e)
{
Debug.Log(e.Message);
}
break;
}
// This is the Rectangle for the value
var valueRect = position;
valueRect.x = position.width / 2 + 15;
valueRect.width = keyRect.width - 18;
EditorGUI.BeginChangeCheck();
value = EditorGUI.FloatField(valueRect, value);
if (EditorGUI.EndChangeCheck())
{
EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
_Dictionary[key] = value;
break;
}
}
// This is the rectangle for the Add button
position.y += lineHeight;
var AddButtonRect = position;
AddButtonRect.x += 20;
AddButtonRect.width /= 2;
AddButtonRect.width -= 24;
if (GUI.Button(AddButtonRect, new GUIContent("Add New",
"Add a new item to the default reset paramters"), EditorStyles.miniButton))
{
EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
AddNewItem();
}
// This is the rectangle for the Remove button
var RemoveButtonRect = position;
RemoveButtonRect.x = position.width / 2 + 15;
RemoveButtonRect.width = AddButtonRect.width - 18;
if (GUI.Button(RemoveButtonRect, new GUIContent("Remove Last",
"Remove the last item to the default reset paramters"), EditorStyles.miniButton))
{
EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
RemoveLastItem();
}
EditorGUI.EndProperty();
}
private void CheckInitialize(SerializedProperty property, GUIContent label)
{
if (_Dictionary == null)
{
var target = property.serializedObject.targetObject;
_Dictionary = fieldInfo.GetValue(target) as ResetParameters;
if (_Dictionary == null)
{
_Dictionary = new ResetParameters();
fieldInfo.SetValue(target, _Dictionary);
}
}
}
private void ClearResetParamters()
{
_Dictionary.Clear();
}
private void RemoveLastItem()
{
if (_Dictionary.Count > 0)
{
string key = _Dictionary.Keys.ToList()[_Dictionary.Count - 1];
_Dictionary.Remove(key);
}
}
private void AddNewItem()
{
string key = "Param-" + _Dictionary.Count.ToString();
var value = default(float);
try
{
_Dictionary.Add(key, value);
}
catch (Exception e)
{
Debug.Log(e.Message);
}
}
}

12
unity-environment/Assets/ML-Agents/Editor/ResetParameterDrawer.cs.meta


fileFormatVersion: 2
guid: 740b9a60fe38f476ab020dcf91f3f94a
timeCreated: 1517291065
licenseType: Free
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

1001
unity-environment/Assets/ML-Agents/Examples/3DBall/TFModels/ball-EBS_ppo.bytes
文件差异内容过多而无法显示
查看文件

785
unity-environment/Assets/ML-Agents/Examples/3DBall/TFModels/ball.bytes


6
global_stepConst*
dtype0*
value
B:�
R
global_step/readIdentity global_step*
T0*
_class
loc:@global_step
?
state Placeholder*
dtype0*
shape: ���������
Y
running_meanConst*
dtype0*5
value,B*" y,����q�Ie?��Y>�����N��k=
U
running_mean/readIdentity running_mean*
T0*
_class
loc:@running_mean
]
running_varianceConst*
dtype0*5
value,B*" V@>@�6)@�F�B��!D�,�B�S�B\GE>OC
a
running_variance/readIdentityrunning_variance*
T0*#
_class
loc:@running_variance
-
subSubstaterunning_mean/read*
T0
6
CastCastglobal_step/read*
SrcT0*
DstT0
2
add/yConst*
value B
*�?*
dtype0
addAddCastadd/y*
T0
7
truedivRealDivrunning_variance/readadd*
T0

SqrtSqrttruediv*
T0
(
truediv_1RealDivsubSqrt*
T0
G
normalized_state/Minimum/yConst*
value B
*�@*
dtype0
S
normalized_state/MinimumMinimum truediv_1normalized_state/Minimum/y*
T0
?
normalized_state/yConst*
value B
*��*
dtype0
R
normalized_stateMaximumnormalized_state/Minimumnormalized_state/y*
T0
dense/kernelConst*
dtype0*�
value� B�  �"� n��>� k����¬�=� ?��!�>�ϾwŞ��$����k>T�
���>��J?�ׂ���\>dC=�&>�1�?n5>�߭�\8��侊�t>��)?�D�>P>쐾>[] ?a3(?���>�ǭ>h�1>V^=b� �HX?��,?,��>v�C��,��±Q>��>���=��4���x��g�>�7?<ٚ>�S >�������>����8Ӿ��=C��>O��=��9���k>�m.�6�$?�W�>��M=W 潇c�>|�Ǽ���>N݊>n�:?���>\��<����Ҽ6�ýbD���b��}s�>sƢ�?��<�=�>���>v�R>'�]�����%�K=����>���g˾�<K�eK=>#6?�?`�O�!����>�w*�J4 �ο�=���7̲=ey�>T8�>�k�>�d>�ċ>a>I�uT;-��>�kL�{�׾�%7� �F<K� ����4�����9x(�|<�G���V�����~�����;������H{>��<���)�v��xɾ6��>R��<Zu�>3��m�'?�ƌ��=���V>ZE ���-��2���I)�fTg��??L �>h� ��>���8�����M�=���P�9�#���(?�����0>.q�> �Y���Ӿ }]�6��=�-��ݮP�����=�>'�����E�og����<'��>t�S>�������� �E��[j>f7�>ˆ���*>���=�����>E�?�#�>�%սD=��!�=�3d> @�R��=�ϧ��X0��;?J�����>�l/�f�־UT�>�D�>?(�>��-�v6��>>V�d��<|7>�
�>��>|�+�5����ڻ���>��
>�u�>��>L���u���Jq`�� �=1K>;��= i,�R-@?#�?1�>�����������=)��2�6<V"?W~�=�?}>�����>y������3����_��x�|L�>�2S�� �>T_����e!�>�׾\"�=L���K�h��-<�8K]>KWJ�
x�<��U>���;C��>RI����=5�1��>���<��ؾހ�<9��>���NI�>��(x4<�s���>9��1�yT/<��`�����k�>ϩ�>�J�?Q'���6?��&�=�@�cT�=��߾"��뫾�CB��P�>�A����L��޴>�[6�!�K�.As>��?S�)�-ݴ=eh�>��>���>6�0?�D=®>��F>+nu>ֈ>��-�T� ?�9���@?�^�>��?X:��cP=ɔ�>J�^���(�>�:��D���r�ƾB��>U��>ՠ�>�S��t�<�<?��w�X(���&�L�V�]6���5>V˳�/�2>����c�>��#�5t����=���=� �>д�>|(r��z(?&��=Z�5=P��<�H
?��:�����t>��P����=�Z�>��>��=�U��Q?�F��p���@̼�'w�h�������+ľ�������E
�>4��>D�߾��<�2�>��+��P��O~ݾ�Uо��$�|���%<G6�i�G��u�>�� �f�ݽ ���W �<,G>n�;�u=6�>$����>N=a@?Ɇc��j�����wò�j�?�r7?1kG=�V'?�s ?`��6�>^�Q�bڶ>�.ɾ�=�B�ھ@� ��胾���>����6��Hq+�.�!޽{�?=K��4ƴ>8�>4S��>G����Ⱦ�0)??:�������(?"��/v?������q:#>����%�"�ӊ�>��>W=_=�+�>V�i>]F >"b9����s��>�����,�5?�gT>�J�����4?KV���$����>Q>�����=�:��*R>�� ����>U�?���>�b@�:)4=��!?S�!?}�>Ì?��=��B>x�]��� ���+>��+ൾ7l6<�,<�}1g=�6�=-,t>e&>HO׾��q�Qʼ>�b��n�=jխ������?U%?�1=1��sI�����@�.t>+���^>��{>�Y�E�%�l��=�z�����`�������
�>8�b��o뾸"H>�$�@��>��?]�x>���G䟾��0?]! >�l�r�> ��fJ�y�1�J2t��:�>r�ӍU>�w|>�%.>&��n.J�a6>yׇ���6>/'����v��M����>u�?�i!����>(m��W��>u(�������>o<Z�7��A�Ľ�!M���u���Ǿ�\�>� ?By��{^����.�E����=�~Ⱦj�<�C"��N���>���>z]="����W`��T > �7�"6�$�¾�6¾Ι�=�����$?l���#4罐��=���>(�N=LL^>�:u>g����.+�t>,]1?25<�8#���z��C�>��"���H����q��=��B?%����?>�Z�� �7񽾥K?r��� '?#�6���<.�+��e_=C|t���?k >O[����4��G�>]�>����I��|��&�>�u��t>��?�+��e<��ݾ�I龷1|���߾�ɧ>d�>��Ⱦ63���a�=����SQ>���]��=�6��w>+����ޥ�H�=Yr��-����}�.e�����<�J?wQ?�Z<�GW�p�н���=i��=.-$��`D>K������>}q� �>\���􇼇+9�!G$���=�6Խz������<��>��~�$��A��>=�����ܭ���%�>� Ӿ��;��=""�6^1=!�es�=g����F��u��=7>���>�>�?P�����35�к6=�ih�<�>|�L?�%:>Q콱��>�������$ :?8T��ü>|�,>����Ǜ=t�V=���s�&��0?��{��*G�Kz>?۾z��>�z���K ��ƴ���ؾoy#>��?>n�����,=T��= ����?�UP�&�?{T>xT2��
��S�>ِ���t��������b?�|<��>5���#O�>�ݳ>Ȝ`������8�}�&��,ƽ�e��N�-�J�>w�>�v@=���=Ծ�>ބ?`�?��>\L���˾�Z��l�>�!>��쾃��=��>��D=N��>yU� �j���!�vt�=޶D���C���-�"��<��� &����ƾ�"�>�f?w�z=�9&>M�<<����/
� ����V>F�$?��C?6�N� G���'�t"?S�]>T�_>�+���"���#���l��g&��7>��<�_4>�u�=�����>��?n�u>��.>�\��$��=�qǾ��N?��>�Q���>˾�>��位��k����� �IS!��?I�¾�쪾9)�j�>��$���a���������ʾ/���>�����t@�_,��xE���?��ս1_�� �=����0>����p?���>����R�>�>��N����>g���?�<�z#�>���<���>�����ο��hR� Wp>�z>�̾�nC>��e���̽j޾�@?���<� 2>���>�#%=�=��P���O�����\>�ӯ=�݊���?��w> ��1��>��N=��b>��R=ߊj���?��9�r|f�\y>�->kE�>B'��ʵi>�E=��5����>Ι����Jn3�Wm��3���c7?a���'����%�N0G�15�>��>��=���>�S�2�����?�L?���e����\�>2��H��>�]�>G��>�&~=�}������|k�>i��>��=P���"��>!T5���>lA?� ?K��>?�2��k������>�^���C����6�J���~���)C�>,����F������>�!U>|�w>P�>�e;�� ���bL>Y�> ������>���z��=���=εA>�y?"���^���5�� (s>Q��=�O?�,,?���>�w>��G��>K����>�Ɔ���d=�G/��rV�D9�=� �=\wO>5�����=?rP�>�ڟ��9�>�f���>�G�>Hx�{K��[��񱾾?QuK��0�>O���)t?��>�]�}��>�|���t������wE�=P�y>�o�� G�wT�h/>�K#�8���k����M�>��>� �Y��>��\�
U
dense/kernel/readIdentity dense/kernel*
T0*
_class
loc:@dense/kernel
�
dense/biasConst*
dtype0*�
value�B��"���B���=n.�4�q<�:��㢡<`L�;�>���<ңI:�E>��X ����¢�<\�<��O=��O�3 <��<p�-��0 ;zڌ<]��C�»��<�\��''�:�d�;|@<_�$<"yƼ���;6 �<�,����;�!�0#�<�v����<��e<���;#f!=vq�P�ܼ�������V;B|� ၼ1���w�ʼ�T�����u�<���3�:�;��[��;���;|��<]�M�6���<G��<�]�<k��<�����9�<��=~�=����Ja�<>�<���Udһw�b<�خ<h�k<��%�z �<��� =o_����k<�� �
�1����kV<�[ ��o<���<�$��q��<^��<����e <�>��A���e? <Ч����ʼyR/<���<H҂<-xͼE�<Q�<���<3�X<#۪<���<��ܼ薵�F��:������<��;%��;�a���} ��{꼕cּT�ͻ'���d��z������;��=
O
dense/bias/readIdentity
dense/bias*
T0*
_class
loc:@dense/bias
j
dense/MatMulMatMulnormalized_statedense/kernel/read*
transpose_a(*
transpose_b(*
T0
W
dense/BiasAddBiasAdd dense/MatMuldense/bias/read*
T0*
data_formatNHWC
*
dense/TanhTanh dense/BiasAdd*
T0
ɀ
dense_1/kernelConst*
dtype0*��
value��B��
��"����=`d9���> �ɽ��
=nA=���=Y�ڽ��ҽ`�Y=K[�=�WW=T��=jz�oz���=Lj�=�V=��=��>�����=�ͼS�(>C=���;�� �Υ��^g�����=�Ya=U�?>h�l�ܻ*�3^�<1#=>�.=�O=[>�F��o�=���;�;>��=�L:=(� �>ug�;�Rn=-ލ=͋=Y���%!�</��b1>��#=��6= �R�����eaO<��[�j������=���������!�<�̗����=���<
����<�j;�rV=�|!>�ag=R%�=RRb=N�� �1��ݝ=kc>M�5�*�=���=��=�=������!>`��=���P ��u�_=.�#=>�m��> ����=��=����$���GE�°�=�dB=Z�=��Z>����
}�:U_���@l=*�=�@>7%�=�=}Q����O= �-� A�=J:�px潻�ܼ7S�=���=Cj���.=������< ���[��=��}���-�-(>��>�4�=l���A�>V�Q>�B
>���<~��<��u<Zy=����ˤ�<��=�Y>;�K>|����mz=G= >�2ؽ�NʽJq�= ���[��=�>ɼ) �=R�/����<���<�� >�g�;�Ƚ&<��3K�yf)=���;*
>���ɋ�;p� ��<�,#>;)t=�u����<��7��Ѽ�R���b=�=S ==�6꼘���<|�&���=�
�<�6����=�Օ=9'�b����+�<��>fl�<�3����!>�nν#�+�uW����������(�=�&D=n������_���ye������� >Xs�n��2c�=zyr=����J"#>L����b�>�ا<J�y�E�ӽ���إ=�|C<0'���=u�<V8@�U,J����<qh���uz=O�=6���o�>��7��&�l`G>�$)<ۇ"��G�f�>�3���7�=,e�=F_�<ek�&��=]��;����qd=�w���IB�n!�s�6<<��=�!2<YF��vd���\�=8��;����=��=���5��=UP�=�����=���<��|;�/&=<^(>%�C��h�=��>w5��G >t���1I�vjT<kQ��=�;t �YJ��X�=\w��]�=[�[� Q >���="w;�24��-�=ە�5r ��,#=��� ��sv��kH����=����2sF>���<�;���~������(q�=������>��F=��ѽ�H=�=�=|=�%
=K�d=��<(}�=�n�=�
�= �=e��<q��:e(�����=T�=�g�ޣr����=���=`,>y�=<��;�L����=�����=Y�ؼ�� ��b�� �=�+�9��|<���=�X���x�=�x���d彆�C��9=�밽��*>;\>�&�=��B�#��82>��p�AX>C@,�|����L����=�4�=��= t�=� ��<�P����;��&><�ƽ�eG�U1=��v�ꪀ=�6=ո��}�)>r� ��!��%���޼����<{ýU� >�}�=�g��f����<#�==緽��Z=Ń�=�j�;�. >�T�=Ea�<3r׽�{�;�:���=׻%�>��(����V'?�Tǎ<=$&����0�=#�����:��=�}�JtL�_n����=��%<z��=�B<��=<�>&�d=��k����GP�=%����X�=Պ/����ې�=0O��%�y�ݟ��f���s�=.z<���<�Gν\kV=C��� ��։�=�/�=DŽ>8)�=�νC��<c����˽���<�����'�b���qY=�6>5�>��>�#�=���B�=������=Z���=H����3ଽ�1�;���=��Sߕ�v�@���W=YA*��P��?�<%��<�`�=�r}�?w���=�*�<�K<��Z��g��1ҽx⢽�b�17��A3��<=m�ɽ,��=����{L>F�v�wb�=rYw;LϽ=��8>X��MV���J�����T� =T&e����ak��d6��̘��ے���jw��tߐ�I���ͻ� ��� ��.P=�z=����`��e�J��*a=���<4��/����_ջ]���TZ1�"4z���Q=f$�f=8�* ����(�h/μ�Aϼ��ܼn������<�E��� ���%=��׼M� ��@ �����St=�p����<b�h>:Ͻ�S�=Nн�^��T:�=^=I=,BQ>����T�>=��U�u�h==����.����Ὕij=�”=���<�7�m���BGu�0���PݽL�L>��;�&λh >��>>��J<>K�����=��H����j��=R�<�DD=>�q��c��e=3+��[�=m�>|�#��e�<�1�Fz>�~�'yk�M�=�뾽���<"d;���=g���xl;=�!;��=��|=��<97�=���<��<M�P<oS����c��,�<��^>�F�=1н'߽���>gýa�<��������e�zƃ=��g�J�Q��1@=�2����C��=�cU>��>�� ;%.->�4ؽ����;>��#�������=���=3�!���,>ǮH�4�y=��?=l�~�]k��I��;&�<�d���>�ν�((�}�0�:�a�F�$�C���c$=�>�AG��︻(�+=������=���=�}!>����3�=t>2������;�d�A�;=�����S���h��<��=518������9=�q�=0��;t�=/�m>�����&��E >n*�I�S������k�����dk�=G�}=�>4�=��X��υ��/��ּX��7>�1v�۾>�g��.������7A>��齿]��c��r�=�b�=���<ei'=�P=�*I<�QԼ��f�[�뽲�-�IPL���M=zs�=T!�=�y�<���=�j"�>��=s��%�C�ۼ�=���#�=�KN=�w���#>~i�=x;>05��l������K�=�P=Ak���9&�� �����)�=�㣽W�4=�?3=<VL��������=ԙ�<3pk9+�0=��;ԙ��fW�=�y�=l^�<��X=���=W�¼҅�; J�=�d��6"k=�^J� ��n�6=ѹ+=,��=a-�=�*��!��l�=/�~=�����C2;�뺂|$�] �p傽~�S�l�=��<�Dג<�{�=o��V��B=w���%��=|�j������'�=fk�<̿9=[q2��=�D�==т����:W�=���=]nB�u���M� >.Ҿ�~ͽ�I˽]s&�/�'<�Ga=:�=�P��/"N����d��oHQ=��C>�p�Y1#��
:���4=U��=&��� rɼ-�O�-W%=�Y=����8�>�;\�����F>3z�;��=q����9"=�*=�O =�� =���=�S�=�X��WT��f?>��0�P��=�n\��A�;�/���=oA��O�=N�= �(<uh�=��ƽ�r�<tx�<Y��<����#��<1 X��׽�߻��-`=i�f=Z�i<ݷH�9�=�B >�����8��3��'C>Jۣ�>O�=�B�{���:�����H����&���P��aS=e���|=�C�\�^>5����=MK�;�0>%=�c���$�[�=�p&��Õ�N��<I�<C*׻[�`;Y֮=V��ǫ_=B=���������Dn3>�|��ʝ=��$>A9>fj��X�;`�ŽuOX�}7���JY>dO���g=J�<���9�>� <�I���?�=^�4�"G��i@�����=�z�<��� �<#��v�#>m"=|��<g/�;j��=��W>>)�"ת=� >� �yY)�L#=g���Ws <��:>p� =(�=�7Ի�c#=H|�<��*��������w�����<W:��O>�\�=�Iǻ���=jM��oa=��t��&�=���=Q��\�#��w&�7�S=�O =q��������>X�9i�;�d��h�>��5=(��=W<��P���7��}����^�D�y��7)���>�W�=X�t�2麻z׬�=f>\� �(��<�M;�ꏺ=�ۧ���=������ ������P�6˼zٝ=��}<64�(��<�<�;z=S_;���=���<i�F�ҽ�����f=�.�s!��wk�z��=��-�����I�=r>��� &�ߤ�=���Vg;=a<���=�K=>
=ڱ)�����9U���R��zs�<|�]>��<���<�H�=���M�=8��=Cɽ 3�����n�8=:��=Y��<�����-�Pbν��=QU��W�=��=���<#�+<q�E<2Zs<ա����� �~=��9�q�Žf>���M�� �I����=�'=ߧ<��@=�8���������=���=g�ɽ���=��<�A>}��=Ou�=L~���H���
���27>�
�=���=���==�C�v��=xu�=���=T�6�.X{=��J<$%�<a�=t(�l#=�jѼ=V�:<���=
�0>C��=��������]�^
�H
ɻ*M(>F�W�*�;#��<B:%=��u=�` �<�����=�=��a�*=a��=��ֽ#ha�S9>*֒�u�C��\���g����=�]�<�퀽�mM=�p��4��򋼧 �<��ν2@&�#H���;6��_���=}��=�����m�N�����>뎞���=C��=yg���8�=K1>tv�<]�4�6R�9���Re=N���ɑ>���=M�1�IX?<Z&<��6>і�=E�ڽ]L >Bp=>ާ����%��k�\k>`߽�}
��޽�Ě�],�s�=v|
����=��>£0=�0k�&L=!b+����lŽ�>�n3=P5=q��<HI�=�'<�;x=f�6<3�=� )=���=TbԽn��;�,��?��t<�=E��=U���&A�=�̆���=h=vr�<T=`��&�=6Tg=���=��0��{->����P/����z�o=7� ���5>�u>&e��A��=�5<�&:�� u��o>�!]=��<DǼD��K���^<UdQ=��=X�y��b���<��=@'C���D=�S&>4�ν5Ύ=j6E<���P��=S��=NP�t~�=/�=�4��d�K���ӡ��>G/=��S��{�$�7���s��z%>\ =�f �6]���a��@z�=���=�+�=A��zkJ�Kw�=����f3*� �> ��=X+����V�E�_<ˆ�=�b��=nF>��+�Tq=���=Nβ�ɴ�;Ig����ެ���>���<�AC=t�=�ƿ=;Pv<gO��9�k=]�*>1�U=��=�0׼�+��BC=|��;\��=�\=PнD! >�y>�FV<�:�=�
g=��U>����=x)��wy���>����>�=~��<�SC�v�X���Z�.��=����y�=�Z��i�@�ԕ=}0M��>4����3��L�<$�ƽ &>��h��3S�� Q=�GM��6O=o%����=(ڰ=`�7����%�c�z�
>8�=8Wk<M�3�u˻=��'�bO0�0�>H�d�d�6= ?2�\F��qar��{n=�%��������8����$ =���l�O=ݙ��1 |=����� ��-1=�p<-�=ڕ�T'���[<(|,��s=#�Q>嚶=����J߼{1�;�X=�[< �=j��J.=z� ���ּ�����#<� �<gUn����<z_�=f˽L��<g�V=W�=�>+���Ѳ�=�
=Kv�`T��9%м�'=�{?��Ć=��]=Q��=2〽�;d<�6l��Į�+b�=ce�<I��������w=�=���H/>5ּgs7�ʩ���}t�|龽z��=Ϝ�G� >�����ƻ=�[��L��|���̜G=�\���ƽ�����p<\%�=d��<@+�;$���N)����R��=b����ä��Pl��E=3�=7z�=��=�,=*�$=�:��&�J=T�+>�'��� O>��к�˥��e#���=�)����������R��]���B���6���V�E�%>MJ��d�=G��=�{�=��>�$G=�H�]# ��ʖ��c=�&��w��f �=��=28>���2~m=#|�=�i��xʽx��=��I�<�ż�%)<�t>"�
��Q���=�7<>*�=e����Q¼�3�!��=���=�_4=�y8�w6�=�7���()=�E����=5 >I�h=�l۽��==��=X񤽲<�<^P���+��T!=r�(<��B>o|�`(�=#�>��:��I��:/꙽�Z�t.�=���b&><�2�Y=W8���<[{�=�=��<A燼���=D圼��=(��=l^�U��=/+&=6���X=Z��;�_>�=w۽���鼄�=��>߲4��,>��0>�>ޒ=�>aj+��U�=��==;A%>��h=�� �$k~�MG���p�����n-�ur=��=Pg
>qǷ=�~=�����W�=X'�=��=;��#A��)>��c=�ͼ��1>eT@�E� >�=>ۦ =o�?�!�>�w> ּ�'$����<旽��<?z��\>>/��=��%�{���T��Z>ktF��t9=m����=�S�<�Q�%�ٽ&V����'=T#�=847=�a���|&> ��*�=s=v����g<- <��ͽ��/<r;W=$��=����Q��D`=��=��6��(>IRڽD!���/��� ���L��ew�=�v->��輄����4�<��>>�6�:�a�A&��J�!<�� �1r���1 ���$�kg�=��{����[F�2�"���D=���}�=<��>�4�kZ�=�S=m撻�9�<�I�,`����r��=+�I��b�����=����4=;(��;c���=k�O�����#��)�e��f6���^o���=�H>G>��Y�����=�¼ݩ�=d� >�%>�C�=�4=���(��bL����Ɣ�<�?�$ʺDt>I>JC�=��"�L�$>��=vH=�>��&�Hį��o�������=FO&��G=�<F{=@���0�Ѫ�<�_=���� ̽�=��=��=!rP����=�{�<���Fd�<�8���E�������<�:Խ� �=�]�����=DnҼ�E��� ��E=�/ �9�=ڽ��}<��8>S.���>4��=Z�%=���=M�w�:w9�<l佁޻���>�4��䏟�'�$>z���P=�����{<�٥=_*%=����\ >��I��܏�0.����=E�3>B�=�4��`�޽�1�����iNI�¹��Q��ڴ9=������f�=��Q>�B=L�1�|���F�;�t��+�>�*v�'� <�6x�&�=�Q�<<��ٽ�M&=�����ý�K�=�:�<�($��h9>b�$��/S���.=�/W;u)=)6��>Ó=o�2������7 ��<?����=����3н�'��x��Ǿ��,>: м�!F�W�$��Q���wĽm�> /��q�˚3�n�C�i�X�����I���gu�BaٽbB>SM���+��^ >�!��T����ԽΉ%<��!>u}.�i���B��=�7O�⎽w��8k�z��� �> 9G��n�)�<�yH� �S�ƞ]=?��Y��=!C>pb��C��=���=4��;L�^=`�N��%>p��=�W�=2�]����=� �=�f�(��=J��B���ԑ<�~Q<#�üQ�� �=�y�e]J�D�Z��!��:*>?J����=�$R�o퟽ꔽr3�f�=~��PŽ�O�=��>��=�/g;+�=m��=������<�����׼S$:��=ʈM��5Y��S���Z�b龼�Ŀ=��=UZ�=�|��o��=�H
����"ý�1~=��?>�Y��f2Z��.�=�_ ��&
�qԼ'챼9��yv�=߈g���˽Ge,�KY���R�vU����!>ó�=����=�]Ƽ{ �<��=�W�<2� >A����A=Iw=�V�<���xɽ� �<g�=�=o?-�X��=�����pý�F��U�νo����ؽK�)>��d<zP�<�!=�q�=� �V枽r�>jp�<R�Z��� ��G�<�V��ܺ�ZK>��r�J�����P=jV�K 轊�ѽ�ӈ=#@ =���z��=@�8�ě�<�� ��E�<{<�=�3������W�=�1���L=�䗽�E���=#3>E�=���Y�2����=`|彼���SY=tG�=�����F����0M������<ļh�=��=@��=�+ =�a7����yk<=�� ���>��ݽ��m=�m�;"d��ue�<��=������*x�=a-���i�=ّ��4�<@$=&�Z���Z��f���c��o�=�H�=�C�=�������<q\�=�^�;�(�Ǵ��Y�a=�ĺ=�~\���9>&
����y�(�2���`>�oٽ�K��ClZ={��=�"�<n�ֽ�T�<!7�=+�9=��>{ӊ=:B�^�,����=�s�����69=zs�=E�ɡ��mhC=@e�<�3������v���#�=����8G�)$�=3 �=TٽL��/H�=��'=�� =T�� � �AF
>�!����X�)��=t�w�tG��ߐ������;W��+�;��t3��L�����=jcS�kԽ
�3=�M>_�,>��=�n��" �M*ӽC���:=��K=_$�= \�=�x�=$����g>p���=\�z=�/��� >�~�<�t��8�>=\���l�=R����;��=�4����=Ȝ=oQ�� ��x9�=TV��[H[��0Z=��}=)�j=G���T��=*�;2O>��A>'����<D#����=������=t� ��ؽ ?�=V��=��3>p���g-�I�]=�"��/��·��ݛ=;e����<����gx+�Ix?� �μ+�>;ĝ��a=�P<���<[���8��]�=�}<q漈J!>F��=��T��:R:�,=5P>���=b�+��iټU���x�=U����M�=�*��K@�=�O��O����6;1� ��pq<u��=��>� �=5_T>�Q�=r�=Զ=�2=>v��+n���T��,X=h >Ԁ�=� >ۦ,�9�"�,�:��:>�4b>���=Љ,�p2�<h�{=?���XQ�=Hӳ��H��C̲=��S=��=1f:����\'�=b6��U[��舼�<0�=���<�7ɽ�*��G�;@��=ū�=���y=�}-=M�)>Rd|<�>���=lo\=6�>�k��BH��N���!w���l�������ս��o=?>=J>ͯ�=�0H=$_3�I�ջZ��<����e��W>���w�;�e�=ޤ=�>>�=�=L>��m<��!�Bn=��>>L��=Ͱ=1��=|2>*��]�H>܊�=�������$k��!o��)�:D%����=���y5�; z= ����e;�;��K��<B��<9�<:�=q�(>��<7ho= � >�Z��?�=Ӡ������'��w$���B/�)�j<s��=:$�;��>:��"&>��6={�-��e+��NB�S�N�� 3�N���m����=��*>$zH>�j:=yI���v��_�]�P=Ȋ��U&�i�F��>ѫ�=;=\�|��&�����=����*���7�X�g=�50���6�Ñ��(Z�����cbɽV�M�X�@��`�gn���#�UU9>�=�/e� ���w�=n񌽦p,��R޽��=�{��<���;����+���=�z��_�=
Z�=3f�б�=>�Ƚ��)>�D�<y��<�ٽ=Ky|����='�<�m��۽����p�/=wc��;嗽{>=����=�b=�r�=��:�Q����������׽QK���li<�mZ>��<�ݪ=34�=�X����=��!��{�<R� >�0>8�"��ٗ����=�\,��K���;J>u�Q= ��=��>/6$=��>?1���>\e�<�x��m<�1e��]��N��4*ν��2=B��=Pd>����vн5�
=r:s;G��=���=/�����P�L��=��;�(���P彳���rS�`��=�#;�Ȳ�=�0=<5$⽘���#���,=4�<W2c�B��=U/���>&�=���?T\�-_=�a*=&ܽ��=�G.��򽚽��֯M����;g#>A>�����5��/��=� H> b!�z�j>��W��ɐ=�+�B.��.�߽��˽cr����B>�c�;ռg��C*�P9�=GT�=V���n ߼�-Ͻ�Q���=���<=� >[�>ə�'1�=<�<���C!��Ƌ����=��$>ܸļ�+*���=˼d����=�R�=���=I�P�]3?����=�_�9�]�=q֠=d�e<V8�=�Qn�娚�Z�=)5=ٸ>QPƽQ�O<7�������0�����>�h��^B(>Լd|=n�>�M}���.���ˣ�������:Z��<�`�=����FX=���=G�A�7� >9�.=��+<DZ�<& E�ְ�=��z=E����(��'���8B1�g���E����=�T�2W<D�,=�u >H7>�T1=�]�=��� ǘ��<�=߬�=Z[��1=��
>�� =C���D�Ժ �$�x&0��-R��߷���<?�=��4�����c��"A��D�=�|=�!���{->��N�-t=������=��x=�@�<����@����=C�d��=� ��ފ9=�x8>�t���G���� ���:�O��1��< e<��H�ۤ=�.��h�����[�gЏ��.��j�=�EN���#��T}>�a:=����@���1� `���!>� ?�Р���$ּ��.���;/�g��>ƒ�=)L�;��.= ɗ��D�s�=�D='�Y�|���*`���=�<�Z?�f �=��F�[�>\P9��*�=��='ݼ~��1>6��=|%�g^�o1��������.>����=�<�= �q��>�)6>� =K�%>͓ν���=9x=<�X�=R��`�(�P������=i�8>���=]@�"5=ִ[��L�;��=d,S<�x�<?'>b=aG#<W-��`l�<�нI_���ȭ�]���ս��ҽM8?=��M>hO���=�=�<3�=�F�=�⻽�.<$X�=�_#�
��:�%v�1�3;]�==y�>��F>��������)�i`�=�i�<��.=t�%=�$�=~�>��r��rD��4>N����=,DG�(pC=&0�<���=]gq�3���&=֐���G�<;Yн��<'���ʺ�Hk������(=&��� >H�3=�6S�l�j8Ț;�v�V=k[.>�Ԩ=!�#��ʼ��
��k >���=.Ӥ=Hض�>��u=h����#��T����=w>���g����==AN�<ᠳ�����6��m���=�W+�CC��|�F��h�� ��<�>�k�=A�<] =�k=U�h=�Q����>���<_]�=�yN<tn�=<������9���o�J-�<@~%>}̃����=�/�=�$>�j=�����?�Rx>mH��OG��x��ܬS�*h�=áB�gd9��{�=q߆�S5�= /=��u<�1�u)�=)7)>S��=��)>�>9���x=5>��9�[�N�N�Y<*;�;���Lޛ=r?���[=�B���N�<���=b�P<� �=��V<eh%>aCҼ
��� ��<Q�;�c�<�U=X2X��i�鸔�`8Q��|�<p�Ž^�<�C�����=�}����E� z��?G=��9���=�IV�����Cy�ӈ��WI=�rP>@�L=~��<�Z�<���<m��=W�<C�<9�=.)W>Ұ�;��7�.��=��޽���e`�=����*�L� <}��<%h>�u���>0%7��`��_�,��+��p6U>�Ɲ<,!�������*��횽Yz���.>M��8�(>�jV�{J�=��8%��D��=��=��=��x��L�=�=�S=�`l�9�:�3�=��1=����>=��j>�1j�r`F=\��<�ܸ;��h�<|8>#c�A=����ݽ�v ��kA>D��;D%>��'�t#Ž;/=P >��>�ڷ���=�� �9������@Ϯ� ?]��*\�����5���� ���G<=�(>�� <Y�)=��=�����3>�<�<!�o<�A>�H_<����#����:>���=�-����P=�#,">N��=�4<�aj�=���EL�"K�=�2#=��=�V>��<�����C��=�<�b�� l%�0�@�,�/<�n̽�A��tK@=9�Y��1��o��=���=B�n�3d�� �ؽ��=�>���B`|��F�= y� ]�OdT��{齓O�<!�)>���=�&(� Y=V�:�~>:J��4>T�μ���=s��t�kD��Nl<�=��>y� ��[�=8��=�>H���^=0[=��>:^�=����*=�oj��D�����=��l=P(�O�>"v��)� �����.�����L8ҽ�P#��
�=Ԍ�=jn���=��"���>h��<Sd�#f���ۇ=��� O���=Q"=Ҙ�=�� =��=}��B����=6)��! K=��;�I��;)\�=&lԽb=�=�>v�'-�����������3!����<I�=t;��@���ڿ^����\�½S_�<+�0>=ν(!�=�͍�R�T=�=����:�3=^�=_��= <ck�c�8�+�=�%T�~�=6E��.u�;� ;����*�Ƚo\��^�<��>=j����=ӟ��=�O���X�ԅƽ�g���sf=�扽Q�=f��=~N|��U���=m��=���=k���.wټ@������ͽ�ϟ={���d�߽�LJ���=��<����������;�I��a(�=��a>� �=ntX�I�ڽ峄��=��-���=���MP�qb��]��2>gO�=B���=�u�1k/��q�<񪅼PW�=�˻����=\�>���=�Z�=s��=�G]�~��=�/=t��=���=E
���p�<*�=~.Խ:i����=�x��`�=��u=���<-�^=��=��=A"i>gn�p���S�Rt��(=���
>���=%qg=�����=~�@<�� =�]=E�<�-�<s5 =��9=�!�< @A=�Dͼ/��c����|��A�ý6��<φ�=���|�w�6 N;jF�=U�@���_>6?I>
���w�\��6��\�;����j-��*^��폛=��V>>V�=���=��{���%>���Jg4>h4ٽBn= �=%�����b��se=X��=_=
��VX=~1<��;�$��&��=;��8��<��=��`>����������ɽV�
>~H�i=���Ml7=S� ��e���C=�0�=%�B>8�$�N�J=Rb=�ݎ=k��5�> 7
��
�=�ɽm|�<$Խ�����r=Q��m�V�����n��̮�;��<Ļ\�q6�e-�����= ���`���
�=�bB>�S(=��=|>e=O=��=���=�E�'��=�Z�sC��ļ=!JK<���=g��^�ڽ�c@�������
��O��1�;���=x{�=��f�-x7<�O�<|8v��x�=Z��������8�������2>�;�=������t������Ww���g_=�#����D>L��k�r=$���/Խ�>%���E=�-��u�<���<�Q��A6%�,��8N(>Ƃɽ�q>������<�d`<kL��������=���<�Ҧ�fA�=���O� |=��{=T�=\�4>�����=�>A=� �=N��=V�K�G=%�����ٽuۚ=d���5�1W���u�=����}�=�m�=�z����ͽ�-=8q�=`��9kd7��:@>�%f�n� >��=�E�O9>'8>yz�=���\������ɽz���kG�=`p��%�̽TB��,�=2���k8>�V�+�ý��=)�N=�ϗ= 檽 ۽]����Y���4;��;��_=����oN=��)>�c�<E�=�=�H�������G��>CK"��B�V��=qF1=Y>͑ؼ�e��]R >lV>}�=�_��)��=$�����ʽ��G��!:>\�:m�I� >��V��jU=�a�άܻ7�#��u�=�������<!��=��s�s�C����<�ȼ�>~�<ȫ�Q$�=M^�>p��S�������me=t��<[���v����=�ǽX !�+ѽƒ�=�Ѯ�<f�=.�>�Ǽ�`�������gi�j#6��B��\�<�7t���.�˥�=��Q=�\*�m��)%�,������<-������K���<�8e� R��My��|ζ<�LL<Xc�Aɰ=���=�i���۩���m���ZN�S�����=x���L�@��=4H���B=����Ԇ>ҖѼG�=<�E�Ӗݽ ��=��#=<��= u=z�k��-�<0�!�S�pFX��L:���=kw�<���<>YF�L��ž�="휽LI8>��<���<�Z�������� �)���6��Ņ=�p<�v$>c��=| �=�9��9��;k J=�t۽�Y��-�~=�=�,����ӽ|�=ў���^=#$t=���� �F�=/"����
;�z�:cܗ<�U;q��=AW�$����{= KG>_��O���m��:s;��6y>�#"��� >���=}E�= s�=!{����>h��=�� >�~=�� �/��=g���5O�;K��ot��`E���ǽ] >�Z=4�f�*�����b������-�w�=�8�=�V����P>��&;�g=~����KP=�ڻ=�d�<�+�=��?��(�P&��s�=�Q�Ť>�����/=�1�<op�;{�=��=[MO=�.2>_P���C�� �������8H>���B.>�'���uH��ټ��'�&
>� m;�d=����m >Ġ��4���>��߻�8<.��=o�A=�5�=�ν��S��=q����M�=�%�Ijt<"���k�$�K�m=�< ��&�@n@�6�=���.Pv=�<߽���T,���|=H�;�6p��LD=��<L� �U3���(�=�U��S &�wT{��I�����<� �=�,J=�����y=\眽"%�=E���D4ڽ�w��4�>��1=(5B<J
>��U>�ӧ��:��B�=���)�߻��=������8<&c;�ߋ�O8����-���=Ӷ�t�<R�>�m#�
�O>'�-=.�0�6�����=��>��=>�-��F =f%�=v�����)�=Oӝ�&���Mx
�h��<��K< ���t�v,ǽ�zӽ /=JFA���;������ >��~=jى<-��<ь!�Q+��:M�=pn">��=)��<2 >������R�,�Ľ���=���T��=�.������ǽ����<"��=���=�������� ��=�=�<��<�'[�����{�9=��ҽ��\�91�=��<�J�<���:ޯR�e�W�SP�=u���d5�Rm�=���=y�=�:y�
S�<+$M=1;�B�d�S��=���<z��=ٓO=��L���= ~��n>�
��2�=!���FݽjT�����=��T=H3�<~�N��Ӝ= g�M�������=�v[>e��<� ��곽��q=�6=~�'�o6*>���[���?:ؽD$)�U\��`�<��(>�"��@`�=��ν���;i�O="��=rY=�f&�5�q�I�=�0�;��rH1>.J������<�7���#=x�#���Z��w2>;:��w �9>�?=@Y�;wQ\x�.p;=��=ו>�o˽(='�<��s�ј���!M��V�����=��>{�=��<r]Z��Ŗ=Ҭ��XZ=`<>����a����>L�<0ɭ=}ۼ��<PhĽ��'>�|ֽ�#���B8�4�H����K�=LFB=�u���0������L�b���6��'�7���~Z>tn�=� ;�E���p�0>ܻ}=$�����=����0(]=�ټW��������=���<����K�y���=H�^=�B��>��=������ҽ�K�=�q��7=V<���Ƚ�,$>�<(�;8Ļ��.��ݕ��>`2/�qǠ���T=�����Nj�����Q˼�X������` =;�)�%���ד$>��<��~=;�
�(�9>�F�;��>����[㽊�<��ĻDu�D��uL�<�O�=f==-����T��� �����W��==7>ğ���m=k�м�=�5˽ B�=�f�=�O��G�<�X�=)\j=���=�d�=�J>_��=1>.��<��b�y�A����������'���=�+�=�fO=�_T�f�}=p���7���o�>� >��'>RL���]����=��A�<7��(�<,�=G�=���<���:��b=��g�%G�w >����L Y�\��)��e%����<�TǼ�aF>�*G>�χ=��@=��~�2�i������`ƣ=ۊ����q�<"��^�=����8^�=;�<=L��=��q<F�H� �鉠=`�<��߻�u���齮�p�"�L�«߽�ڼqV �3�̽���� �<�BŮ���=`�=L�������ɽ$�">!>U@ >iR;>�ǃ�STT�>�>>��P�2�Q �=������<#\��G-�����w
�=�G=͓C=�ɼ<��<� I:��Y�gcp��14>e�"�n=�ą<Cn]��\j����<���<���=�#�=�RȽe:����=�����9=�����E�܌��Su�<7!�=~>��0 �{W=�<|9%������k2��m���ߵ=+΂�[��=>j�=ì#� ZO�
��<�P$���\�l9@�?�=�R
�w^ ��4���=}� =]�=Ll=�y=�[=P[�=r�<
�>¡\��L ���Q�{/>��&����<7
= �=Rm�p���?��"P= )ܻ��x<a8G=�.��#��=8��<��g�yN�����U�a=��K;��=}>�7��⛭=���� �=�T�X�v:��ռ�j/> Ŏ�ݯA=R ==�)мrm�=�g���R��M�J��x=ܞ*=%� >'��=@~t=>TV>Gɂ��<�<��S=�>�=��^=����Y����{��� =ш�=@C >���<�u���!<�R����=_�2������܀�Z��=��e=s� ��I=<��������,�=1�8�@��=��0>w��=QE�=�6���*>fz>]�ɽ�|U�ƴ�=���<�O�=る��ϧ�G�1��R �J��T�z�y�H�cۏ��c ;dž�G�R�e���*���g�<�'�P�p��O=II=������ʽ7�=��׻8 �=E�=O�ڽ��uQ=k���y/>�Ȕ��m����{>^��s½��a>�Ub=��N^�<kA�*������=�vJ=�Y=K��=�%c�^2�n�< �s���s7F>F�$>��]�й��:�<#9�=CQk=���<��ѽlr=��h={�������=�S =V3�=��½���=m$$=���;���<� �=���=Ϻ>�f�;��<S�>�����2�<~��=\O>�.F>���=�IT=j�Ӽ+��<c�=�'�����8s[�=���=���+��h̋�v� �����?�=�v=5{�=�/��>�{��.U�����}>��ڽ�N�=]��N*��=�=���=�[=1��<rQ<�?W��]=Y���=Lc�=[�Q=o�Ҽ��>�P�<�&�=�<>/�9� ��v��=O�g���">;������������<�[n3=�3����U�"�9>e���J���=v"�5�K�O:ٽ�$��o=tQ���=nV�=p��=$ޣ�ˇ�=1M>kK<5�)��D�=���<%�e�]�?�Թ�=_��;G��𽵽�4���} =��!=����|s<� ���d)=as��災�m�z�=ݩ<�W��ͧ;%ˤ<em�� �'=�B�=(#���=�/н���=�՞���>=-���3}; �=f �"ϵ�/�>B��D�<�> �½�c���Vb�� �=�(<8$�)�;
�<c��Ŗ�u򻫱�=��G=������>���=�>=���=�X>��ҽ>���ǎ�&�=�s=�3��ܸ½}�8e=jЬ��� <� {�P�C>hD >\w��oo�=%� �9�(=��e=m�{=���<�P:�\a��g �=P�>�B�<��%� >�V���w�/>�=oZ�=q�+�͟p=�]�����cX��Xc��q@�<NG콍��(e=�>f=���=�~�� ��=6$�;@��<"��0�*�e�9�3��=n�z���b�q;��>��i=8Ŵ��&���ͩ���G��rм<Ж�����IJ�=�{Q���=�@������s�=賄�� [=Ϝ�:vO�=�ׯ�q@>��z��E=;k�o����=�_�U��=���= � >^�>�$>�i��P5���r=c���yB��r%�<�����v)����<'���[>�ۧ�X���E��C���3 ���2�/-,�)
���37�n���iW��ޑ=�`=6P�<Tz�=��2>�y��W��♼���=,�0���&>N�=O�>����`���v�=:o�E�G�� ��gK�7>����������m�0=$'罚#ν
`��2��a�=� �'�˽M���8Y�=��8!�ѻ��$��� =�㩽��>=eV<(xe=*�==;����<b}�<�)�Z7�=ϡ����A�q綠�2�l��;���=w���@F��ۉ��Vk=����8�½F�`<�8�@�4�,�����=9T%���r��]S��+}�mF>��v�u���9�<��;=u򒼙>��t�D>��=�K�=!�=��=�B���‚�62+� ��=>�O=oUȽNd#>���<(�=Q3H�‘)=��=仮�=5�k��={w�<��0=΀/>֦�=e� >�
d��0����>�� �?��=]�!=�����3ؽZ��~ L��be��>�*O�Mgf���0��k��̒�;iD>���=��?w�=�f=�7μ0!>T�k=H�Խ�#>4�h��;0>��=�7[��]�=�=M\/�������<�M�B�=G"½
G>�oM����5��I�=Vd����=I�U�7��A�<J�=w񱼩i;��R�^A�=3��N�=�� =�4 =t0��s}�%껽��L��n*=�1\�˼�k��<��=����k%E����=�
��zS�2���ٿ<��,��Yg|�g�Ƚ��=��>�b�oW�=��ͽ�_˽e��@2�j����@$��s�� B=��5�D�^=Ç����^�(�꽨> > >bF��.{<.'=�����3=���:~�>f =B�ս��o=T}�׽}撽�)�m���ܮ�=L��:�&��C�s� �j�;U���
�>񷲽����ڡ<��%==<�D.=ӈ�= /V��#��t�1�1 <=Y�&>��Ͻ�>5\������9��z�֠<�;�=N���� �~��=t-=m4{=��B=�_��^�;�M(>H])��d,�F�J=7>����(>���=(d�<�U
���=<��<�
��3�=ґ^�_�'�<��=Lf�XDq��G >6['�dz�;�Ϛ=R;&��4�=8�(=�D�>�=� ?�u�|�ܧ�T�a�>#m>����4����=�
��q)<w==��ֽq�>_2=|������=t� <|i >|�>��>f�=ZU�����=Fi ��ߴ=#��=���=aA>��H=��@�.x�={`}�y�
�����5�;�ڒ={=�X�<:7��:� >vJ5>P�=�2��k�+>j>�����2���Q9=b$�<%@G=f�'=&y9��^���Ž��=$��=��ŽdA��s�=ߔ��-�;*�8{�=$�= k�=߽�<y�<U��<�� >�������<>3D=`�u<B�=�:=#V,�9齋���e*��s6 ��z�N䟽�}<��E=�r�k08=n�>���y:<3s>�b >��.>4����A=�ҽX�<� >�?����+=&nT��½���ǼV���Q"�<���={^��*�M<~�Z<~�<=����`p���^=D|ɽ%f>8u�=��>@���n =���c�t=L*���L]<��-=��J��+C=�:=/$�"N8�W�C=sJ� ��:�n����<���<ƽ>q)�k�&>j"�=�](����:ӼǸ8>[�</PD<��5>�oE��X�<M7>SIi=L �rz8<ס=�{ɽ�8>��C>��/=GϦ=r����P;���=�jZ=�^F>ߪ=$�3>t\�=,k��)u=�����=���=)�h�ģ�����;Rݽ�d����?;���=*���
��>b�=B��=����`I>ԕ��k�>�V�=ƨ=�̼��=��>�)>��I=A��<�m�<�Vo=s#I��^��T=h�P��σ=J,B�����cu�=AT����[;u��=�j˽�� <
��=L��ኩ<cHa=��=�~�:�I#�7Q<�L��
�N;��==�����J�D<��,%<�q�<d4B=^Wս�ʫ=����»=�ּv�%�O��r���� -<���<n��='͗�9ax<'f�h��|�=�f>�d=f�$>��@��컭< �-�d=갈� -�#'k����F>�����=��<x�=|��=�a�=ēn<� �=Q��=��+>��=2Nh>x��;P�8<f>�ߐ��uD>��H;o���7�=�j���[���*=},���4��_�u���<���+�<���=�#>d�M�O�J=�񽽇�<e��=��E<�� <Hï='��W�ɽ��6�]�x=��<��W����=l^���.4;t+0�x�0=(u��� 8>A� =e2>|5��Q��;c:��]��=*�W<�p>M�= �>����=�[A<?�<&T+�E%K��u<+� �i��<�-C=<ⴽؒ+� �E�K�<H��(7�p�;>jЬ���I>R�=W����-= �;�wb��/9�\�c<��>#�������H�T�"��=xT���v<*�=OH�=Q�/�0� >����;��5
<‚=T덻J ��,���vOw=R���M�l�(�=]����9=��=4ϱ����=�-����=ꐽǢI�!?���4��@�=O` =�m=�����<d\=��=U�½���l��=�ν�G�X=]N��q�l�:(>�6�5����F�(J�ؕн��=������:�х�t=L=3�� >xxڽNm��T}%����=��V� ��=d;�@�*�$<=���=e��
��=��5��k>��L=��>:<;=y/=����@<�I��1��=~Xx;�S|<:����=��=���<�۽*������a]=o�g���+���V�ٜ�=n��:@K>O>#�X�ƽvY��O+>{�.��J >�����#�<��ν�=���:��ļ��J>0���W�=�)�=�0!��L���A7��B�<sB�=�=@6u=���=r5�1�N���H�=��,�?���� ��(Oq>i����,�u�;;`n�=��">���<:!�<#Io=X��ʿ��߇P<GA=����������=��C=ޗ8>txH�7���`���%@>�J>/V4��}7��:� >���=I��=�7�=����t�6>��D�>Ƚ;�V�=���=~1� ����,<B�S<pW>=�¼����L=��>�)��Yg=���i�;�f �����I�=&�9�w�=m�4=�%�����<�(%��S�p.I�E��}��)�� ��uԨ=ȁ���-L<O�=������2 �=@K�=�_�:"3O<��_=�b4<���Ƿ{=���<��>�I��v(^�- >Ӆ]=(��#���S� ���g�(��=25��.��=e?�P�<�1����>=t=/押z�>=�
νy}�=Wب��8�<ٳ��;3-=�6=RfM=ר+>L�#=���=�y��أ��������7��=p��=��=.�@=se�=I>�n۽j��`F�=q��<�(;=a�k=�J�������<;en=]�ӎ���H ���U���G>:u�=������dYK�;��=��{=��<P߀�\���Z����C<�V��ɦ�Ⴝ���=q��:i��=�籽�)��[����<�ƪ���^= �?�������Y=�ؠ��Jk: �ý��=UԢ=��nx���ʽ�V��|����ཚ�!9>� �›�<t-�=�&н+A� o�<�*^��E����U>��9<X���<�[����P=͝�<�@����R���!ժ���P=���,ؼ�*=���]5=K��x,B=�_=:P�=�H�<_�I=g@�=��<d=�sl��,�}�2_�Y�m=Qk���< >�P>*���^��=��z�`�>=w� ��=��7�]Լ��3���>ƽ�]��sP=}٢={����VD��UK���
<�c�=�7f�l�$>S��=�,5<��==+l���&=�7�= �,>CY��~Р���ŽJJ��<��&���)'\=�jν��<�{"�ƻ;�A�A�J�;f��=��!>��=�j�^ӽ�d>֤{=U �=7L�����a`o�Y�"{�<��w7V%�;!Y=�vB���=<b>;��a=] n=�:��:S����_m����GU�v��<|Fa�5pB>->�V���\��1v�h�<=陨��c>T�|;�j:�1i��{B�=FE�j��=�V�=�z �~▽�e>�4 ���Լ�dL;�F>��&=*�=ˀ�=��6>��=���=������� >�<\����<0|ܽ�z̽""ؼ���=�"�<m�}=��3�(���yB=<~>�
>'�=0Y �\��=�쾼���{特D�=t �e�=N��=���< �ټ9Ż�4���mH}= ��j��=��߽�Q�<��;n��< #>�Fz���5=�L=���S��k+=75@=�#>�-3�Ͽ�����<"�|<$��=l<�=;�@�;��<C���Z?]����=�ͽ �=�x̼������ =ɬ�=΁I=:�*<�0>�.>>Ù=���=�t�<�g����<`�M>�¤�H�<�M�x�˼b��<�":>�� �����CI>��<o@ǽ�w�=4�=z@���>˽�9;�n��e�սT״���l��U>��:�q=^�*>��<�ϼ{һY�>�������=>��R=��d=nc���Y�.Iq=����<.���B�=��_�cI�;Τ>�5Ǽ���=U�=o�<C����ݼ���=i� >�ݧ=m������QS�����;K��=�9���B'�3c%=��O��9<.b�=7� ��=�=N\_=͖;=5b�=��=0������̸>H[�d'�����ŝ�(d>����\��}G��_�\<��>xb�=z�:�t!���=�븽D�=��'��S�<v�f=�F��s
=��r��<����=o۽��ڽO >;����=��Y��~d��(�:z�=���+߽��=CI�����<*>�=�<��R�x��=��)���<is�!>9���L ��\�<����f!������>9W����;㴈<b��<gOu<42��˽>%>��O=߇<�FJ=�'��3�;�ޤ=��<�'�<vha=�A���1>V�[^�Oc��/ž�����ҫe�F'>�p�=�R�[�</A�#�8Ā�¤4����=Ī<�S5>9 ��T��ç�x�=E���;ʼ�;=��o;3�ջ��$=`����9�=qbr=�C���=��߽3�����=�;����!�=��@�$+�t@;8��4�<�9b=03�<��J���'��Y����4���V�,���aʲ�M�-�3�=_�����?��8�����E�=��7=%ꈽb��<�r�:�� >[��=�Hm=Ϧ��7hǽ������J=ݜ>����=q�7�MA=����Q=��<����>�_=�t[�W�ٽx������M���ns��*��+>,��=���<!@������!>fWѽ�#x=� �=]�.=�i��g��9��<���ތ=�}��[��=K��=#>����>���&�p�InD>�>���#Pͼ�e]�b��=�re�5�%<�C�=M�=7׾�Xʹ=j�d�d������}���w꽼[�;)��#�=1���5�1��������� ��TQ>�W�<�댼����9H`��� >�Ū=NƔ= $�����=���= {�=��s==Ԙ7��b�78����=���t�U>Bb��~�]��4^�%��<��ѽi훼D*����ΐ>
� >uߏ<X%/��)�Mr>��<;^�;�J�;�v8>��н��;�ż�۽�f�m>ҽ i5��h>Icҽ��=��(H������ʛR="�r=�$>Tz�=�Z�=���=����b᣽��:�?aӼ�2�ۻ�=�>F=\r����~[ȽR�����n� �3����=ufA�C�R��� >��=��y�6��Gsν~㽰�2�O�s�*��; 鄽
[�=G��=ٲ�=$�)�/��<���=:vN>� >���<�+����C<���=M.��;O>&�=�wX�i��R*K>|Z6�Y����Q>%�<��T�n�
>� >d��J�>���=�s�� �=.� ;�r>~7���ڑ=���X���4>��w=��q��r��{����� =� V>�h>��:>H�=ӎ2�>�>0���=�=�����>�o=E㰼�Â����<xX���}��h �a�/���\�/��={<=p�=��=kP��+)#���K<��d��=��>��Ľ� ���S��ؼH:>�M�<mxk� ��=���Q�/�I�=�t4>�����R�= h1�.�>��F����A��02���<���<����VS&>�,,>*B[��[1<��
>)L<�}=lイ%=0tU=J�`=r/�=s�׽���w=�hW�=ӽ������E��m�=
�b�U=�CC���=������F=��˽�"<ʣ��?=��N=�߽/��=��=����5�K�P=,�$�D�>y S=+��ϵ�V�}=�W]=Vr�<𷊽�<=z�޽!x=VI�=���=�B(<���zCp�}��=��;���o=�X�=��>>�q�= '�=�E����گ=#�3��=�g>-
�����<�R�v��=� �\��= ��=�&�d l��T>�#��$��ÝH���=���=�?ͽ#��t����>�U���>�<?:I�6v���w��/��=>�<�v ���=���=���<�=��*�Ǭ>��À<�45��=xQ��e'�=��=>0>*S8= �7=|�����ٽg�=�~���\����@=�~��!,0�\��=� ����= �轗Q<����k<���x<ڢP=u�<�z����&���Q���<��?�x%��nz���>J$��Xt=���\L�=��l�+T>��<J<��ŗ��'��ú=�w�="I�(P�<��1>�s��U���'=�Ӡ<����pi�;e�i��!׽��?>�.T<nȶ�V��פI<�"����>�.>�,a>툈=��O=�}��sg�.3���P@>g��=��u�i��_���ɽpg���ܽ҆�;)F�=��:9?��|]!=���=��2>�u����>Dl�=]���O�q�dS=>��<Z��:,�=Q�ɻ���r �r@!���*=]�a�5t��C��<�dC>cny=��Ͼ0>�OM��W=!:>�k�=�H<2rF>M�M�90�=�0S��V�=z�9>Λ�;,���^��'=K���=إS���]>�s�8*�ֽ�ꭽ��H�]3㽙��=7MU>R�;k��=�����i��d�>^��j�p>}l��e�;��\���H>��=E�)>d�d>j��zN���X
�˄N��潒��꽠����Ƽ�H/�qxл��O;��w=%�=��9>;>J=�&�=����ͽ�7>&�=O���u�<��z˽��һܻl��/�=T;��Y����>!���5a�<�*==�E8>4]�>s)�p�>��Y��W�=��4>��4>�Tʼ��>�4w<��=�/<�O=�5��I�f���==iS����$u�������>Wa>����k��<>��=������=��<����H�=�A}=�y�=*q�=M� ��`b��㉽��^��֌<>�x=�|���$��螼2d =S���4�p=�x�=J�L�ͻ�=� =�.=��=l� �KP=�����*�=1��<<����>��r=�9/��#�=���=\�8=�5�;}���0e���K=�H`���<�5Һ�`��E�E:i7C>P>�^�;��L�����Z�ݼM%�=�"=v >8��<�=�o�� 6
�+Q=��y:���=�d��6P����-�35J����=tX���D>C� �4�>)�<�@> �W�Ng��4��;M��cqB�)lk=& >�=r��=*˼�F�l+�;� =1�?���.��Ʉ0�����̃
����=�@X�8�5=��"<�X=?��=(/�=�޽3��<Mc�=��-�f�N=��ƽ+��+�v�Zɼ���=Z�>�=j;Z=~ꁽ[;�<2;n�;<H�j�w�
���Z=��A�z�$�� �'z<~�c�P���!a��p
�I��Av;�IC�"��br����>�%�=)�0���E=5GX�T�=ClM=�2����=�/=�$�=Q��X��=�ŗ�a�L�
t��Zp2=VHY=.���&ʽ �-<���A�=sTI����=d� ��Y�=&½�u�=�5d;�
>`���}s�=,�:n��=~���P��<}�¼��*=�ʀ=���<.�d<�=a0���L=��Ҭҽ�*>�J�=h�4�Զ=��=$��=K�e=4ɲ=Ap�4^>�FX<��=��O=�q�<+p������3��3r�=����>+ө��i�=nʛ�얱��P�U:���p��2߽�w1=$]�;e[=�ˀ��1��=R�=9�=�J=��W=j�#>;��;f3 =��l�N�H>n�J��}�=�B�bn��a�`h�=%u�� ,;TH���2���l�=跮=v�����ケ�O=d��=z���X�=�V���b����>{�A���=�[>Z7��XBI�� �=�%켕UY=([�=��F���=n|�r�=�-�����a�����=��">�t3=��U=+�R�� ;�֒�<��|;�Ƙ<�m���C(��\X=�橽�LP�
I�=��
��f4��� >��;g.�<Xq�<��`졽��;����<p��=��[=����"{���B=���<���s)->�\%�/T�=�L)����=}��:o`�;Ǖ������?G��Ŀ���W=j�>yZ=t>�h&>�����|�=�(0=�~�=�Æ<�4ý ��=�˽A==Z6��㙽=��=��7������)���Ǽ*{������.��<2{%���=^v�R�>�9�=ִ<�g�<�K=���<m��<#�Ľ ���⾝�.�;�k<OС==�j�w�#=㴽�2f�?�d =�� =!<r���=�E��$*>�J�2��<��>�:=ڏJ;,Y>2}>�$w=��>����(���ր<��<l垽Б�<T �������u�35,=� $=��<w2]=`�q�����Ƒ<��<>�T~=��m���D�����k�{�!�{W(>&C���>�;�<U��=�<FX=������ ��H ����=B�@;ċؼ�sE�wV�=��ƽ�9�=on
>Y����g��%h��н��=yu�=Y�c<, ׽y������=���=u"Ѽr[B=���=9Ѳ=��z���s����S�ֽ󽑠s=�#�=k9l��f��c%��|�d=v>~gD>� &=u��<���=Hx�gG%>�K3���4������/H�{�!7 >�I�=�����|�%qѽ�7�=B�=�IH>Z0L�,��&�o@=�?=�4�=�~?�qL�=Hv=sh��q��<�d�<�
�=ՠ'��]-���{=�|(=�W�[C��'��w����������+��l=KW�<��2����<�?�����=�p��y��<T�T�cN5>��7�K�X=�[ʽ7d7���ڼs�޽Z���m>�d���jM �m=A>V�g�l�=+Խe�c��q����Hx� $<��<��+�;��=��\=��m�;� _�ԕ]= -��� �<ɤa=0�<�&x�y�#�;ڕ=D�= ��gUZ=G|z=8�����1�� =>�<L�~���N��g;�¿=�_�=8��� ��&������<���=�w���a����ּ֖q=Tt��ܷ=���=@7�=(x���fk=K��=�g�=�� ��e>���5�=a>�(*>5�=��=�'�=�p3>�J���2<�|�<��,=̹�=\�������)��=e\�<�X�Ե��~��=(� <�@�����=�l���S9�#��3<��蘃���&��9J>��ٽ]U�H��<"ז<� �<�?>\���C�LX���I=�5[�L���� �=�Ϫ<t�H>9jI�9�E=e睽���= <>S� ��9I==]�<�a�;zD�<�Jv��#=-�>�� ;]�;=hv�� V��Ž<��)>,\����=�y��?�f$�=l��9#���J�4�->kн��&�==>�v#�8�λ�S ��Sf=(��=j�=�Mh=�%۽���=d�&=�l=�e=UI�����=`N'�aS�;<��PX�=�97��ī��4O>��t=x�.>��Y=���;�Q��彩X�=�a����<���=�D>����-j��T�c�5��Q8>��=^˥=r:��[�=�"��1��Rl=]�<=�,=��=��<'� >�{��� ������rӽA�aP%�s���Y¤��D�=���=g�=ޢ�=�9E<7�a=�a<(���>�=�{�=�߻�]�܁��в�e��=QF1=yR<]t,�������=��8:�R?������6=�(>�&�<W��=_1�=I�˽޽�8�=�D�=Z��={0�=�ּ�>'�@�ÇƼPU>��Z>+$��ۛ=�@ >n�c>���;e>���Z�^=L� >�;Ӽ����ڽ��B��ZU<j� >&Y2>J?�\0M=� 5=d�=�������/���CYW>�`�=�n��ȼu��=���<��w�$��=�� =>�,=aK"�Y�<�:�< ��vp=��8=B >eA����=����Sս�:�Я�=յi<>K3]�� V=Ͳ��sѪ< �=#��=S]�p𓽄'=q]������~~N>;���VA=ޟy������}�%�ν@��� ����=�_�=n��=�u_=�a��YF��{�4=<�7���<Z�=��߽`�=���ld�hk��n����x�<o]�=�!�����=�8���_��pɻؚ����'Ñ��c�=��=�Ƃ��p�cy=Co@<�=��d�)�ǽ0*>������uT��K1>)�)��=��a=�m)>��>ğ���e����=�<�{�>e�j:���=q��=Y�>�px=m���`���Y==�Y��T>��Y��h8>��������/�=�xw=��l=��>����>;���n=�M�=EK/���G����|�=`��=�ѩ�
�&�t$�*�=p{#���c���b��z�=�qB��@5�͈>V���ޝ=���<q�b=��3>;v�=� �= á�$%�=g܆<@��=_��=6� �Y�n�S�мۨ �t��ם������֥�f۸�"T��t�#>��'<�cw=��E�e��=4_��O?��D>DV2���A<�7�~�=�f�=��E<�{>p.3=;���~���8�=zL�<��O=9�<D�黟F>-q;=��1�JD=�k/�t��=��<����u�<=w�����=�ۼ��M>k�=�11=1�*��6��4�R<��1�^~@>H�<}� >�i > �=�r3=2L�<YW�=�=�������<�G�=�)�=ِO�d ��#�� �4=�ƒ�i�4>��> ̑<�Զ�G�/>�
#>9;���.��kr��C�=��A=�s��im>2)>La��u��=<D>5
~�ɪu�0��=�� ��������=��Ͻ�р�b(�xW��oЯ�a*';�3�=��6��A��C��<ĩ��S��>�H�=|yս�Dڼ��;=��e=�J<��5>*�^q)>=��=Ħ$>��$�!� ����=���ҁ���c�}�����/W��"�8�w���=���=n���wȗ=�y�=����I�������g���p�A>����)(=S<0�J� >�\c=o�=oD)���=���= ��%E=���"��l�;=:=ɝ�=���<hO�=��=����ԁ0=H)==�lܽ����J=>�#��.9Ǽ��|=Jx{�w=��v=�4Q<��F����=`��=p�<R��; (�d�=1�Q=h!���#>+����]���(��.s=�7>�y>V�=�����d�<O�>���=+�-���m���2=��=5Qսr�
������4�<����$�'~>������=�6(>���=W���* ���G=���be�0�< ����O�=���=4���;�=��[����;F~=IF��Ⰶ�y�C�b�j�"�o#���;�'��L?>��3��B)=��(��B>=v��XA>�wȽ�2��՜{=s�5��bM� ��<�)>�{��� ���s���<�H���Ű<�Z;�Gl��H�=�A�=P���<���ݸ�=��<Q�K=E��=j���$�>F�l;�� >�q�<i��ѬI<l��S�L=�]���j�U>��z�q��=�
@��ռ6V`�ɿ0>������>6e>�3C�u�C���>���`r���.>8�;<e�������K0>Ʀ��Z��<��ﻲc�={r��ڝ��߃</X�={���?�:���=_��=�m0<�� =��V�P�8=�����U^��g���2k=�4�����c����E<B��<�T�`l�#c=|���}�>�3����=Ǒ->{�:$�=�l�<w��L>����˴ȼи&��b ���4�A,=~��R�_=J��<jgk�������<�:1>4Z=iN�j)���q��xg���>�==��<�����]=�$߽�F�<����O�*;��q:���Z�1�5���*޽=�#2>]���Z���.=
^b<��6�>���!>��ؽ�S��txx��\��\P�;�.4�jR�=\n>c{�;ir2��A �o�>�9ҽ@ T��O��|ۼRd�=�8�5�T�!���f���pF=�F�=��(0�=p=����q;�*a= C�=F�>!�=>[ݵ=��*>���Al½,�Ľv����U�=��,�'D+>����@n=������,��U0>�J=SKg�nW��w��9%1>6�= :�ԽU�Rܗ�6��=����;L=#�弥���E<��P���=���?>����W�= ��=��=U��'KP=t
9=���<]�&;���;���=�z�=Ep#<�ë=r"=����0=,�^�lp\��b���8���1%���I=�5�uf߽y]�=(�9�(̽�W>J&�$Ĕ���C���#����=���=ډ5�O �=�Z�=���=���`��=�" >��=q*[��v�SЭ��)=�Þ=�DZ=�3>��>6����Q=d� =g*���&�_���\���3�=�.>c�=[]�<R-�=|�6>��=�a.���=�.�<ijd=�m�<B̼�*>Ȣ���a7=@�ս�M=4Ƚ4�B=E�=��>���=��Q���[�2��/�e0)>��,>�������Vn=wE���0=q)��� >~WݽCD >�d̽�,*<���=����dʿ<zQȽ����+2>��*�C����=��=pEȽ�����`>� K�2���Hy��^i=p#B=(��<�� ��� �:E+��VD����=������RU���<�R�=��˽Q1>K_��8">��.=����_�1>�o���� �wgͽ�l�=~>��>/��7�r���F>��<U6"�֤��3>v5��CY=�b4=�&��a�$>GF�=������=�%B=��=ܠ�=�T�<k��=?�&:�ɞ������E<���<o>]�����>s�]���&=TD������/���%�x�Ƚ�� �֌W��1;���Q<�$�J��=P�C=8LY��&6<]�z<�P���齦_>�%�=k�U=��]<�%{��dh�̱Z���ܽ��W;�}�<<�<}��� =wP=���=�[��&�
�d}$>�ڭ�Ĉ�=�6=�U.�~o� s�=�H�����Y��D�@=��<Nsɽ0j��!C�ґ���=3ZF;�nb<1��<�ͽK�$�Wh��IZ
��~ý)v�=�q>�Qʼ��">�+�)�>{�����G��3y�� C<m��=���u…=�_��X�=����
<&�Y9XN2>B�lZ���=ud_���";�ho=�w
>:3�;�)N�p��s��e�$��/�����=�g.�u�B>���< Qz=FD�<sC=�f����=�$@>œŽ�J=�����f�A�=�Jܼ��޽M�.�c��yM�;�,�<H�8=d�r< PL=�{�����lD
�q�սN�<�f_>�����E����>�^d���$��'>�r=ʠ= �=1H�=����Iz���=�Н��c�=D�a�c�ǽn65>�>x��y ��r=��K=�0=�����<�Y<&\�=h6�=�Y>5����� �w �=��= ��=~_����o=©�=�c��r��=�_�<�$���C��P\�<� �����ʛ�����=��N��5w=%F�=�Z =��g�����N��=F����0>]r=KK���� �'��<��&�hI�� R�~Ȃ�If������"���W��Tٌ=�_�<��� ����� �����=�y�<�'���)ͼ�.<ã���z�=� ���UC�$�/<����>��=_��nQ�=��=̤W��SU��������=R��=Ɯ�=��>�-o<6�?��~=H�Y�*�:=�>=>�;8;S�<3���h/��X{����=��=��o=�I��,�>7���EA�Wͧ<am�� 4?=A�=��<�P ��%<.���l�=��Ͻ����U�=*">db&���к���=�D�=�G�d�-�H򛼿q7>��F<�*����(���a+<`R�� �ؼ��>F<>"�8>=v�=�$r�h[>���<��+����^A��)���H�==�<�<�=.$��<w=��佈;�<k�Z��x>�"� =�����=~;���==/~=�ش=��6�sk�=�>.���[��6�5=-�?��0��Y�=I;�=�򻽠��}���2�J=w�½<g>֌)��� ���\�-=� G=� ;=?�>��;�)��!�=
���50���B<8 ��q��B�X�~S��OxȽ�H]=�<�=��>`p<�;W=)�>>�R<1ܽM�=dP�����w�ؽ��<��&(�����V���t[$�[���j:;D�9�ҽ_#�<i���$�=5C�=��='َ��<P����=�w]=)�8>�S>�bŽyk=Ŀ;=�.��]��"��Q��<q��>�O��9��H�=Jr&�O�/=K��<�C���:�=$rr=d��[G������� ����<��0=8Ή=�)�<oA;2B�=��`����= T�u��=�� �Rd2=+�*���1>]Z�Ŭ:>u�Ӽ�=,�*=^���U�=�A=�i<��MK=���D���kt���=�ǖ=V&�"O=�� ��ˮ�͢ɽtX�=�!D> >�@>��m� �`�kdA��Q �=e�8>L|=O�̽����uc=��q�NZ��+$>������
�$��ٝ\:�4�<�t�B��=�M����=���'½�ܱ�o�=�a>.ݯ<����X�����I=���7��B3�<
�=��k=^w<U���e �=LmB����=L��nt��73�<�d��_��=��P����=�@a�<K�w�b>�"1�RU�<Z_��;�� 8�<�@ �4��<p��=d{S���=k� =��(=�s�)x��<<?��=�H�<��q=��=,��=u�$=~�C��j���u7����'�ۼ���=�b�u: �1bE�� �=��ٽ6D/�����W�=��=;�����=��@þ=p����P,<��=3���l��=�m�=�a�=��=z>��==��=�9>WH�=�� �,IG=���$'=I_=~�l=��=�ҩ���R=�Ň=B9c����=�#ڼ�D��� ���5�w��;*�������N曽������9��y�E �=Ro��$& ��Oy=�,T�K��s�=_ϴ��/���;F�ўμF��<ɀs��ݽ7���i����x;��ٽ�S�a���[7K>H9��"�����z��1=���=u%z=�����=߾�=���=#��{t�J�)>t�P>M+Z��ӯ=�U�=��9=BO#=1� ���-=`�Y=��=�z�<���={_&�<Rg�T&>��>/!�=�}ƽ���<��>��p�uE=�s�L!=i>{Vc��<������=����!>iK�=x�O=<�t��1߽��>��=� >`�>9���l6Z>H�>m�+>�O�} ʽ�}!>D�6=ʼ=�b��� <F�5>s�\����d���%=nJ>ğ�i�T>B߮<��뽔6r=aU#=�S@>���� >f��s@>0WG���H> oQ����0A=�V<�ջ'�.=~�0�H/��
6<���<X�<D*<��/��"1��f�=i��=���6%">[=��p=hڶ��U>�������{m��W��lE��T v�����h�=�y=�b'>����.+=�Sܻ�, �Q*ؽ0A>�r�D0!<RD>/*���z=�~=9ӑ=�J�j �<�5½3y�<e3i�s/��vH�0�=�� �1��i��=���=R����<�R�=���:O��:��4=q��=��%�ߙ���~��S�=�@�<�!5>���=iu�=Yf��� �=������= �-�";6���YԽ<�����=����1r:�Ь�% ��G=э�=��S<�_=��Ž��_==��<�.�=����<�5�=���������>)�R�-8�=E���"��V�=��μc�ͽ��ɽA� ��U�<rrr���.p>%��Wl�X��<�W=4����l�E�>�g#=�66=��8=1�=|9>������>�Z <�$L=�
�=k>g3���Y=���7�D�GL�=�3G=���=��ཫ5M�X���¼��=E�����ϻ�j�=���=����GWܽ&�=QN���p�9)\>�?���ӽ��<Ӛ�=+� >�P3�V%m��Ž�N�=�:Q��$8>��`<V��=��>j0�;s�!����M�<͸<7���)�'>z������3�=|o�=���=kG��/�<�F�;��<"'g��(��/A%=�G=�O=͙�cg;��$�|�M>�V��� K>�.=�-u=�_g>��N��Ld=����Ǒ����Q�@8���}�<U5����=aT�=��=�ۀ�xk-=�Br=Zl�=5c�={�=�E?��ل���}������Dż����*��FZ=" ���E#��Cd=��˽<��������v���$��m2����=�ǽ�E;���=Fx���Q<����BD���>EAZ<�|o<#�ǽ,Ȼ�oZƺ ���!��9ɺ=g�2>�7����(>./�=�[!�Ù'���(���<��{=���=��-�xL> 2>����:&���ܽib�;�ty=� 1>���=����ؽ���<�8>'�m��ށ����l��;v�H�T��JH"�Z�}=��\�۬=�q�)��<0��p+=4q�=�UE=� μ)3=��]�1̾�99˽��)���=���EBm�Yiҽ�h�<���E�W� 5=$s�=�ֆ����<2�=X><�r��j�:>:FϽ��}�;��ίU<��Y�đ��N��= #�<�#��jZ�<hp��t�=�)<������>�a=cb�=�n�=��ܽ�1��Z ��i���U=�A�<�{T=d�=k��3 J=j�<ҝ�/7����G�����w=p#˽X�>�J�<R��<��>��<�`>2�p=�� =�r=�v�<Ȏ�wU�b �
�S��z��{��"��aſ� '={��=��]=残=\�=����Fh=9����b��,�0�)
��W0��x�=�"��|�=͢=:~C��}k=�,���|�1 ͽ.�P�6�`;��d�|a���2����<� )=��$��Wi���]=���=��@����=GCZ<>�D=ܓe=2���>���+�6=aI4���Ƚ��==1�<L��=-�½s�g�˅>�O�&��=���<�
���D<�e��=�K�=k$<a =It5��e�� ��m9����<���=T>�!r�"� ��=��}�����N>�Q�<ZN�=E��� -��.h ����<3&@��>� ��@s�;eF��/�<���=���-��ѹ��䥽h�=�7��=��=<�+�=�<oힽCJ�<Ok�=otI��2>�}�<�]��ĽD�A��MS� ?�������@�������Z(=^hP��팽�>0�o]�yĽP��=_��=J�.�%G�=��Ѽ���='1���8>��(�`����x��� ��"(�J�$> �ǽ⻅��y �k�=��=�a�?f<Y�<C�>��%>g�T=o�������(�N��=���;���=��=�h=��3>���=q���&5>��=v�̼�,��J&�<�{;��_�΋?�kF�]�8�ҍ�=�����=V��=�&b��W���˼���n~��:# ��I��q��=d�/=��>uT3��d"��'����B�N<W��=�c>���=���<96ν��ǼCw*;�3>y����⽌�D=]56�n�q��K��j ��!\=�v(=u"�����=�^���
���1���Z�I&�;-����=ظ�=����׼���V�=
�w=��m>��<�>�[���=�,H=2�>�h<Y��=�Q�;�t<���<��=P�ƽ�{3>��U=�P�=sj����<��=��?�=�e=`OR��9<>/�W=��3>c^��#&=�������<�E;�}q�=_%�= ^9� �w <<ޓ=����r�� ͓�()��S����=.�G=��
=�*�<�;��o�>� �Wu,� /ڽ�Ѽ=��������<����.��n+<�@=�b�q�=�� >}����P=�νEBҽ�ow���ý�q��jO�:���<t�q��=�����g>|�K=�� �������wQ92�?>&�ټ�}߽l���ycD;[��<j�>�Jx=�H�=���=��<0~ ��� =��6�x �=O��Qϣ�ӌ�=��=�Gi=(�)<cy>iq���%��e��%A�:)t�����9�����=R+���ǻ-��;ހ�=�t7��=3���$�V�ʹ��E�^�;*�뻱��"�<��=#�>pո<�OB=�QĽf|<T�F<���0=8�X�=h̽�j���SW=R =�+���5�=����ֽߎ�V� �b=��X�����
̆=���=��)��s��ロ���<ۍP�jX�=��>�J�i[.>ӣ�9��x�����\<�i��:9_=ѧm�sᶽy�I=�H���@|�*�=�*>�>�=፺��'�<��=�����=�T����� �=�#C>V��f1J�4*=�5<({
���Ž�y�=�C(=��=z{�;��=�DX�RN=�@*>ܭ�;�D>�$��W>^D8=E|�<!��=}v��������`ҽ{ �F�1=��=�F��+%>a�����Q��<���<�x9>����/K=H:�=�>J� ��94�?39=�֋=zh�=�ѹ<��=O9��1�����=����=�{O>�?�=7�>��}���6�n'o��Ws�d��=_�={銽�Ə���=����k{>~@��)���?�׽�������"�=C���
�=�j$��-=V�d=����m�=D�&=*�k�7+�<��;��������=n��<�h=t��=�󣺝�8��,Ͻ,=��:>�RG��ʥ�I�=��4>����3��4y=��=hlK�l����'@�臎��T�� 17=�1m�D�9�9{ӽR=+O�=C�>8B*�[�*>�>��l#��z}�&��=�b=�"=@�_��s=�υ���ڼ��`=v�ٽ����;f�=>��~�un�=P���=��;=����^��;p4>�gս�<=uw{=@.-�y�;' ��T=h��=��Pb���μIڧ�}q�<( Z�߈8=����b$�(�n�.t�":��e�t��=s*�=�v<�.�=�H�ri��lb1>B<�<�����-Ƽ
��<آ��l�<|��=�"=�����;%�����+=�>� �=t��9>S��<o�=�Q �H�<����{��=�[��K(����==�m=�@�n`�=�� �1��=�����#���˽h��=F�q�����>�􎽹�$� #>+C�C�>��7>ɫ��QjF>t!�<�N�=u_1�6���1'>�5%>w�;ʏ2� j�����;c�Q�0?��p���j<�v���N��6�<1�c撽� #����(X2��Â��6���j�=�tl��l�=cl�=t��Gэ=��|=�9X=�GU���_��V����=FG�=�g�=(vi=���="���3����{�=IVH��>*�>Fx�=#,>֖>�K)>��=�O���->K_����C�45M>P��= �=Cӄ��¯=��c��=?�*���.���n��=2V�:���-�=�k�=��=�5=)�!����=?3�=q��;)��=9t�=m����7���ã�s`=`��=V�P�pѼ�ȽL6���Zڽq�}�gW�n���6�e=�Yֽ�N�=�TJ����WWt�'�`=���<$g�=F7�=D�>�E��t�=��4��o=�vS��y;���>����*��<�<w?���>F�+��/g���-+x=f}��������=p˄�:��D��=��J�UN ���
����=V:޽*^¼���=X��<�57=%�d=�$�Fv=E/> �˽m�`��Kƽ���=_��=#�>LCǼCia��4={��=�3�<&@I;9�>��t>ǽ��Y=�D�;�o;^���l5E��������=�~':z�0>�����u��Q9�s��=��Q= �;�7%=D��1��=�/�<�c��!���qN�<2��<�[���ý4�=�"�<���0>�� �T�>����=:9h�����w�=��o;��_<����1=T#�=y)��2���.�=�I�9 ���č=E^�^�˼����QN=�����h>S�>�J>����9�A��f<+V潚�\<��!���Y<���=�ܜ=��4�߳�=���2���J�Jp�v���e��:3����<�Ž=��/�l�E=�=M��=e=����<�ǽkN�;HDλ�
�;d`�v&��"�=?����b=v�=A>���=
C�<9��"~�=�2=_�=8�½G�ýԁq����<��3��٬��A��M�8�)4*���=Jj`���<B8¼ ����=6%�=�:-�ًͼVb�=FYԼ�ce=�O����:�N�=��= �l<*��=�#��n���,>}"�y���;<}
��o��<�(�=�=����<���Lҽ�����Kx=6n����q=��q=�7��<aS<��<Ph�=��7ڽ��7=-�8=��2��
}����t������:�`�=�t=�Z�vM�=_��=���<݄=_ R��6i��F��&��<-h�=���=��ǽ�#���$��T���#ڼ�=�y� ���D��xh���眽��M<6�U>Y�$���9��L�ͱP�풥��У���$=�F�=]��=�V{��@b�m��<,�߽}��<�q<=��W4ߺ�E�=�3Ƽ�.��SS�<m#�==������0�a�<->e\S=�>$ �k!�;���DH ��֗�8���D>�*O>;��=��|=�"\>�����)�
�:���=�N���rx�~#�\�R< > >�Ȇ���_>�>�D�=J�>������B�۸�<Р��pW�=8��=S|>��!��8~=1�7�o�G> ��f��;���4>�i��$�Ǽ�8Z��D=?2�<���Bƫ<��E���%>�}߼��#�b��C�c=�9i�Ζ�=�ݽ��T=��=��>6�μƓ\��g�=cG1>�~���潄%�������=?�]��[�=����>>�Mѻͺ��/�ҽ?a=P��;��@�<gO=�=��=-�����<���<��{=T�<>ID���~�<O]�=���(���NU��F��ު�3�*<"R\=��F:s))=h q����=j��<�����b�X��� >�ƞ=�Gؼ�4!=##>�>�o�����=9��/�<:�=�Z)��V3�x�=�T�`�>6��!�M=Sx=��l�<u�B���d<��(F����>P����=��ؽ������=/1U��w=I���2X+=�Ie�P��<5Q=��K�GF��ϽO��=��<�9�<�3�<���=�`�����<r�6�h��<��=e�<x>�� >|�<�e��ٟ=u����<���i�f�d�X ��$���=-zv�j%�=x���o�K<��˽O(�<M��<�� >I��$:� z=����2��m> \�;�g�=һ=�(��<��=��>3�)����;�,O�NY$�ٕf=���<��5;i������M_�<ۓ����<_�{�F���K�����=��$��^F����=]��=�Ǽ���������9$=���;5Q����=;3X<'��PAڽ�>�����-=҇��G��1����� �y==#���)=��ۻ���=��%>�&K���>nR=D0����G��������3�;+#>�<�[A=B콧z��2���a>�f�=�hN��弨�;>�E>G󟽋�Ƽ�{>C��<5�>���t�=��i=���=rW=��= ��. �N�f>�@�=�]-���!�c#�Xu=;����u<<��=*�ɽI�>�2�*&��#J�:j$�<�|a�ՠ�=�+�<�C:Ď�;_��=�܋<j�r=������=�q�=b��=͚=t�����=磐=P|�<" n��D�<�=�=�A=����?^��W��=7����2<���^�޻��>�]6����<��l<Iؚ�@ے= �t����=%4;>t�7��W�R���g'���>�fs==��z6��ʷ>�n�ʽg� >�o�<��r=��o�^�ᚆ=��Q=��=u�8��#���;�n�>�^��,
=M}��&Ÿ=oC��{@����=gC�� ]ý'Zu=��=R0ƽ_9�G����J+>�1?��5�����V���'�ܽS�=yĽ)n��S$�=�C<��:͔=R�#<�;�=�O��Y�Ҽ�K���^��� ��=rǻ�>�)�o��S =�19=���!��==� �߶
>E���ѽ��=��<|�G�ɣ��,��<d�>��2��Ѿ�Q��O��=?�H=��"<`i;���C�z2�5x˽>󸼎�K= ��=��H����=�C�D�W=N���"�9���P>�Ҥ=�镼��D��p���ͪ<}dP>����J���H�tU@��Y���D�7�.=�ż��ֈ���Ƚ_]�=�_<�k�=p���g3�=� @�@ì�h/���=@����N���;���=�8= [;=�˽+�����= �r��PT>�,�=K"�#�:<�<�=VA,>�<8=O�8��_�=� �= D>H��=���=�c3=�ʎ=xأ�")ʽ_G�=ƕ���e?��U�=���=�P鼳�>�6=��>]��<L.�����X]=���=����=Ĵ�^g
��k�=��������n�=mLD�F�0� �'�ٺY��<D�������Ǿ[=�꽀��=�I�=s\=��5�w� ;!y{<�NC�6�(=
18<��9�² �sSԽ �=����x=��{�R ���>O��<�"&�v�<>��=Z�=��7=]飽pp=�˔�&�<�,�sL�=V��=�; ��۔>䂇���n=hr��qb��o��3�>�H�<���=i^�=~)<eٮ=��<�(]�����=��7=���������wX;�K:>���;��<�^=>���=��P=zl=��<�� >��E=�!��f��=��k���ȻT�=��+�=���=ӷ>0�U<cO>�:^�Z��<��<���=��=k�?>J��=��=l���&Ȗ�U�Խ�$�=����!��=���=]�F=���=Nbƽ7ꚼ*���R=�
�=y�<X@="����.���ꧼh����f������L�< ��=�Dj=� ���L����=�WU�j�Ľ~��J����!���Vj�mn�=��8>���<I��=�+ͽ�N,�������=����^$��[Y:={@=<��=eD�;�E�L[��4%��L> y�:���9}2�`���X5�=> �&>c�;p����r��קֽ���<�D#=��<���=��v�8�V�R��;k^�=D
ǻ!�<�*>�RH��|(>���� Q>����̕��k��=��K=z��=��:��X��>*7>Lkx=����J;#? >T�^=�( >)�m>�;O=d�*= �Q� ��b� >��ƽ�����ֽ���=N���G��Y<<>���p�/�o<U=A
�<D��=�{콃HB>�� >c����g�=���=}`���h�Og��k �E��=n k=# k< ��=ep =è ����=�F�<�@�=en=-��`��<m��n漘.���==������K=��k��3L������<^=���=O#b�_\�=V;;>%ߝ<���<7-�=�I�=eg1>sڎ����m�޼� ��O���=� �;��۽YB���3�����ۨ;�LԽ�RJ;H�=3i=v�����=��d���X=9���F��2-�=�H=k���Uj�<��E�� G�|�i=���߁�ݪ�=���B
�<�ǽ��J�$�<FA��(��]��m=�_ǽ�fɽ�����=�b4>��=�6��*�=5{2>j�,=;媽U�C<R��~Z�<E�C�Z]��1�:>x:>@<����i�7Ժ=2�=��i��r�<V�=�=v��=��d<�?�=�l��ڼ�[~=��C=Sb�=r0��\_=�;>S��<O��<�����{=*6�����ծ��c�_:o����5>οO=�W0��� �-��< #�<|#T=U� �&������;<���VЍ=�6�=����S[X��;�<�.H�Eƈ�ոL=d=#!�ܞI>M�=K�����A��`�=�N��PW��m��<z�;vP�=�� >J
A>{4=6gѻV%)�ZM�<%<�X�<2׽_냼a�i>����WW����"=io>�]��3�=������<�|�)�b=;�K=���=�yr<֚;�ߢ��#���<�d�=>��<�� ���<�cý�>��>g�1��4J�N�<��=��C�YӴ=\�B����'���#��(�����<���X�=�e6=��A>��C>�;���*d�t]���*��#��ٽ��g�a6<��=�Ȝ��L=2*y�$:=R=if>6P�����=�I�=�:,�&[�u,=����qZ=EP��Y�;L������=2��w�\=�i�&��v��<�C:�k<���=-">D�=D㰽z��o=���2�����>< ��Ή$�d�"=#�7�����T<���=�vs=o�K��i�=���<���=�X�@�1��/�=*S�<aQ:��ZY��2�<ʝ�����=|�Ƚ��T<3d<)ܽ�e��DŽ���=�F$��w��n�n=�8=�"=���<��#>W3�="�ԽfF��!ͼ���̳�<�:�+��<�$�� X>��=�:=�cf<ů=y���m颻$���,�����=��=�MP<(�=��2=����%�f=?��<x��=��ɽ���=��=��=�R:>�C(>fႽf,��!�#����;�i>����G{���< �v= �@�$�ټ�ID�� ��Nڻ�8L�-��^�D��ɽv"(=?V����ؽ��g�~�8�P��Ӎ=���=�ǫ=vN �&ƙ���>�� �& q�Cꌽ���9(>��[�V �<4*�<�'=�\=�nB��ᘽ��-�|5��3ډ=  � "<�q �~50�� =`Q�=�>��=i*׽���<K��=��k;D�,>���#Խ��Z?������^=ɹ�=�
�=AJ�=A9=�<��=�E==�|=S^н�.���x;=������}�p=j�\����=�m�=d#2�?X���>Ds�����<K���mH���_��=;oX�����n[��&���F�=�<I=���fO�J�����=�4%>�@p��g
>��Q>��<�~�Y���g=n�h� �=3򽽩�=��8�'\a�D��!�y<���=��4>G:>$Ƽ�����@�<=*��KRY=�7>���=�=1="��KA =y1�\�i�z���ҽ�OF�/���Dؼ5H�<��O=�t�=�˜�gn�<#���! �����A�c����=��> ��������2;�Y=!NX���ٽ�ǁ��P@=�j=��D;��>(\żk���^ح�P�F>>d>
�`>�ǻh�~=���=N� ��#i��:>l��=1�������0�E�=��g=�<�>N>�D�Q�H>��ɽ���=�yN<�j�L2��Rl��ܦɽUR/��2=���=��$=��<�Q���.S��j)����=G�<�N=2�0��1>� �����=�;���2�;�4���=�=��>��<�N;[j�<��2�O��� �=��9�Y���VZ;��>-_B={ �c���9ѭ��-�=~��;�l�=�х�WE\�M�]���ս�O\<GP�=�)ҽ�j<��=����.��=�l�=y������=YW�=w ��`C�9p߼)����C=DY��z��?0�J��=��h=dG�<{�=Y<;_�=�A�=�c�=0y�=��j��d">H�=C#���ڽ��=}%��G��= ������\�=�M=�(>�<C��;��p��qs�T��<��=�Tk�L �����:�1p��A۽>�(.���h=N7�=��=>
q���l=��H<9�:G����g7��Ɏ�<K^�0&���i����Ƽ�g*>-���X�>!%>o�=���=�&���q�<��R�e<����r�<�ƃ=�|-�R/���<��F��G�=)�c<���<�� ������[< J�͛۽DX.>H&��j�;��T=8�\����6e:=�~*����=ɷ�< _�칇=�#`=zUY>�\�%} =�����;�N6��+�<�>=�$Ҽߤ>V��2�ؼ@�V�+j�PQ�<�|�=)� ;�x������ঽH;Q;_/��j���?�������#ɀ=���=)F�� ��#�=�X�<�rt=l���ڥ�ҿ�=�V��JP>��V= QG=�T�<Dž1>q�;e��<)6>-忺����罳��h���8*���#!>��������n3��vl�QG{= 6C�1^>c��=ƾ��k�=�,���*/���5�Y����˼��ʽ<�(>���=���=�%j<���=-�ýJ�=�@2�.����=�ۣ=P\=�.��:|'�=J3����< =�����J�=� f=�G����f<�� >*��< ��7�;�����>�i=Z���,j<��b���]��$=�3+���"����=�y��wt�7�ʽ���=jB���KG=�#�=$��vE#���>�<l">�O⽞�ܽ��=>�}=����<8����� >���=nY�=ݓ����Z;Y�ӽ$6D���B=h���B�c<j����Խ��=<[����佅��=ջ ��� >� �+w��p�=��>��%��<�&C>��;��^=&7�=�x�<���mM+<�s���lE=/�2���#=UX`=�%> s!�S� =�NH�:<=�ھ��׽=�}��l���v͠����E��;��=90<�M�;�
�G����aQ>M2<k����*������4���?����!>Ҧ��i�8��e~=:�=�'�=jW�;y>4�<�{
� ���c���=������6<­�<�� >+��=�����ŽG��d����:��U!�G >�?!�M��=8u�=�3�=%���+�>��<8C�=�G,>�^�=��>�ֽ��8<G�>4߃�/��=#�.>�{=�� �=�O]��3��Ğ�=q(���O�=`� >��:<Cr:�ʋ
� ��=���<ϰ�=˒���<}�=�M �H>���<�3��sԫ���+�F�>0��������=�i��=x�G=z�D�햐<���<��=^kѽY\�<皊�@Im=��ý�h����T��]���{�<��@�M��^�����ĸ���k�1�!�P0��?�׽����*j =ǂ�����k�ѽ��!�<�b ��ζ<���=��=f�=����� D=f�ѻ[���H�>ߢa�;�^;!a��� �4`�<2�n��s�=��u=?P$�� N�m���m�;,��<k�=����� W�0����%�)�B<Կ�=���=P G���y�r�w�$����."��H���L���'��b�;���=s�ӽw�h=,,� ��0�^��=�7>�٫<o�5���ڻ`6�=$��;��=���upm=��<�:�����=�U��d��S�=;��<�lӽ��� �l;Pw<���~�=[y0����|D,�!uY<�R,�Yt<�ǟ=����"^">��=/Su=�i0����=��V>C �\W0��,���> �s����=��>�>U�D<أN���,�x$��R�=U_��E��W�=�@�=�X��BSY��\>z\>>o�@�����z>�3�=�ོ�5=��(>w�'=�>F*G�� �=S�<f�������R
�=&@���*�=��
>��=��Ž���u� �9�������!�ܽZ�+<��z�G���Խ��_��ƈ���#>ܴ2����:w�� #I�6{ ���;<�*I>vl �m��<J p=������=�R;>  ��[��K�ǽ2ם= u��)=�S�=�+��X ��?W>���<�½=&�=��,����<��Ǻ�>1�~�=c ��� =~���W����y�=��>ܝ�=�� =�<k�$>��J=���� �,yx>����=Zu5<4`���2��o��=>���~�>ɽ�=�B��,�=h�=�YQ=M3J=���C�����)��HT�k�>_)�=��/=f L>l �}�I>��Ю>A��M�w���v�x&�<%�q>=��=&��=ų�=�9>���=��=�
7>����<��߼�GX=��@�K���ò<�" =�5 =���=��S������3=�;� Uv= �=��!>�
>T7�<�-M<��$=R �=�*=�%>;T=��<l|>ع�;3��L\$��e3<�`�= خ�b����D=i��F�漝�x����=6��;�!J��f�G.7<��=�����A>$��Zh3=�CM�|
뼀S�<k�)��2��v%*��v��h��FI>��k<a��;�_��+�j�Խ%*������O��x��H
��0�0=����A��=H@�=9�-=� ��*���8��!6����������*���W<s/����ҡ=Pԋ�>��3��������T��=W)0�,> ���f��]��= rk=��\<;����~=X���e=�>zg���H=UF����>��=�� =�C=0� ��I^=-��<�,[� c>=��Ľ���=E|�;�[Q�g�=��i<�5�=�=뻬<�ל�3۽��-��f�=ށ⽈�=-��=K@Ǽ���=�t����=3��<�ks<t�X����w���@��Ns�����;��=�S[>�{��I;��g���Ͻa��d8>��V<U>
M�Ut=�`=32^�_��=�ʐ=�y �1WM�/s=���l��=�;��d"�Tβ��Y׽h)Z�id<0��;��>b��=�����t�;�=NI.=Μ�=0!X=���=|<������=U�#=/Y�<�G-����=��=$�
��=:��=���H�C����=������ ��� ���}�7�=.���E)=��"<�"�<�������x4=�n3����V7A=w���zC����5�=�9H�|b_��:��Hn=)�]�Gȶ��*���R����=������I=�o�"%���\�=)�N=ې��&�J�/KC��o �_�*�״����W<��۽��`=�_=�'��;=��>f6�=��)>_;�<��>����ޖ�<��ƽ)?���%@=^2��g�����D����q�*�Gx��e <:�����4�>��;���Xe��z�kz�q3��b�)�Z��b��=q����=@�=�xP=�� ���#���>��7z�=�C"=�彛����D>���;�i)<�b�=�*=l.�=%>�=������<�%�=T.2=e��:o�4�$>���"=����Jļ�S*= `D=!�����i�䓃<jK;� @=��1>u��E$>�=��\=���=�S1�p�������=��+��1D>C��<"-�;�:=Y։�bY >��7=�<LŠ�q�">��<y+��\���\HB;�[��F�a=� >����:���=)O���dZ=�&n���������ȻDdx�VZ�<N)�;���<0����A�wP�/�(>�7=P1�=Z��=�_<�Y������3��(>k��;���7�=��=j o;�b�<�@Ѽ�I8=k�P��� >n|к��� $��p =�A�ME��(��ٍ�7�9�>��<�Q|�v,S�4���� �<
h= ��<ph�=c���00��2�ټc��=�s�= ��=�m=qo;�-�;��=c9
>/����=��A=�0Ͻq���-�=��==o��g��=_I��i_=P�ݽ�t�=�(�&6����)</���������@���9�>�H�=0�X��J�q�&=��S�J��z=Z�^�6w��a=��b� �@v�=r��C3�;Zt�<�����T=��<�鼉,�=���I�<�� ���� �up�;Q�3��jg��8���:��[���U=e��=XC>���8��<��sD>��M� S�=�0.>(0�ɔ���>~��<.���2�>�>�Pa<U�3��&(=x����.����=r�r=��>����s:>���PĴ�G�=S�z<$?�=��㼒d�=��L��={��=��~<E�=.� ;���=pL���%�o"<��「 ><�^����.zݼc�<w�>���W���*>�4>��� =\X'=��C�>.�=�G>��E=�?>��Y=�9
>7L����=��������8s��w����.����=���������</�E�!��{B��s�x������������=�н^��=X��=1Wk��x�=��-�u9=�6 �@�M��2�=��=��=�K�<7��.�/�S�>��'�5'B=�)��Eƽ�|�=�>-�BT���5�=�z���Q���L}���̽� ��0j����*<d#�`�L=�&#>�j�= ��S<> )=�o:<��#��A�<pN�=������o=v��1\�=���=�Y�=��=�a����)>�5�<��2;��C�O�|�# ����\�
��H�̽[-�GD:��=]9�<=u�<�cr=�<��?S�=���Bۮ��i�<�J
�{uL��/@=�q`=��a=׊%>�żw��=�F�;( ��DIY=~ �׫v��%����=����tw=���=��=|�Ƚ�"c���>��$�1�B= z����D�]�{�4����=���ͼƑ<ش�=LM���yA��W��7�=��W���Y���(�v4>���=�;�x��v��;Q7<!V=�q����{;cּn�=��6���=T�C=��`>��ʻ1�轙Qf=rS�=霹�^$*������ٽ*��}Bܽ�>�����q=�o�=��%=/�(��P�=�r��q�=2O=��A�4}d�[{+=��<m�=�� ^�=F�=�^�=���qI�|X��*<)>r�L=�=��'�p=j_�=���=P%�{�%>�pʽܜͽ|u���==<��=� �=�=>���=��=n��R��;�ޒ�;)3�|�6��YA=G���I�5�X4> ��
>�JK=�U=�Tz=��D��z2>�`�Rv{=������/� =:E�-I�=���z�`=@�!<���=K~@�D�b=��>���=������>M�ν�G��|�o��#=�U>��ѽ\�.����=�8)� U>����3H�=��=8x{�٧O��f<�fi�&���<�}��9��=�3�<���=1�e�za�<Έ?<����#���O�=�Y���vb�.�������h�T��a1>t�X��,=��>x�ɼE_��;$��M�=�I�<�쾼5ɍ=B;Ƚ�e=�䶽�=��D���=fѩ�ˢ=m.�=�� ��୽�)�<(g����R��轥_��3��嵼�-N��J<!�+����x�=RWb�8Ͻ�r�s�>���<����U��=�����<��M�fWp<I��=
��=�����]�= W>ɕ�=�h+�t�=�� >���=�8=4�?<�H�׺/>@���'[���Ja<��9<�n�;l����=v?�=�&���U�=R�J��ߍ=�)E=$�<��=cg"�/�#>_7ǻ�R>ɔ��,'>�w��t�b�3j��:���������U8��c�<=�$=��/�cy�<PU�=v����'�=�g�=���=�'�=Z]Q=�(�=Mu|=��>�}?>�=���<���� ���3�����;���<��-�x�r���
>I�=�����u>�8=@�<v�=D�����=���=LԽ5���챲����<��'�\(�fv4=[���c����*< C�k�i=D�:��C�ׇ�=� �<^��?�1���)�Ϥ�XAn�N���-�ei�=_�$��<�=>{�<t�H�0����=Zʾ�W��;��>����/G�κ�<�C>~�C��ǽ�������=�u��q޵=���=[�y=v
"<N�;Ɲ�<J�=�Tȼ�=��<FpP��ɥ=Q}�<�=��н��>a��=e�>� �<b��=�o9=�4>\�����<��?=\�5��f>
�`.n=��N�9��x��<�&>oƄ=�(=��׼�HP�y� ���:>�!>�Ƈ<� ��0O=�~P=��=�#���l��I�="B�zņ=�u]�5[F<+�p;��B==z6�N��='tڼ�!�s�y�j�/�l��<�|��_�;l_�=�yc=cؼ-�=�� >��=�!����I���h=ћ(�^��g>���|->��>��佨Ҥ<7_d=�X��ڐ��[^>2�>T/�=�kB=Uk�d�;=���@�ὴ��������p=�����ҽ�ѳ�a���8y�=dn=…��xm�<XOa��>�~J>ܷ�JM�<K�#��q"��'/�5��<���=� ����(�IR�|6�/==U)��ϫo� )���%<@+�<����ˑ�<�y>!d���L��J =2A���v�=��=�b�=tZD=�g�<���+t=\��;�+����>5C�$k�;��G=����%�@����|=V�
>��_=f�9>�#�VB�=��0�N�Լ��:>��鼬�=���;t��=R
>��vb��=�m��ut=5_T<P�6��ʢ<�[r�z���¸"����2���� ��|��]�O���t��r_=���6�<x��=ncнWN*=˝B=�Ӟ=�H�=Ҍ�<@�����߽�96>��F� �.=���=��F�$Ǧ�YE>׽L>��=_�=�V>��5=��>�@=ݠν1���4 �Ô�=c���Ɖ=~ը=��:>q�=n�#�9�W=��߽��<�(:���>����%=����U�=ٺ��<�=ysH��n4��#>�����Eh����=}>g��<q�=DqԼ~���t��=���=��=;Ξ�K�/�o1 =��6��,!<�ͧ�r�#�J� =�GC�~ м�=I�ֽ��a���Q=�ke=:�~<��ֽ��I��� �"��=��$<��6<�Ti��� =��5�� ƽ���,&�R�>E֭=]\�=��=�Ԉ��_;�!�<���=��=��h;Ϛ&�/���*>�N>o �<2�t=&b>=hǼe�<\��n��==�J=$�=.��=�=���=2���C<��)��'=��>���*)=�����a��P �)?5��<�<a]c�����M�=��=�Ji=v�ɼ ��ε�Ԏy=A��=Û �Nh)������Ĉ��{ >� >�%����<F�*=A ��k�D���<I���%���!7<���J�H>�ω=-~�h����L��ꀫ<X��<����x7��5�=ɺ�=|g*>�t�bV�=�˽0�h>!>4�^=���=��$��n>��ڽ[��;^���ʪ�=�J��)>���=�ζ�G��=� �=�Z�;1e~=��=F�=�����=g����]Z��+b=�{ >�٪���9�k7�=D�D=���=�]d�Y��<'�={��=��^<0�<��>��<����1a�< ���^�W����O�/����i�� R=���=U-���>$Y�=ZB8��Lj:�^(;U���x�䆼�5ὖ�i O�h#B>`�ż�3=�*��Ś �����!_$=\�<���=T���{3�� 9>�G;>�j�<#c��T=��y��z��P=#�G�L=����s���g�C�g���=�� ��pa��׋;� �R}����A=X�5�w�@>�l6>:�M=�l3��)d��2�󎟽9��=������ռ+�#>�I�� !=�����˹{E>�u�=e��=��E�Q8=tX��ڇ�=���=��=O�@=I�꼶�Q>*a�=p&�=ǖ�=�����V�a��=K��=���<6�w�޽����b�Q���K�^���;�C���^�2=��=����$l(�����U�I=�����9�=�Ļ�[8�f 3� �m�ƕ'=��= ���18�<�V�=��4>���=r�&=.��0'ܽ���=��>��F�0~<�Y��,��D�=#��=A����< ����7�<oP�k�=�ab=�\.��h*�b��;��*�.��*Sļ�R���=n��=���<��-��L>e�x�a]��=���ͨ=�~��e���7�r:��ٽ�6���5>������+�� j=o��=+=<[��;ӭ�� ^=�>��۸��=QTb�a���<F>ɠ�<����¯̽�B=g)=J���f=�-">*F�=�pu��I:}���뮋���=.l�=�0�=M>=n|�܏�<u��=��<���=��½��n;$��= (�=�����f���齼�q=
l�<Q�鼓I��������<7B�<0�6��]= �����ͽ���=��R>^����^= ��=Q.W:/����=���<,�=<{��/u=Qw<��=pTt�3�=�늼/5W>o�,�f��:��=7T���)�=6���K݋����=B�߽ ��я��e�=`�7���`��=O!>*��=N�=_T=�+>��#=P��cc񽚍�<u�X�%�>�4н
f��@��mU�Q�ֽ�U�2K-�{l{<z^/�*�m��Q���=lw�<8�=U�=�~w�夁��0>�_�<K`�<�iڼ��(!伦�}<��>0�����G��=��¼&>t38��͹=F��&�����^=p����0=GY��
�V��>E�Լl��=3�=��+��~�<w>,8s�">�����=�L��j�M<u�_����=՚��vх=�*#=v�8=)X½�#���4$�}��Vϗ=�}�=���)� ���ڽµ� ���?e����=P�~��t6=�E2�9噽Kly= ��=Q͙�Ä����=��=�!h��(���`1>�x=��&=0�B<���=�m|=��'������I����=�L�՘{=Yː=�ŵ<
�ܣ�;ݗ��ar�����7/�����61>PѽB�l�2�L���W�3��=c�L����=@S �t��(�=4EȽj����+Y�2���!��=y#=1��u��}>E=C���k�=�k��V��¤���i<a1>JZ�=8���`���U�;�쒽\�Žd��=�j��X
=i|�=��Q=�n<qjT�?�G=�Nh>i�`�Z�1����>b(=���Z���<X�/=o 6=�c5>=�=&aB�����.�(ބ<&}#���=I�������^#�Ә,=�@��گC>q�;=o�Ƕ�tZ=W��=L �:��=,�O��n<=�,��T� =�Tѽ���.m�ݍ>�(=a�<��<��v=ui�<|��<A��:C�l<���=�$6>}�*�gK�<��G=�?�#
>%|H<[O=��'=���=u7�>�=U޲�K�̼T���p����9�H����=�`���{�=�m4�V> ���q<���=�����<��H��U=�S2>�Yػ`��=G��=�K=��/>�ý�[r�gq�=G� >�/�L� ��� >�}�<��P=
8���ؒ�b7_=�Wh=�h���<�
�<��ʽ
[,=4=�q�Hl�=���~�9>Xӝ=����U��H�&=]�=Af2��7<�+o>�M>���<Q�A=��#.t��F;SC�=̏�O�߼񺟽����_}��4�������=!$��4Z=�s���j�<ɵF=r��=�@ǽ(r���6�;x�K>��.=`�[>���=��%� �����-7��\:U�D<� <L�ۼ]�>�������.�=3��<�=��,��7��=�;t��S�=�ܔ�>�/�,�*>��=^�-<�#+=�e =M,�=�M�=�+L>PL=u>�Cν��=�|I�%����U�<H9�=
��g�=R�W�8U��5�<�+� �=�r��/E�=�
=e��=F�=?F���U�2k�=���=�%P=FJ���=:7=j�(��a =h�����H�e�%���=�^-> �ν\�G�^�>�����(!��.>'����񝽶)>��/��򺽜){�D5f=_hn=����L8=��>�5��������ޗ<9���p��=�Gݻ�Γ�,ف<�7�?A�=pH�:s����/�=����O�����a
�������½�D�=�o�<����<�<T���՞S;A��'A�=T �=j¡�Ih�[���4�'=D�=���=�k��n�>(R=��V�S���-�-��5>�1�=�>PF>�5h=i޽p˄=��e=ۡ->�t�=u<��_i�|��=߽`=6eU=R*��ͨ\�7�V<�=���=��R���a� ��=�H�=�>�����i�jn��kߌ=s}="��<���<h6P=��<�ܾ;l�9=\���2���ս��I>f�k�<]ֿ<��e=F�=����j�=k�0���.��"�=x��� �h;<v�7��cs�"������������� JV������W=�P"�7U=�6�;��2�S� �����i��=����Y��/�ͽٿ1=ݮ�;]m?���&>�b�d�*��ݣ���>�H�=���=Շ��b�ݼ�|���=��=��V=� ��' U�飞=�ý،�=���A�2N�i�;ym!������Q�=�=d��=��(�
bj=k>1(��.=�@��%f� c<�Tj=��<z>�=O7ӽ
�H�����թ�=� ��Y�"��s����\�]��`:�;���I�=񾥽���=kֽ7������=2���@ټZ��<��Q<����62�2��� ��r_�;���n�̽����)1>�ux=b�>c���9�q���ŽR.���\�=��W=Pܽt�=B�ɽX>����Z;�{bB��m������畽2Z%>���=�O ��m>!=T�P�=l�Z�d�$>�����I=;�g�)x`�%������=#������=����`����{<�^8=�_�Dp =�Zs=����� ��c�����g��<�l�O�H���q= �������i�v�=*ug����6>J�N<4�<o��:�>*d���}��9�=�<��ǻ}������# ���;�ӱ=���=��N=�����;�=���=X�$� f�;�������O/��� =�
)=/����+�=�]�>���)�=|����@=���=�������*K���^��ir=�Ȼ�[�-�=��<T圽K�G����!c̻��>�;=iƥ=���=�0>���l�h=�<�q������[��k>�R<�m��B�;v)�=�A=o#�;U��wzG�j���X�<*޽���\a=^+i�D= >O��=s�����<?>�
���&=���=麽�J��\c�������s=�1>�C?=�ڏ�U�˽
�s=�H>��->���=��+=�㿽^��=FW=v��.|�fH.��=����#���ʷ�� ��<�%>{h�������<�h�=��s���=�j=!��<��<��:�|`q=ZD>Y�2�"��=��=���8=����7ª=��=��ӽq7
���w�#�½K �=���e�޽�B�=�q�����=q�^�� =Ϡ<�=ϼ񝦽1�j��˝=��=R<��>|K������=�d�|3��G����x����Di��=��6�t|+=�Q�=���<q������D��/K�=�xW>�-�- =e1�ק�=����F��<Y����@��>X9����Ͻ&���?`�=�L�=�zq=������@=��� g���/�R��o�`;����u��=�r���O �rv�����S _=Y��=��>y.�<�m�)d�:�Ȩ��뽤^=�2=�(�=�z�cJ�<�c=mI�;1��6)O�� ��>���Ļ=xW����=�!=�d�=�5M�Uǽ�$>���J�<��0�S�<&��;͈t=�3 �[�R��My=�F�����<ݺ���̼�7e�/E�<o!�JL�����=9��=�f�=�=���=s��< (���K�á�='ވ=-� �A)->U�o=e����No=� H= ���OH�<`0����m=�ԫ=���=CM�;Ů`��Bڼ��;<��<���=pj�=����$�ݼ����|�Ns<W�;��;ݬ�=8?�����.>��y���+>9%��U3=\��=d�����c��i�=��<�Z�=�|��<��<�J.=����}6��L���T=��}=�����>0񽼋C9�g>*�= g#�����N>��]=�Y���>["μ�Ep=u�=���=���/�7��Ƚ=�n/�3½\���G�=ް��@=Ȭ3>��=Y�K���x=�Q��i�=�ռ9���co�?��=�ͼ]� ����� N��y�=0C���Y���ֻ�<%�S"m<�*(�3Ԟ���<� S���B�G�������A >'�=?|!>�f������p�=dN<.~~=�6)=O &;}�<�oƽ�0�=��S���=1�>8�->��2�u��W u=���;�ܠ��7�=��ϻ-U=1C>Z�=%��=f7Y�6mu=�''���6����=UP>�ݸ<=/��� �߽ �,���:=AT۽<�0>�⥻9ci=*`�=���=L�������!2�aM�=�K�.T+�(��<�瓼��>�.��0�=����v�ؼ����<�$>��Uq�=��>֑��L'��Q��=1�����=I=>���>��7��S
��DlT>`�˽=�q�� Ҽ��1��N=��=w-ݽP�'<��O=r5����=P%��7��9x��y��=*������ �=&��=q���jS����������=hݺ�=>$_���L�<�Y�=K툼n� >�`����;���<�"����J�6�=�@>2�>���=s��=|2�=���=����d��=�[�<���=dv�����H ս�����h�=���~�=(�Խ6)�&�)=��|=�\��(w(=;kX;���=�$X=�?���7<�\��>�6=�M
��#s<�}%�+�<=�F�íѽ�v(>]����g����z=EW >�]�=�d��<.�Q=�9�%�0�=R�E�y<������'0=,�켅��=8�3�� ��I��=�=�s������^N���e�G΍=<U�=� ��˞��K��^;ý�q�=м �=�z��<q&!>���=��?���8�)Y�����<7_(�\6ռM����.o=rF��]R�����[_����=�*I�l@>�Y=Ez��n��=�H�=�g2">�*$�e�ŽT;{=M�I>��=�^%=i;>=�A<���=�\�=�t����"=mS���Z�=[z-<�ǽ������=�X+={� ��� >���)�� �~= �=^�d���;��@�=z�l<�k�=�]�c��<�fh��c=��s�=a����=I)�:�fe�;JN=�i�=c�
>L�?��}>��>�S�=�w=�@�=z~ >�n���݇=���=�A&�����9U<C�#<%D:=�������;�4��]��;t��;�{>Z�E>�]=˟����#=�Ϊ<'�L=d����F���-����j=>��=���<g�_=�ȗ=CԼ�V�=���=٭�=�����=b2�����9|�g���=���=w� �7޼e%>�{��_�<NB�=8���󫽷м<^=N��K�9��.>� ����<:a�=��<��v=��+�����8%�<4�!>��<�����ۥ=0ν���<�>�=T����rý~3��E���e]��M����<(���ޘ6�}0i>I� ��O���rP<�z��� &�Dv�<� �ڈ���x�ch>?v��U�=��>R����+E����=�R=��½�G�=���� >�:<>��>�wE>�m�� *>L ���>˼4cǽ��ؽlB�;����V�<�������)��(�T��<J�;�����Q>����Y�ļ]S�=e|�f�<Ae�=�8X>���=a���5����,"=Q���۴���[>o�g�8��–<���=���7��fƿ=�͈=�n]����=��2�9�{<�`1�W&�=����4��i�#K = }���z�=E�H�mw�<ʷ�=ձd�`a��l�3�S>,A���]�=��ɽa�><` ��d�<�������<a��=�S^=A�=��uD5<˄�<Q�Y=���=D�U]1=�7�=��*���<]����=7U�<NJ�=�j��0�=�˙=��<��*=�M��{�<���=^��=_䫼��=��=�C>\�E;�T"=�� >:�E=H~p����y.�L�2=v�>��=����<q�x���d����=� >>��м��;>��=�X�������=3��=HG;z�=l����$m��ϼ]�=��T>
@�=fs=�|��4��_O����̽���:�Z���\&���:��r׼z��_}�<�=���= 6�ܒ�J����=�K=x��=�)S=0u�=�G=}�T=��ν¼i� ��c�=A�C���=�2L=H�=�nT>LH ��!;<�/����;>�-'�`@���>1z=ѡb����E�=\j3����=҄�?�M���H�H<Z=(�><H2�]�(=�ԉ�2���V>�u,�&>="�!�#Zx�R )>�/=uI�<,-�=C�{<M��<��> ��=.��=-;�;�cܽ�_��d��<Fu.>�{�#@�=0��=>Ž����PM�=�f+�4�ս9�*�H�'>Mq�=�!�]�=^��=\A��E*�Y:=�W�=���=M �=�����=`��;?��=�>��K�=(��=����f+>�A�cs���wA<�5=�2ݽ\�=�L�<�T�B1�� 6�=|���� =��K�66ɽYM�<�c&���ʽP=���.>��p�*K�����=�G>��>Hb*���'�5�Խ�b*��3����.���(�N-��p�9�=&>&�;�x =0�S�B<�==į�c�� &t:�Ǫ���=����5*>�� >���=����>:Ο<39�ug�=�<�:D=��!��ɹ���=�;��m*�Q���u�b=�1�ɏP=��
�}�&�^��=� =�L?<j{=����h��n��0����=$ ��tf'>\=�=��=��">% �<Q?ٽ�5�=·�=ٰ�n�ʽ��u����:D=n�>��{�ճ$>��t�Ŷ>�ܘ�B��T��<khֽ�f�=p����/<�����r7=n��=��c=u=�%<�=L��@�׽�u�� (=]j
�� "=A�$��'$=���<�¹=�j>(a��ٖ=�.�= ��=��*<���<����z ;�N�=��S�Ʒ*�[|I�9/��(���n"�<�E�=�|�=������=L&�i�*=��O�f0&��s��<��ڠ>� C<U�=�}]��.=�9���=�U�;s$Ҽ��=��=N�����,=��b= fڽ���F+Z<�.M��N<��=˦��=4|����B��=��l=��S<t�;=p�E;�-E=��>?b�<�N �QP��{����=}(�=�6�=�I=�S̱=�Z�=Œ���<�@;�F�=� >ܐx=b+�<i�佭�=�s =Zl�E�ʼZ�E=�φ��=�G����Q<�[J=io��߉O:�2;lp=�z=g�<�RI�<�G�;�| =�0��4F����=g��=�V��a <Yy���?��F� ���Kx]=H�[=���}��@��;p�=��<K����ɼ��>J�;��y���M=���=J}�ńg���=<J!����"F=��w=� �=���<9/������-=�R�p}(�;�4=��{��-(=�FD����������߽�>�Ŗ=��q<y�)=�W�=q�w=Ơp�+�!�5&<e->�E�Q�z��p8��b�=��>�1���v����������G8> w佧)��NmM<���� =�6�����b>yk���,�-t�<�V>9�=�#>��>d��=�����<�yL��~�=�׽Iz8�c#ͽ�W;��=�ϰ���G�Y��<����8���yb+��` �gS=���<�敽y��=�tŽ��߽��a��l��n�'=�:нl���ك>u��=��=l��={(�=;lW�"v;=n�r��j»�~̽p���/�=����9;�A�<ƿн�c����=����>칽�A�R^�=%7<�X<��~=ȹ�k&K��6�:�%���)��9�<���v��<"���cA>� ��HP��[�=%F�<z*�=�����ٽϳk�m�=�\4=2`ǽ�齀p����F��<�Ղ<���=�� �������<�]n=-��Ib���u�=�Щ=T��=�h�=+��=����9&޼+�0>-E�<O��=��=i��&�ʽdZ���@>��*=��Լ�s���� �$@� �����<�o��JF�#��=����6*>� ��?���\{=����_$�=w>`�HCS>l'�9����$Ђ��+�K>׳��?Z� �����>�Dr< pB=EW�W%��P=�-�=�~�����\�9Lҽ_wܽ'}Y=��`=��O��=�N����> ��=��o=�D ��\"�ػٽ�,�<�v�<��n4��껼F�e����=s�����>z��;�r,���>BU>V�(�ǒ��v�4=�n�] �֜=W�̽�S�<�j>gs
>N�:f��=ul/���P��Y�����=%G�=o� ���=���;��"=�z=�2�=� ��ªr=�M9�Yw��@Y��I=����ӕ=!��=j�޽f_�=�N����K�q��=�
㽤ާ;=,�=_����W>��ѽfD�=����=Ӑ�=�Me<��6>B5Ǽ�-ҽ��̺�yɽ%$�=-6�;�x+�1劽�V���K�99�)�G�9�p��<�2�<�TP=��ս�=5�":>��=�~>wȁ�m�ܽ��=�����ȼ��Ƽ?���/BԽZF�=�G>( ���<ܷ���/=���=��=���=Z�P<�����H�=a>�[����6�|<�y�ޡ>_)����ؽF`;�я��U��@��@D��R=@��<B/>)~�=��:��ռ[iĽ���ԍ
>���t�=������$�;� ���=�G�*� = ��<�.�;��=�`�=�$=�:���ül7�<X� ���J���=�t����=��<׆Ի_����E!>����6>h���L��<��<=.!���ɼ����#<= ��;\a��:�ػU��=�h�=��Q�����E�== �^=Fm�ȋ)��\�����=�5�=1=�=U=!�f�Cqc< ':��:콢�H>
���� >k�<�
=��K>��.>T�C���)=n'��05c��q5=�v-��7������V�;�y�-:��>fG>q�n=��YZ�:���=��/�j=O��=��=�n����=�K/=Kb����)=��mR��wi��z��<;N=|>�TM>9�P=����f5=��!����A6>��-;���[���d#ν��=�}���pټ�=���=��=��ٽ6�"��u�<��カ�5�̸������+� ������ ��^������!���u�^�S=� ͼ�;��sA#>���<�W=�;M��m�<��<C���Y��=g,>���=�_�<}<h<��>b7>�~�Q�b>�#>�����H�=s�Y�#��=���=� R�/�>0�̼^J>�i�Cj#>� ½|;��T`����|< g&=U�׽����΅սQ�=���<V�=��ƽr+=��ƽ��z�N���Kg�=״�=�i�<�=a�v��g��b�׼��(�]GC��g =�~�<D
<�ߝ�ʝ���[Ͻ�����<|�/�EL�����;/œ= �^�p����ܗ����</ ���!��Bw�<M蹼�{j=S^=jͣ=�?[�~Փ�7�v=Ĺ<�i񽬧�=g�=AFW�������<}� >�J �F[ҽ끀���=c�X=�0��������=�+�;�>������2���=5����>He>�qO���J=�qS���}=R������=� >B
=�e�+�<�'&=2k�;�1����ȼܚ��̈ �%A"���ý�MĽb�O=ڙ>;���f��=��<9;�=�w�Ę�=����0�<��ӻz�g��cJ=HE.���=���=�s=>� =��=���=v�;�ɇ;��k= �=! l=uG>����‡����:ȧ�=e����y`��B4>��(=���=>�5>^f��������<�g��F:ǽ�Q3�cU�=Z<��*I�<���=�xƽƈ�"M<xd3;)�5��*�=����>�Ս<c�$��j/�=D��J��<#u�<s ���%�N��u�׽���*��|�@����7�ͽL�=�_�<l%�wB�=���=��1>�W�;�Խ{�>�VƼ��<��)=���=��Ľw��=��-���X���<Aa<�K�:�9��z���==3Y���9ǧ-��vT=O2��%�Y��* C�"��=���=���==�E�%�=d ��G�%>�X�<���b��=��-h=��U>~��Z;��5>^ν8�>c᫼}�3����=s�;dBݼ�h �^V��P�<T�½��n�� 7>�햽B��=u'�<�������� ����௽��D=|�(�[~a��,�=A�0��u��HJ4��ꄽ�0)�|p2=�A$>Laн��̽� ��t�O<U�T=�Z�<��l=Q���9;Z= �f=���<Qy��].N�E��=��>�ʢ� ��;!��=ծӼ ��='< �z={=)">�k�;�> =Y>����s!/��>�2l=Ź��O=�=��3=��=#Ȩ=�ͽ�8�=꧲�<+=Lv>d�F<���=�cW���l= >���=8=T�ӽ��'�uoo;؍���=�l�=5�?=�>�&h��i�=�v߽�� �m�=@W|�*�!��.3�Z�ν� �=\��<N���Q<=�Є�w<��G=�b(<BB�=aI�<�mt=���:Xz��-�=z���t3>7X3>ӂɻמ�=%�*>!��:�ټ�茽̺�< �C��=����1>P���;���ֽm�ļd7V<���=j�=�͑�=�'S=�d,=��P�����q>%tؽ����2�<%Bu����=��=�=���x=��:�|:��� ��>?yk=i��=�H����{:��{��_˻�
� m(�_��=)=�;�&|��+=-�=�a̻P�j<��n=s�����=�s*=e�5����-}��~�=�vO>��!>�:�=|�3>؃=>-�n='-�:V<?�͙a=ܼ��R=`� ��*�����=���<B'�5��<�
:=��J��U2��.�<ʑ%>����W|�=�R*=���=��+>0��:��-0�Rm7����۱=��F>�ӹ��<�3g��:���E>�">�=��l����͏�o����>�Ġ�vV���o����=`"���+="k�=� b�,ʫ<���=�y�=�=���=���N��=MȚ���>:1�=���"��=X��=N]��U���
ཇ����������=�Y#<�k <�3��!T<�-=j�>�V�=�j���Ȃ=�ϼ=���{�F�`4���֕=��w=Tgv�N-�E��=m��3>BT�=����ټ��#y<�L��I�
�[�,<tO�<�Ex��U�=�Y.>H��;G�o=0
-;�҂=}��=�½=��Y>�z���>��E��{�=z��,�I�؎��%�X>u�6>��=�߿�˞<��߽rѽi>���=���=��+�t��=K� <�'�=���<��=��;��M>�� =���<&�->�_;�r'��"=^!���@�=vڷ�dÆ�P��=`�>v��<=���'��=&$�=�g�<����>>/�OE]<�ᬽ8V�<s�ý��u�C��8,>�O���;�f>z8���0����PV�<�ff=�{��f���=t�N<+aQ=�N���DN����h�=�Q?=�_:>���?[�����/;0 ��Q6=�I�<�F;�$�/���=�9��y���+,��M,=�j�=Mc�=܂�;�����N;��Qf��B< uA<�T�=��l=bŝ= 7H�i#���>�?�H>\㻼�޽a;C=������<)9K�B�"=������<U���������-> (>���=�+����3>S�>i� �6�R��=R%��|+�N�=���=��Žf\ =�G�ɒ-=��9>�s�U e�`���h"P��7���/�<"mF>���;�k���*�,C=!՗����o;���-=^��=
[
dense_1/kernel/readIdentitydense_1/kernel*
T0*!
_class
loc:@dense_1/kernel
�
dense_1/biasConst*
dtype0*�
value�B��"��7�<~�g��t;<ۗ�<���<���� |�<��<���<�`�<MGѼ ��<Dw�<t��< n����<�g��/v<\�<W����*=���?<��t:�F{�g�
=1�3�BB%��E���p_������һC��<�I=�kK��ټr׸�����V��9�N�<���<�,�;r��:��漜�K��u=�<�
��J0[��4��2Z��幻���<�X<��q��ks;i
�bf�<R4<��=�FE:������:���<�e�J���|����M�<�4���͓�5e�<b�������r<��`��E����\<�g����<@n����l�ઈ<;�D9gz�<�B =��뺞�<; �H'ټ����P<�p=��_����<gNļ;���޼�\�<%��<ƕ9:��=Ή���<e'n�hA=u�뼀��<1���F��rJ�<��i<i�M��S�<$���Pg<��b�QM�<�Ⱥ�T�7Y�<Dž�<����X�`����<b Y��tZ���ɼ�k�<���
U
dense_1/bias/readIdentity dense_1/bias*
T0*
_class
loc:@dense_1/bias
h
dense_2/MatMulMatMul
dense/Tanhdense_1/kernel/read*
transpose_a(*
transpose_b(*
T0
]
dense_2/BiasAddBiasAdddense_2/MatMuldense_1/bias/read*
T0*
data_formatNHWC
.
dense_2/TanhTanhdense_2/BiasAdd*
T0
dense_2/kernelConst*
dtype0*�
value� B�  �"� �J�=7.�a���|�� ��Lzt>7�F� ��kl>�>7>qU�>�&�>�)�\/?�]JA���ɾw
�>`�?�\A?m/��gd>����+��(��>I��>C> ���=~�� n�(\�L�N?�ň�)��>�o��Ż*>��3>2{p>��>>z�=��>��d������ZU�;[���w7>b��<! ӻ
㧾W�==����>@���>L%���j�V������=��?�76<��;j�>��
=l��—9>�u�<�>6�ξ�M�=�?�Rˣ=l��>tɴ�\���l?���> �>�v��!)�̈>_I��U��>���<�A�=���>JDȼ�B^�JV�> -�w㖽 H�=��?��A��ܽ������>DH>��c��D6�M&?m<>]ٻ�P�=���=� ����?���>�?[�2&��Z%?�3/�Bf��� `��b����5����>z����֜�T�����9�j��>-�3���">/��>"S����z>��J���*>��ɾ�[�>�z)>�r>K��>�9!�:���ܽ0�>š>�t)?{>s��>q��<-�;��⬼%R$>�̾��|>Kx�=��w>��
?D{@>AKR��㑾���ȥ^��<���1���>�>mzؾD���2нb7�w8�>
 ���y=1���Q{j>���㥫����<��Z�(���ɝ>>���;���h�>.��>���Ц���̾�N?�,�>$��5
?A��>D�>���=]f�>F��=�(Y�nt�>B�þ}h���@)�� ����׾%���Fk1><� �v?�2>`�p�<�L�������>aԾ�*�="��=b��>N`ἅ{e�y9=!�>�'���N>�� >GHŽ��,���/?�̹��봽�/�>��1����؇>|���>]>�ߊ�P3��\�>q$��2:�&z�>ɓJ>T���,!�g��>W�>�a�=����#�>�hZ���+��g�>���R@�>?s����>�:4�>�)����>�x�>���'n�>w��=�9�[-��Dƽ���>~?O3 ?# ��/�?�l#�\՜�p��;��F��@�>?�>A��>���<k�2��J?� ??a���;�W=CG�>� 0>Aޭ�r�����9>��)��������>E�>?"l�=�� ?|�`�u�>g>IN ���"?�@>���>��>��?-Ǥ�,�=wgG��������=(����=��>���>,c�蓽>�Yʾ��:<�`.��
_>�|%����=�/��*�>��>��$��x��v3A��%�>BA���R�>+cD���!?e� �B�8�گ�>}$u�`��<ۚ���E�<ʝ�;_��u�_�g�&?Q�ȾEn>��>ѹ-�����U��>�\�������ʾ�'&� �/��>�i
��`L>ώ�>8|�>��C?�̏=H!&?��K���(�+�9�]��R�=��y���>h�>�U>}�7����ݾ��н,�����4�� �>�:V>w�d�Y>{?ټ��
�+>�x��� �ί�q@�ۼ;k8?/n�>�6����Ď\>W�޾�j=�T��X+%>ڀ> g�"�>��޾�.z>���%1��lF���'���8?g�k>}�r�L�Y�꯾�=�>�lG�g�<�81><��|��8���e�>:���"ս���>"o7�=�2��b��'9,=1���5C?��?��o>��?�ځ<J�����<e>���=���>�z<m0 ?�`>�?�~˾9H=5���Ψ>S�ý�� �ů�SN��pb�D���0>�#?_�Q��]>��I>��ܾ(��=��D���׾YIe>�8H>�q?�a��R5�����[�>`�'>�`���E>g6��� #�ƒ>���>�������<=B��H<�O�*�%2̾.��X+�V���G?P�(=#i,���?�*�>X�4���վ�ER?\�n=]�X�eM?8�>f��>'^�Q��x�R>Ta����>cq[>Z�J>0��>����._R�.�O��i�� *ݾ߫�>�7_>�H>�� >��P?z#?�6�h��=�b����h>p�a=^�+���7�ӫǾ
�>=�徱�>�!�<�u�=0���g? �~��>�n�>�n�>�o~>�=�[�>��>M]���q1?���>���>������>BO�>)���.�A��/
>g=�&/=�j�>m�$>���U�Ծ�{y>o?����?:�������5�w�(��g?�63>��>I =�=�<�h�=�=�1����$���؄����>gީ�+,�>s���F?����Q��>�I�>)�������>�# �=�O�>��D�̱n�JG������Vp�>(�>d���i��<.��=��ֽZK,�X���5�E>߳�=�$=���>x���Ţp>�¾��T��� >���>� >���<���>���=z�?�����엽��l>����l�Z������+��a�%���=�e�>!��>p�A?$+h�
��>2�P�F18�Aھ�p���۽�� ���$�< ? ;���&��He�AUj���c=�$��??���=ܔ�x�Q>�X>�?�)�g"�>6s���h�= a�<�?+�ˮ>1��H�>d��=Ix�>�q�>��r��>=����n׾uEɾPn!�X�@<��>����/1�m�ɾjΞ����w����Ǽ�� ?+N��e��f�Y��\�>�?:��8>��=�� �r�|Jt�� =�/\��^�>�D�>i��>����E���r>����L1���_L�b�<`�8?[�4�X}�>#������ ]G��*D���3?e�l��Q�� ������=5�5>�4�
ۦ�B o>�]�_�m=�����=�/��>�B?�f��w���f&�J-�<��>-�=�L��_?�<[i�>c\=�@>g���]��#?�`�=.#�>�?���P>:U?d鈾�ꣾ�qD��p�>K*���� ?���>(�x��/�>��)��tE>�b�+�><�>'��>v����5= +���޾� ]�hq3�W�x���X>)Lʾ��>%\����>�Ç>x l�ę#�{�=���>�֕�s�
��j=��/�����-��~���i>Jnl=�M=�j�<���>8�>e�O>��?ڳ?�,<?�B�>�%=~2=�]>RI��������>��O>x3"=������>��)>�*?:�>�� ?��>�H꾓v�=+K:p�?��9\>�l9>l� �b=,>���B�Y>����>�����
�>���Y�=H��������+?Y]L?��u=
"뾜��>���F�>F?�8{�~p=s�J?�֊�.��j�;̨����>u!�����z�=i�>z`�>�����?"����?&�¾��?.��>�졾�'���#1��-�� �?!���|�;�Y�0?i�h��ׁ>sT���S�}Q>N۾�T�>��~��F���H�&�d=u=S>-��'%��0�>"�0����J)�˿?��>�>tF���S������ȅ�=\Ή>��m>;̖=�����Z���<����{Ӳ�Z"�>�/>Zr<�y��r�; �>dƟ>
,3��D�=�<�>(��>g�þ���<���>�4�=����x!K��;?8�3>?dr>����F�0?!97>ˊ��Z �j1����A>�;����>���6�Ǿ��>��3�� �>�#>���Ğ���>c�(?W�b���>�ˡ>��
���=MM8?MX =\��>�C=>6��=�3���I�>S��ş��/���ԽA�޽N��ꗾSZ�>J��=��Q��������d#�=�>��>��>��?���>U�>�$L>^ ?o�P?�� ����>�
�="�?�(?�߾��=���/^�<K�-�u_����>P��~tF�����G�ؼ�N�=!>u>pO ��yϾ���6�=���C���5�P=��>���wO�>Kl�%���P�I�aW`���M�ueC�-f?��j��cS��
X��������:��[&�>�͖�����Q3?�G�0�~>•=Qoܼ��=���s̽=N2��;�>�KN�,�~�� U���(B?�N�>��=�~�
[
dense_2/kernel/readIdentitydense_2/kernel*
T0*!
_class
loc:@dense_2/kernel
�
dense_2/biasConst*
dtype0*�
value�B��"���ɽ2�=�F�=������=�浽s����y[=�|�1)6�,D��6Y�=��\�ٯ�=�>�;bM�=m-��&����������&��F�=�V��#�=�騽f�=�d�=e��=R�=ƍ=,.��Ql����w=&���� �=���=����sʧ=�e޽{�ػ��ͽ�gĽ��<�G�=hL��\�=����8��=KЇ=[�~=e�$=̑�=rg�=��=G�]� ~�=e8�=�d�=�����ܾ����=��@���н
�ʽ�/i��Up=I�ýo�<��½r�
�i��=�qd=օ�0Q��������=��=6c5=?���~��=�S��ć(=��=��������M:�==v)��S�<�=���Ym<2T�=@�m���==� ���>=�8�=Z����ν�4�=�z�=����4�=��*�W=�=G3�=�'��~r�<�;?��⌻=0�=[��bȤ=�5�;�y=|��=`
�=��<;*l��(�=W����y=��q=��A�#��;*̹��I��
U
dense_2/bias/readIdentity dense_2/bias*
T0*
_class
loc:@dense_2/bias
n
dense_3/MatMulMatMulnormalized_statedense_2/kernel/read*
transpose_a(*
transpose_b(*
T0
]
dense_3/BiasAddBiasAdddense_3/MatMuldense_2/bias/read*
T0*
data_formatNHWC
.
dense_3/TanhTanhdense_3/BiasAdd*
T0
ɀ
dense_3/kernelConst*
dtype0*��
value��B��
��"�����<��=�P�=��=u)Y=4�K=� �=�I|<���=7�>����\����=屉=cf8=��
>^��nD=����,�{ܽ�A��̀�k1>�oW��=Y��=���l,�=�d(� ��<*��=�̅<�.'=�ظ<��A��d�W�<{k��7 �!��=�e�=����R >�\�=���=k���$��
߽b���SF>�Q�;��������f=-7�=�����������r9=~���ܸ=���;q/��BB��J=Ab��!�:m�����Y>�uh�<�v`�ar9�]t ��;ؽX*�yMG=v晼g5*�1��=��>鈽�2�=�⩺ L\=]�; ]����=A��=�.�="}O�� �w� ����=�
����p����=-��<d��=��Q=��L��D9�P\�=��N��>�Z�#\�����<� =L^ �ljj<�ܽ%�Y=U=ۨ>ZT�=#��=�6�<� `��I�p�ͼ#c�=v�<�-���6�<oAȽrv�=�n�<ia%�Q; =O��=��D���فg;����N�_�m��=�J_�J"��.>`6:>�h7��
(>���9-�=]ZZ=��p��ԙ�ٿ�=�h�d��=�� =�%�����=�*����7��DG�cš< s �_���\��˘�<G���1>�L��蒽�ʪ�a]�=��<�
�������>1+���u�=��N={�=��켗���?�<sE��� >�'=2�M�Y�?�c >>��MM��W������uW�<�2�'�<���<`�>�4�=�~ �t���d, <�Ӗ���e���9<4v,���=M-!��>���+>�:ߓ�=q�$=8T+��&>[��FFĽ��ӽ��{=GyԼ`�a��#>�?��k >�����׽ӽ&=q�>��>���=�0!<;�n���=�a��$�6��,>�}�=Q�>�K�X�<M��=��콺pμt@=����[>Ci�r;-=b'���*2=C8�=s4�� ��=�b6>Pd��)6����>��ʽ��8<��i=,����Uu >w �����<&�ʼXu��Vn�=�=W�HZ�=��S�]/=nS��Tý��0�8��=�_����=�Y<���<�S7>��=���=<-�<?���n>+\������v�𧲽�d:=q������'�x��=���<C ݼj�4���Z��f��!�<|kȼB]6�OB�=���ƪ�bO��}|=��?��`��Z�dl��^���6�'��=K�W=�|�<�a�����=&*=�2�����=0��&1=�К��%D�Og'>���=��=�X��ͼ��=��c>Y"������X��=���`�%?=�<���}=����t�<��<�N=�k��J��q�-��<���=��=��.c�<,*��niX>��;��1>O2>C�>-2�=�W�=8| >0��=[�����
>��<���<�� =-Ь=9?⼤Cʻ�~�=�;M<}��=��=愼t` �W�ɼT�=~5�����=nc��Kh�7���ҽ���=V�<c�)�@�;���=�z�����rL��V�>�d�=P���6>�=�n��z����h
=��g�T#��2�=�gٽ����1��<?�ͽ��������=�����=��l�n`�=�Wѻ�R��\�]�j��=����$�c=�&�=V:<� ��ov��YN�/�<R�"=����c�=�J=[��;_3 ���=YF>q9=2�����]��v��/�轐4<�ٽኼ ��> 1���>%H�<�2�=�P���>'E�=wz�<�����=���=i���a7��3�}=�4ͼ�p<�
��D��r�<˶�<²�����G;=� �= &E��˽���S�:�ӽeN��~<�=��@>5܇<S礽����h���'��k�=����t&=Q��=olC���=��u�=(x����5�f����� �����->w�1�g8<�->���I
�<Eq > ���""�=&�2;қ�=y���mV:�ː����="6�=� =��Ƚ�=8�=��>{l=y��=g��< &Ž��8� 4��k��G�� �M=1D;�>rXS�|����ͽ�g$�[5���c�=�]�� 9����G=��߽댰��of=u�<!�)�<ț�5>�Au<)i=�x=��@=�r�=y<�<&�>6.$>,]d="�<���=}.����=Nj���̔=�+Ž��\c�=�%�=eD=�:m��㊽Z�>�6>�\=�0�}�=�IU�q�����'��*"<R>��Ik����<�Q;=�i,���!�̸x���
��o>���;a�R<��=�Ǿ�҉�����=q`��7 ��d�s=���O?D�8�)�K��\�օؽi�=��=�ň����=ـ�='�=���=X�<8˺=�u�=%��<���=���j �=�W�=YS�<1 �mW5����<^�����=�H>��>8™�m�=����8�=����Oq�=E���.�/����<�{����#�d�=�;�M��4��n�)�f��<�k�=;Ģ=
��k��;�*�_�켢0n��u�=�l̽�ú��M�=oi;�7\�=�S>0�-�/�J�U��S��=ף&������r��Q�(���|=��=h��;��$�K6޽v���H�|<�x=���q���f����>�|>��q=�>��&� 5��_4�=p=5�H��<^ L��O�=;��< >�Z�=��=����
��=���=�s�=�欽�&�=n��=z��;ݰ�O�%=��=N��<f�I���=��B�=\"��1=��d����=�t���ԍ=�kV�iU>Hvc=��*��D=�T9��N����+��>�V>�I�=ϧҽ�n�I良� v���R=�!2��Eݹ��"����=L�ӻ&��< ֽ������<aYG=����Zla=�ሼ�.>�'�����o7����=���=�*}��[��8T��ZM��2y�=���� ;����=�(����W��怽;��=�|<�� >�μw<����_B=7_M�<M�=z�޼v+�=t���H����=B�=;8ͽ��'>���=�4<�| >� �[A=8G�1r�<�+>y׍������� ��8޽$�p<�.����¼$�<����=`����=Wu�P�x<�1X��ځ�C�l�;�ѼC����>��{=p��<}Y#=?<���)��;��l��=�]=���=��
�g��<v��=�9�<��)>䩍�t�->�<��g��=��<�=�M>���=n��=-�Ƚ��8>Ƿ�=��6�8 c=I��=r���e �(��=
s>x/r���O����=�R�<�5 �W����>P�V�3>Z�=����,T?=���;>�f��Լq��׿����;G��=;ҽ=��Z>@�;=� >�fؽn ��p�<������=MA�=���=W���/�Y֛�;kt�4�ǽ;߽�?���^��E�u��4���g���{���Tݽ;�>���=�x,�W�>��"=�4�=c�<rJ�;%���-:9>���<_���W�:�����
��[��=�==��;!T༝��;�X+�8�&=q̽�۫�=����=��\�5�=q�;\�����^=\x���Qq��>�pn=`*m��Fi��B>�����~!��\�=�J�=�b[=W����� >�2<¼z��=�r�=�Y��3�
>ٮ�=�1;��U��g(�=zQr�i[;>7�=*I=稢< i���w �h =~�\=�*=���=����u>�7���xּ��2����=�7��Mj�?���l�=���=��P�A¥=��R����:��=1|k<�4���V;^L=�y=���=��f�._2�����ӓ�Uק��л��������=�%���S>�-O=��=DY�=8�> t޼���=��X��I���1=��<q��=� �<�4�)�A���^��=®�=�V�<��>ŵ�=7��#�=��E:�1>�^����<,A7�Nz���F���#����=��νr��<��Ľ8��92��u勽,�<��|/��RV����</+ > �6�q��� ��=�J���
輅5F�K��S�f�y@F�B �=�����>��S=�
��
�;8w�=W
y�Y���Sk��|�=
���?�\=�� ����<��>H ��\p�;�b��q:c��5׽����l},>D��I������=+��f-2������սN
�`>�\��^=N��ۼؓμWIO>���;P%�<?S�偛;��Z=d >J�>;��T��cȺ���90�=�5=��,>s����#x��ց<(��<�� >�;������0��=2p���t�i� =&:B>��c��*�j��=����=��{�o��=$wb=��>�Y��מN>����@�<#s�=Y��Y%�= ��� #>!�2>�>�+��ux= �����=�h1=�&p���$���ؽr�H=<��
����B�zD=��H�=�'�;���,+Q�N-�;?�սlv����D=�aX�sa����=f�X;��L�;��;Uw0<.�!<��M>��t�2>D.ں.��=!{�<+?�߂��[Z>��<WĽ�|��Jz��^���0uc�U��L N>�63��e����;�=�4=��������g�=�y�="<-� ���μH�G�n�0�l���k��އ=|E#=��:>1✻�:�����XS���p�; D�=lQ�=�:���ǂ=`8�=��n=F�z=1$���Mv��=
D<��۽V>�<�M�=���=�p��fW=�P��*�YJ��Z��iƼC�=�֏=Λ�;����\ \<f�D��H�d��=P�>9�3>d�����=z���P<a|!�w��=}' >s贽Ñ�;�jĽw��=B�!��Q'>�r����<����o�==�>
/3>�Z�<uo&=�����^�=��=�G�9$=H���<����)��A�������=�j���x�������%�sܞ=� >bJ�=n�����+����<���,"���>�j���ڃ�L�=�4>>��=ؖ.<�}<�|>ɓ�<� ���/l���=��=���<ҽ^(X=(��<0C3�ym�=��f=�04>��ͼEu�=�E�^�==�g>�!��•=���=��F���_� �d;k��=6y�=�=t�-�ַ���n7=�˻�!2�G '�ů�=�.�Ӊ��{;�=�TŻ�#�=#w =$&�ӹ\�` u<�d�G!D:i�=�>�=`�.�t�>���=�X/��� :;�X�t4:=Q���d9�Tw�3��=���=���=P��=y�����7U=��6=�!�� ��2��=˚@=�D��e�=8<�̟�=�2�=]�0>���I����{Ͻ<����L�J��<*�j�Jl��$�ܽU�%>��(>�$�Ym�<����6��4=�_,>�^Ž�I�;����Wj��k�@g�=����^=߸�=5;�=�����w���(��W�Խ/�=�B= �.>���qƖ=��X���i�PƜ�T��=���= ������9�=Y�@�W�]�$E� Z���O+��3=� ��%>�,7=;������&6=�uϽ�'�MY�=,":}b���=��ֽ�o�=���l��<WR��>���if�:đs=�� >Kd�<!>{�[=Y>6�x=F���!�Y�b�>R�=�Z��,[�=��� <����j���+=I�=��̻�������ϊ���=˿,>�]��~�=6����滉�=y�$��oǽ5P�=����gm{�Q �<1Z�=�����<�2��1�y��� ���0��6�F��,�R=���=h5=H7�=��!>�*>�����=��L=�&>����;�<�z�=1'��a`�=I��;���Zr>R4>��<>���=|7�=M��bA��]�y��<��=��A��'>Ȯ�(���]�=����`>{{�<���=�l!=P �‹ =��=�ݑ��Ō<J�v��>�f;=!�>Q�ýh��2A>~��&������S�@�?v�"�f���ݽ��=M/h������7�o4�:s�<�ْ;�Oe=��>��*>�#4>%a�<Q9N=�a�<�"�~�0�@-��@��=�R1=��2�3�0>7�=� ��m�>���_>b�<��>[�m�|>=Ac����Ͻ���� ��wy�DZ�<�G<ɚ>�Ė=Ӂz=���<;Q<�Bf߼��=�\�=ZMs�m�#���#�S���T�=0r�;K�'�{��<�#<� ����;�^�� �h��?�<�,�=�<>���������2�W��:�U�,������ˎ���!��cZ��9�=/7�����E�=�L����=�O�p�1�d�����<¦�=�Ą<���=�>x��O����ü�g�隻΀��"��=��C=׸x=@��=.L;�u!=�i�>�=�r[<&D;�}܅=��A�=���=�>"A���ս��:>�C}�����A�=� �=L9%=-=K��<�g����ɽ�G���<�� ����<��=���ڷ�=�i�F�<����m��L�=�=���=����O���b-�=&^D>��=�����,�b�#�=���+B=���<nP����=�Ks=a�=�v̽���=��x=��ϱ=��=N0��硹<���L�;[Gu�=��Q��jX��"�;v筼��ؼ��=I%�=�������<�m:����}�_=#PC=��.���,�eL5��;y�=5׼U�-=!�>��>��<`ع=}|�=f9�<��<(�$��O:�1nT�����揼\�0�2` >�����=~�O� k��V�3=q >��Op�=|�1��(����<�;k<^g�<��v<H�W����;�`����C<<������'��=�W��h�=e:1=Vz�=�o�r������E�����n�f–8r6*>�C��� �=3C�%��:]*=�S�������)��0]=�D=���=�q
=���<.��<�좼?Ѽ�v=�a ����<�ץ=7��b��=��<; s=��׼��>�+�<��ǽ��;>�I=0�=�lټ|U���?=ǿ�=�}�<��P��1���2=������=X;=�C�=sͼ��%;�m�PoP��B��h�<&Ὣ�c����=Ń�;}D�=f��=y�-=��\=}�Z�h�[��L�<�i!��m�<�~=�q&<�=�<�r�<㚴��1����:+F=�.3��4)>�?T<Mu�=\U�<}Z��X�C=��ѽKh3>�b�<�3�<���؞�=��=���<X���/�W=(�غ[?-�jGC�� ����ļ���=Hj{<�ql=��B>�S�<] �=2>E>�'���nۂ=� I=�}N=�>NF�u��~�-���*��c>=v��=�:�ڧ�=������=�V�=�J9����<��<�5�=~��=�8�$s>߆�<ّ=R�=c�;$醼�h�=�5<(��=�R�<��ֽM�h"�������*ӽ�B�=��<47o�쐖=�v=:��=�K�߳��l������>>��>����S >��{=<�^=��>r��l�=�aɼZ�?��� �t���?=�U�g�?�] 2�׀=�5�j �<�)=�*�=�A2< ٫�yׁ=���=u��=� ��ᐽt���-:Կ���So= '���νi ����}�i�+<Ν�=o��=AA}��8��u/>P��i#<�$F�EZ=Q�ʻs�^>����?����<b-ݻ��<ʷI��i">�D=� k��i�����=�*��44 >W�>�=�H0=� >�2�=����f�(������c���o<��<�_�=���<�_=%����ܽBB�=ʠ��-e�=}W=<����*B=t�i��Y�������k=���3=���=û/�h�� �Ҽ1A���",�F�ҽHǽ.��=��� �z�:=���=E�0>!c=5�>U�B��تC=X[=H��;�M������GVQ<��9=��P<u����}=m�%=g�Ž��>}k�[ ^�g K�8'ؼ�9>��; x�=��Y<�i���GW>�I@= bF�3��;���=-9>�^���1A����=��F=���D�i��=u�۽�s=1��Z�����=��I<�U��A> W��<`Vл ��v�ӗ�=g̹;���?�(��"H�I�=҈� U=��� ��=��� =�X$=u���?�<��4�)��=͐�<�خ����=ir�����=��Ͻ��=�5c�dJ��ۡ=��>��?�#��=�D=b����6=�ֺ=<ѭ��f=h�,<���ZO�;��H���\�굜=�-> eM�qQ��j�=�3>Is���u��Ά��Ӽ>��<��ѽ�-� ƽSӖ��tw���#�\\�<C��5���_��=2�=���� � >)���bD�=�d��!���
?˽$B-=�>*��<=�ET��,�_kX=;�ڽx?��J���|�=�>v7�� C�=Ӧb=�=�=y �:�� ��ӹ�y�����ɼ�V^�p������<:�@=��Z>�fw=��&=�ǽr��T�=�H���$=������k=���;�i�=L1��>fy���C��Og׼�����Ͻ�rڼ���=#c�=
3߼E�E=<ϧ��nܼ�i����<��ڽ��@��u���]`<G�=�BY<ݱ½�A6=����"S=-��<v������=�Յ: ̡����d�3�;��0��Z�>��=�'�7�ɽy�=�=��<rĴ<�3D�e��=E�_���>H�\�l�ƽ�f0>���b�=\��=.����?=�*>\ڼ�RD�K��DP�<����/���wb(<��=��ѽnv�=3�=Nޓ�7!�����|�>������T�� W�����g�?�hs�<8t>�.��\�jd\=)�f<�Y�=<�1y;�Bt= 2���[𽘨>� ���>��>��q� �$=5�ŽMX<.`Z=ß�=n蚽K|�<���=��u='��{��=�[�<t�>=�8̽�u/>9�=7&=�ܷ=�ś=���=VT�� c������!���=�`����Z=\|g����� �=7$=��)��.��b=���F;>y��=�U�>30��3�<�㟽��]�vx�����|��=E8��KD<ͅ�=AO�=��]���>HyQ���!ﴽ�]н��%=kdB=uWܽ��*������0L��/�=��6=6).<��>!g<�9o;�}�=��h<�a��������{!<;y�<"&ýzB>�~>pJ�=�{�;gs���֋=0~����>�g��ZEM����=�����;�x6=��<Y�>�=�����۽���=5 ����S�b�F��i,>k8V���¼��ڼ!�P=B��U=�u�����t����"k< 8��5A\�s�)=�=}*l�TZ���=�mJ >T�4��-ܽd蓺Ty/>d�8��@|=1k >�3�<SE>�d>^<=�w��ب��,�+=�6';��=G!>.��=���w$%�L�=$ԟ=��H=ks���[#�E=O�,�Jl
�ܒ�=��
> ���j�=D a=�Bv<*E߽��=@O=j����Xp���i�uU޼����n2������FL�=�h#�Mb[�@ջ�x�E�{̊���7B�=���լ=H���j �����IQd=�h�=S1�,����W���-�*0
>�R�=Aн����'=�D�=��8�/���ƒ=��-=!a��[�ƽ�n�Y��=^�� �2>V�=��lc��}7"=��k�*t >EME>\��=� �O���J��<a�U���>�5�<��/=ZN�=Vu
<b#�=����{�
>b2���=��>��5=8�ҽ[ǥ=[��R��=ޱ1��O�=���<��=^���bd��[廽X �5�=��<B�>-�@��=Ya�<}�7���h=#Oս�� >D؏�ӗ�<kD�n��K��2�>�
�<7�=>i�p<�|�9�����z��<��m<�^��y4�<*ڠ��ܛ�����oQ�;T��싽;R޽�G�^V������
Ԩ���b=�Ș=�畻%���$��%z�x@�=f�<�(
���Q���:|�����;�`�
r����L�ܒڻ �7>H��=� �=�-=c�½�r�<� �=��м���c=���r,$=�G�<��E�ص>��;@�?Y���e�Kb���`=�k�=����0���#=|p>9u%>R՛=q,.��b=��潠���9�c�n��=�M��/�=�ۍ���V<�I2>#���� �;`��˼�(�u���%y=�$��'��` ��-B��� �@�I>���='.�=��z;x~b;��=ə��2^�=��߼h�K<�0򻗸C=}Y���=���=��=�D:�==Z��dw]�ј�=��7>^�u�K��*�w������5=�p8�)��+�ѽ��=��=S�Z=�I&=�Jh� �(>Wr=׹�����=v7M���9�&�=��ѽ�g&���D��S=�t꽼�1:LX�=}V�="�*���<V1�<��F=��=�?����=l���К=�m�<�D�=J�=��v��=-e<�">������C���9>w��=���=o�2�D��=;�����-�=i�<qi�<X[Ľ�>�p�"�<%N=�~g<'�v���>B�'=��|���>?����|�=�0�=��I=1�>���=�>��<�,��M>�?>"�u�ɑ�<p����T���LT�MU=�mC��Bv���=��S=um������sf|�{�Y�W��=&�
>k��<�=�=$�,=^�u�����6��'
P>�v���<6)#��uF=m������mj��D�i��o,̽؟�,��=^���ν�@^�o <># z��3�=�4�L�ݼ�`��!>�y:;�d�ʐ=��0=�$�=�6Q=��;������=�<�E�<�@>aؽl���=Q!�<X"w��� ���*�s��=e� ;�$�=`��<����� >F>+ꬽz� >�돽��l=TIY=��C���!=n
�=��i:��=��K�� �<����ɕ=�VŽ.�<h��=ܕ�=���7��yfѽ�b�=Na=��b�rת���y=���<�������zC�?�> �=�4T<.�'=Ƅ<�G以+�=t �;���=��=Ss<W`��_ٽl�(�� =�&�2:<=��N<�[��� Ӽ;��<�9D�B�=���=��.���������~$�#����
�=}�<GH��O ��vI�<�Ϫ< W>��X=���;��T��{�<._�;�@��oս=�H���;uSi=��<�����=�6x���;�Y_���N>�6�< ��=aD�=�+�� >�3輻94��Լ�o���Bҽ *�<������ԽT)H=c�f�L�=zB��䥽@���-�3j����>��>B�|=DeV�g�,=��=��[=|؏<O�?�㝜=N�c�
l����=�=S�=z=Њ��mg=�Y�=@սQ<?�ܽ�2�=�>_$>'x=_5��U�<ʼ����e�QЌ<b<���=K6�l���i�;ɩ^����=�Z��|��?�ǽ�80���=E�սOռN�<-l�=�F==��@=��0����=�E�=�ݖ<AdE�Ҷ��w�=��=��=����1=�~����=+o�=ݳ>����H�=��!��+>��I1>:�*�ot =r���3s�=�2���t���=����� �<ZP!>�բ��E�=��d����=�D5=Xv�=�ȼ.l�;kw=E�<�a=�Ф�=!�=�XI>���=];�<�?��q����B� ��=�M�< �=����i
;��=ٕ >]n�������/=Q�;�Z�����=�|�������P�=p��ͣ>��4=��g=6N6���=�
>χ^��*u��Ds<�W=
>[����=�����u�>�И=�R>Ƽ��ܫ��Ԇ=��<GQɽp�l�.��=t�^���{=�S0>1I�<�u�;�����P�;�ܧ=�5=�;��'���I�������=�%齦�<!7�����j佼��=)�Q�9)k=,i�VV<�;�=�h �ʓ=����)p�:x�J�lV�2����>��l=�ż��׽)�&��=��=���󒃽��u<��r�G>�u)�� ۼ@���0,�- G�b�>u��Ed�=4�=}�<�h�=�܋=����� �������I�� �=�a�� �=�!.<AO���I�~GH����<CI̽�Z�=�Q�:�8��E=l>>6<7��=1X�=w=�-I��� =�N�=i$�<��=�����ݤ�h�L=6�ɽT�=��޽>��;L."<K���%5�<�u���d(=(��==�+���:<a!ʽ �C��.�=�$]��t�=�W=� "<�><`�=�L4=���n�>�v>��%��*����<G=h6ļ��x�:<��!���]=p_=W����)�<���=+��<˹�K~�; �=a���
�N��!ѽ����U���n��ۚ���^����Tx,>�D>�F)=DBH��̼�� �/ވ�����El=.X�:a�|�$���9S=`u�=�a>�+�=�� =�l`=qM�m�=㟽���<�ںpe�X���%�=t���v�C���Fl��~';�,����`=a�<�>�!���';��e=C,�=��#��LܽT���il���Ή=DO��r�=72=p�a���1=K�=0V@>��=a��=�j���A�=,��= �����= �>_��=�%������Y-�-�޼u�=Ĵ>ǐ>�,�=�Ե<1��"v����<� �<┽�~�;���;�� >��ǽwx��Y��= �1=�x�=�c^�q����A���߽Ni�:_$�<}����N=�a��{��<��ὰ�5=��T�����F'���+><�I=l���jx�+fX��
Z=5��=6̆��C�=��:>�0j=u^��_��GEl<O�;|;�<��=�;˼ޚ �] �Y[H��$�����<.h�<��=Jy�=\�ǽKQ�=�j�Ȭ>���=n�ѽX��<�A�<eX�C�?=�f
>M0���]Q���F=�aܻ����(<�X�<�����a�<a�Ҽt乽Q!��ђ�"_'>H�=1����=��=>-�=�nI�����a>�n =)�\=���=��P=����`ؚ�}Q���hj< ��=s�>�q�<����W�q�s]A==pL�ѓ὾[$��Br<�w~="н#�ʽ%>��ߌ��Ů���=�ۊ�������ڽ��n=�� >H1
�u�K=�iR=d�<4ܻ��wF�#��~P=�p=l0��ʣ��ԋ��M%=�!�������]�G<�A�=p��;I��<���� =N� >�*R�D�b�����d�<�)>�؋�<!>R|o�B�;�dɆ=\��=���.o�����=M꠻,���E��"�<Y�򼠝�=�,M>S:+> �Ž���<ߨ�->!Ի�PS=�ͻ+}�<���<$"�����8}�=#�=y��=S�=v�o<dA��;]����=�v�����< >�������!<K ��HP����=�0 �ih�=��q=(;T>��4�!�R�^$��y�:LJ=_������O���.��=?�P>,JK=-�=��g<��%� �$�+/�����T]p<�����=�/��w���0l~�9ݲ�^�[�[2����<ɘ>_;��v}:��e�C;&�=X*#=����@3t=�근�.H��F��J����<h-5>�N��1��䟝���<��I��T<"�=��4=�O�=�XU>��=F�t)U��L���<5<���b�y�\�x�� ��1�6>���;� ����6>nF=��=���<\�o="Vl=u55������ǭ���;��� : >��]<e�E�����j����Xq������Ә]=���=k5;�_0W��켻���=gz>�8�=�&>�p�]����$]��#*<ju0�2y���<n,n�v�T���W=J�p��%1�� ���q�=ī�<0�w�E�Ž3�½J%�=-h:=�xV��|�=s�J<i�=)�ս �i�9�W�y�s��:c��}=Sv��ș�=fZ]�M�>qa>n*�<���<ui�=��^�l�)��𽻁:�5��=��$<x�]>�U�<�j�=�S�=$�L�1����?">9���Y������k��Æ=��Խ-I>V�<g3�����i�>Ht$�Z!����/>a�>;S�=����k���W�<Y˨�oR�=�2�<o��;^� ={[R<R=�=��T�h�[<S�h�=Jչ<ا�=2'Ѽ��<GS�;�����h7� y���=g�-�t=8��<�=��&�b:G��ꦽݢ'������u�9<M��=���/��G���E��k���+]<�����=��=<�=��>ڞ��&E�<�J���I�=0.1�����=�]=;̻D製箽=���<��0>��=Э>�>��B��O�,�=�T-=~��=��_�� 1<��i<��>�:j�w+4=�6>��c>dc�=��ѽ(V=�"ѽj>>��½�y��� >)=�0���%��D�޽q��=#�\<B�:6AZ���<[lN�dх=��=�q���E(>��B�=3��JR�=��ٵ=�o��e�=����ı=���<�;�<��=��%���=�O�،��=o��5 >�_X�� Խ�,5<k=��6=V��=���QcB�t��q;Z`��h��������=�ཧ_��#��<�Ac=i�ѻwx)�,Z�<��¼��6�x�Խ�~�=�9�=�o�=9٣�{!�=�����{ܼg�=�� :�:�m?�ce4�ċ,���ƽ�P�=�� �� �/¯<�=^���$� �R3������U��eCe=�_�=}𫽾Q��T��=�>�����=���=��{��<̽䁏�y�(>� M��@���B���f=��ĩ4=3H=�%<5{�=9�%��oX�&4e<�Ǽ b��k�� g=}�̻�+[=C~�:��r=a��<�{���?���Y���>ѼTH���A�=��&O�X�*��i$���E=���P�=)���ˋ�����2�����l�ǐȽ�T=<����L�<��潷����� ��u��m���k�C�>!�*=S�˽��� \� ,�=����W��'z=�3��K8= �#�1 +���۽���=]��=o���w�S�o=p�>�.�=�֩<�Dk:ُ�=D������&>� ӽ��E=d87=��4�
�=X���%y�Y�"��ڻ=������<gM��{�Ͻ�M�=b�0>�H�=.��u�=g̻Jؿ�q�<z鎽�z=4�.=_��=�����T�}��=v��=?�@�O-�=U��=t(N=q7>a��<D܇=�0�<G�H�kC>xͼ����=J�n���̸��~=�iѽ f�=5���<���;t��<� ���?���+�J2�<�Oe>����P�����S��+:�� �~!B������+>�f��pz_<�BĽl��=tL��c&$>~�����k/�"���� <:�]=r�<��ܽb;�~5;v輝h�� oϽ��#�=d��~�[�+��=Q�Ὤ�7=�����=_s�<K�����-��/�;�m�=��"��Y�<"3�="��=���=⻮=��=�0�9��=c�=Nሼ9䊽/1>����24=���H�2�+V�=�DD���@<ӽ�= >���=S���u>ל��>5�<e�=��<���+�]ۘ=RX�=��,=ΛP=��=��=�.'�T#�<�v<o�j�v��<�>(�@��������=
���+=��9n �I� ���=�9򽜑��ꨴ=��Z=���x���ս���h���Uj���5�Rd���L��G�=G2>��M=.���� �=��2�k��;dC�=Nc�X������?{��V�=��;Ρ�o4�=���� y=�9��i���@>�
��܆=Yؼ�'w>���`��<�g�;z1��ZY��n0>S@X�Q��D��(�=�.�<bLU��#>-����� =�B��.�� Ƚ�,���z>Yd���J=��h=�Iu=�;.�Mg�����<e;E�C.e�;"ֽ淺���>�&Ͻ4�F�� �=44ҽ|�ֽZ�������a�4>3�.�s�׼| ��}?=�����=�5�F,׼fL-=>�<<Cd�=Ύ�����<֬p�c�=�@�=N�N�1ƽ
����`�;����f=e�+=��P<�ѻ�1U��BA�g�:�L.>�"���=�#�T<���7<ƐL��� ��]0>8>�=�]�=������=��u=\5�<՗�<3��:�Ѫ=��=�M���%�\j�=���=�)=��;�Ʋ�,a�=t��A��=�]�l=��۽�r���`�����W�=�/m=��>O4T>����i��� ��\�~�.��^����e=�$�KcW�PS�I�=���=I E�԰�<� �<T����0��=�gĽMщ=�I������jġ�J;޽���<�@&�a/R=uk">'x�5V�� 6 � `�=`��=�w��]> ���
:>��xn=����;��=���)>��<��s������r>AU�Q�D=ȿ�owv<�Y=H�5>>rz�1,@��?��k���x/=�a���뽣�!���>S��<�/;�%����T�!�s�Ž��ͽ$^=��)��s�Qu�=t��=���<�7V����<N�< Y����(Qf<*��P��X�=��<����=��º���\�<zCӽ҂��׬��9�=yT�� ��A�Q<1J����|��VN��c齊ٻ<�]�=Ao�<MR�=� �����XV����f� ��������y�<�]���*�����=�I�<�����!�2�����н���Z~=��^<�h�:�(L�����������=X�����=.�=?K��
�u���5=�0��Vد�!*�=/�̼㸼��B�EE>��;*k�=A�=4>�����[>�$���Չ<��B��B�<+%2=�c�=����M�U=��=� 9�׋~=�0Ἧ�>I�����-9�=�絼�5���>]��l���SнE�:�qM�@����ú�W�=i��=,�=3X=�w�<kl�=�=j�=Pb>n[�)���B�ὢ� ;\� <�=.=� Ƅ=�������=��=�І�ͷ�<6O�����<H��=haG�TZ���n=�e���� >��>��n<�V�i
�����+�=��s=��#=�� �&� >U���C�V���.�m
r<��<���?= .����=���͕>����[ս�Ow=J�f<�ֽb��5k�=:���C�S��?�=��꺸�>�B��:���7<�=k�(�Fz�\6�=�]e���='��;�}�V����=�V�=��X�lc;��="%>�oN=Iuq�4�=$��ݽ'�L=��=��0�=�:e<�h�TV������bf�=�����W=��<4;�R�f=� ʽg$���=����|����`��=�5j��-w���J�y��=�@�eܢ���<�Kn�1��=0{=�G��[��=<��=��.��t�=�0>r���uT,�Y<��������=��ɽ�?��=}�����<=��<3 �����.�<w��=������}�&.��M̼d�=����Ll��[��<�,>d5�<�f����=_X3=5��=�8E=��q= ��;����B>f԰<�s<W8�<Fl���Z>��M=�_�=��$�s ���)=��<�F�=K�J���=�4'=[>���=:j����f=+�>#��-��=/�����= �">��=<ng=��$�`�f��2�=���v R=�K��%uH=s"�=� %�؞Ž���� ֻ��-�pѼZ�=�))�� 9>���<����>j���=u�&>"#v�:]�=����-p�<4蜽�`�=�ᄑh ���;�=��>�>��7.;�\��"�H=�w�=��|<(9|�d�<X��<�c3=��z���>�F= ���X�$�8?�=n�����3��(ݻ ���fMz�(C漐z}�:��=VW佾g�<"�;�}>��(�β�|<<��=ę=� �=��>���O�>݀�<��= O��yT)=�2�u��ǎ��9�������&�<ò��R&��*ڼ��;��+��=�=}C;�W�W>˹>W[��t�̽O
�5}_=��=�� �[��=���U�&=�կ=_D���*=�;=
��1��=(�=tr>��+��:����]���)�<�>���T{�=ഀ<�"��鷽�1J=T���)=�} �� ��1���9,��FԽм�
=�!�=U0�����<T��=Kڼ=�+r:�f>]�=����kT�<(� >+���UD�/p<_7�fiP��u��V����?&�Ĵ�=�� �4��<P2�;�$;>�y=~#��:���\�O��=|��=�40=���=Ha =���=G+S�=u��K�=D���Yؼ.�)�.~)>��>}z,���=�� =8cj��;t=��y;�t�=c�=�hE=�Q�=ao=�bm�w�<K��=�s5��ǽα8����q���}<��k��;�3���5�J=���=��q���*�xy=ɳ5�R"��2�x=V��\(��C�CW�e�'>Jv��<y>���=7ڼ-���ݳ=�#>�"��~��R��O>�߀�$g�=̓=B�S=?⵽��p<o��=����B��Ya =��==��=~o=0����=�uY: A�=����0>��<i�o=}���P��=��5�z_q� 1<�e]��G�<\v=��S���=h/*�ƣ�=s*;��n��T � ݳ�9��<d��=��
>ku/�h�=74ܽ3>rb:<j@�<���B��� ��=���� GF=��.=���=g}��Rt���0>�N���&�ϙ=x{���Ε;Gz�;���<�4>O*�<M� < 5b= �V>�O���+=t �<t�Y�v[Ѻ�2J=*d��T�{;L��:�1�8Y+�=��-��`h=��=�ׇ��3��ܟ�H�����:�����)�'<���<��c>��6�н��<��{=@��Yl��F������� =�m��s=��j=g��<�ت� �=��<�>fiR=1�f�_��<�2F� �>�;���=y�'��-L=��==���=9Վ�������6��9'>�� �����4I=vj˽!�ܽ��û���"'ͻ��m=���=4<�=n0��5�:�F��Q�=���=�> �E��e�����5�ڽl�J>���;F®����X:޼\�<�&�Z<n��R2�<�A >F�l��=LD
=ނ���>[K�<�t��|�]��=���=�kn;F�I=M��<���v�=��=��'����<5�6=f-b��t��N�=
Eg�M�����<���=U�Z�DQ�������{�5�=Ph<6ʰ=ө:�&�O��F'�
��� ƼBK!=�#�=��}=�S_�>l�<命/1=�sQ��g;��ʞ=�"�<HG½�'C�ze!=y)=����Ө=��B>�ݮ�sX��x��z�n��4���!��\0=�������S�x���=�ld>����6�<�zK=�j���=���:/e�=�����>q�=z� =��-<Q���V�½-��<w�=5J�=�ߔ=�W=�� ��E��2�<$�=���� �=�@>y��<5��=��=�F >�>e�.=�s���9�S]�;g�Y�Ss�<z���Z#�=���<u�=ђ�=��.��S;���>�X{=�5�=G���!_�= !&>�����h</y�<4U�<n�W��l=�H�=� <��r��}\<vI���x���֗���M��Y�=��>�$<����TGڽ�x0�x���� =�*���t���Y�yg���FW='����=<O&=W��=��z=��o=!��=W��[<|R=�5m<���=�g�@ ��]�=2��=~/�=G�C=����6�>���=�t!>���=�Y'�8��<r�>;0C����=}�,������$>*\�=���<�̙�u�=����u��;|{^�,�>o,>��J�<���=�Ժ<p�>tY��@�R�hg�=1U!=V���m���T'�ܧ�=��5=��Ҽs."�r����ѽ�M�<��x���t� >PE�O��c�)�Pr�</1��%A�=�}�=tE�=( 2����j�=U��O��=�>Z8)��AE��/��=>�y��<Y�ଵ=۟�=��"�'��M�=���� >K-�"�<>��=�0=�M���I���d�ٽ-O��z�<��=e��<`�e�A*V=>������I;#��=^���8'J>$:�]��<�r�:�?�=m�Z�q:��M����=՜ֽ��#> ��<f���z<�D]�n�=n��=Q�f=��u��=����s���ƽl�<�$�<� ݽ�<4�$� >���=�y�����L���%�<���=�J��?d��(z
�>��;
�=�Ж���={W���������<��n:���<Z��=�N>���<�d�<���=m7_��?�=�@���Jd=��<u����<Q��O��W���vv������<�:�=uսO��<�<'r=�d佾���3�=�����m1���=0' �%��龁�y��If����|=�o�$B=��>/
�����|D�N4T����M����`>��=@��<�ol���{<*
=�\='�e�=�S�I�=/!=A�<E?=M�<{����+�@I=��}���=�ʌ���D���">C�ٽ����7hM�7�ɽ ����ǟ���佲[�="|�=�ȭ<�q�=��=��<>�����Z����= �=�!��
>_�ս\J-=pp=1z�:P��=��(N =�I�=���=�3/=U b�C�Q>}�f��./<R��=9����&9����=��Ǽ�9���M��n=8�Ҽ�v$>�K.����<ߐ��a^�=l���.���s�=�nQ���ɽ�k����>���=lH��̴<��<Ff���:>TO�<ڛ>�w9��Ԡ�J>����q���.�[�.�e�<u�.��g=]�`���f��G3���=�X�=k�$<L"ǽ5҉<to�𤨽�X%=E½�=>:�2=X���˼���{�>�w��b�������;>��Q�vy����=�o��`
��J�=�杽�1�=p�=[��=ډ�=P�*>���=S�x=����]�=��4�&�<vSO=W:S=���?�#��?�;�<�u׽G��<SfZ=4:�=g��=k8'�P�6=D?-����-H7>�)��~.��μG�[ �y`�=gP�=Ы�����]��D��=7�>�S�=Dt=5�߻�k�=qw�;��ͽ�m%�)4�=�>�q����罵_��<'�=P�!�E��=��q=]��=m(�=,=jC>�eI��Y>ډ��ujj=[��=�l[=��c�%�J��>����>d=�� �]��=���<L8~�Qު=�ҕ;��,��Z='�ܽV�<���=���=�*�<�:���"+>Am&>�6̼MI=��}��Ά�G�=.�K>��=7�{=�� <&� �����1=V;N(6�F~�<�a�<]&>�ߙ���s�}o��d�ƽ����=X����n���r=�y�=:<��M��=�;=L=Sq�=&t�� d=`7�����;ߛ�=���=���=%�����<��=ɟ �-����=-���\�����}�h��8>�V���䋽������= }���x#<[=�=_�>=J��@����=*b�UG�<&Pӽ�A�<��>{���/½�k@���U���c=1����wU��nԽi �=LY?�D�S=k��=qO>�����>q�c��� >�m"=������:*��=�
E���^=F���==��M�$W���
/��9<��=U\�)r"�#L�=�q(�t_�;��t<��g�WI�=ν��K�.�R���������=q�6�]�Y<�N=�/T=�R>fD>�𠽈�Q���`��]@���<6$���d������B�=�yG=<Y��� >���<T*>)%=D�= 儼�Ɍ<"s�<�<N<�)��x ���N�B>���=��;r5=� �n�{g<uT�=lЙ=�L�<� �;Y̬��D>k�p����;�p��S�Q���}=�A\=ܬ�𹠼=��i)Y>�� �LA�<��<�>���O&�L$�=�{�:��3�}��K+�<�wH=�H�<M�Q<NU��zb �#�(<v��<�F��,��=d@��2�=ʃ�����ڽPT���t�=߻@<�=D���a1�42���_�#
�=X߸=7���H.�ks�=��<�"�=c��<�=!��=�B>���=����ʻ�Ƴ��>x�ฯc����=�� �d�����7�3����<�y��S��=zA'<��=�s�=��g=�ŀ�9�.��r���ּ^>P�5���μBv�=�->]����n�=��,>����}�=dv!=�N�=(�:S�ý@DC=)S=:�<�V�3;�R8<%��=���=s�-="k
��߽��?>��;.W�=:W�=���U3�=��==�����\���=�z����=�1�=�3��z�¼���sx�=��;�H�<��=|���'o<�4�lH�=���=���=�}B����<5�=��,>ת��V�=M��=O>��2� vjo���0�'r�=!z���f<o��=��=���=W��:���hў���������<���y/½����kȺqkP���7>pVl=�S�=NO���=N�+<y+˼������Լå��~�J�Kꚽ�6��n��=��=L=�=��.=,Z=�y�=Mw=s�� 1༌)">D���?S�%�-=@!�=Y���"���J�M�ͽ�9�=E"��2���jx�<W&�� ��=plԺB'�_��=��O=���<_w�;R=/`�����un��}B�ig��Hg<=d �=�ע�E�L=�>p����.=�s���,��~�=�N�-�������L=��K���1>o ��0�=0���B��<N(:�w�����=�n�ƈ���y�=SB�~�$�$ю�&�E����<�'����>:W��l%+�齻=qԤ=��n=~ݩ=�2>��>Nŀ��н���|���N����Q> �&�P�ݽr�Y=s�>�!�<��a��5�=�8=��=-ϝ�a8 �F-��A�6���x��V�=��?���*���`i���ao�ѷ�������#V>:�o���S<Va�+�M���=���=@�q�1</�V<�e=��M� ���I�Ga��;z�?��=�p �5:�=��^�F;��g�=(^�~e���
>T����0=�ȟ�:�2�/Wr����=�cd�¯>(�ռ�ö=�D=����潡�~;|}E=mE=^�8=@���"�P�"Y��3 ��e鍺�[ؽ���s &=&�����=���=��;-�=����'늽l���k���1�<b�^=�۬=�ê=_e3�N��=�� <L�#�Lg�� �= �,�>����v!>�O�=��=���cQ>v�B���<�d������(<����5�=˓]��`�WQ)=1>񤕽�,u=�"����>�Ž��
�=��=k6"�Ka��<��4�
�f=|u��L��� =��=H���2�6G=k�T��˽�鎍=�c�=�->�i�9��#˽�
g=�ə�i2=�&/>�h�����;&� ������J�� �<��=.�����j�/.�;� @�sJ=�'>>���h�=ly=;;�=�s><·=�Q';`�9��F^=A���B]�RnZ��w!�g�!;)�>�
,�Xk"���4��1n=�*�u��<q~���3=耽=�����K���@>o6��u���p=��=��>��K>
,�9 �F������̽mUP�rӣ����=��>)�;=#��2�����E��:�=�x� !潤�*�~����O)=�ֽ��j�<f"�w�@���=�,>��H<�w�<��ф��LȌ�N��<�b��F"Ľ�~�=P��e�ϼm��<}��=�#޽ןd=T��=>8�=�?����<��<=킾����=�[.�VN����=n��;��;���<6^��=S%��DE<�������$o��ɩZ;Ŏ�=�?�>�罘V">��=[FX=C�4=l�=�4��p{��}H�p�d<��܁���2<�M ��H��~�=�������������=��˽�۠�^d�{c=-0@��M=7����+�^!k;����ɭ<� �.=N�=�)�=��"��^=l�t;t� >8�ݽ�\x�ԫw=�Ӷ<'�6>�c��q�<`��=��ӽ��!� �
�����r�� �=u����F�ڨ�=ǎ�< �-�zu�H��<�4m=��3=���=@w�<=E��0���t3�= Ž�攽7�>�^�<�������[��n��==m�=�T�4Aؽ-N�H���&� =Ð:�����Y�<�|�=�`�=*��<�l�[b�;��C=�F���<<=�6"<f��;Q���ѩ��D��M�=]�>—<�f�=d8<�=���F�=a�C�.�*�`m>8����z��'ܼ���C:��w��l0���U=�~<I��=���X��<,ꖽ��ۼ�{��8�ٽP]
����<� ��ƥ=ڽ�����<��=_FZ���ԽT��׎>=�K�8�<=V�T�o\=^ (=�\�=U��<�d׽�?�;fb�<�r=k��=�BI= |;rgN=�v���>�D>o缽
���q>�V|<A w�����J������>��� � ��ؽA��=D�A>�^꽽4=Ug2=!c�<K@�=9��F�=�xm=| ��\pr���X�B���
�������V�=�� >��=�F=�$E�*��=Q -�l�e�t=h��OD���짻�ּ��r{=�N@=P+�=�5�;;m �Y1d=y�/=�
W��L��*��=M�>tf��p^&�oM>n��=�}T� YW��� �v ���/���;����>���f��=_�ܽ�a�=vm��>֙�"+�=� A��[�=�L>�׏=D��=u���D�W<��>f>O���<8g��o�=��0=J�)��0���:뽿l����3>M��;r��=�S�=g�>*H�+=���Q�K���A�=�Kh���L�X 6���>n��=���<�N�;kap<V��= ��v�<�"��y�>^}=�n��Z�F��韼@�<>#�ʽ󫺽� �ˮ/>��>�\�=e�b�4��<�q>}p'>�c�=&��=٦�=���tٽ�w�=����|�4��*��)<x�)��� �Ľ:='��-�%��;�t<F�u����=�%>�~��?R=�6
�p��=[j�<�F �*$a=O&�=�"�<-%�~�C��Pռs��=���=Ȏz�km=A�>Ȇ=m��
ӽ0�x=m�6;y�=�UûU��b�;���=����U�����+>L~|���U��9�����=7v�=��y�F~%<�=�=v�4=l���g�-���=���=S� ���P>�q��+��=.�����#<ZIk=<^�=��=�K|<F�����a=�H½�%P=�=m��=�+����H��&/<�4/�F�< ^v������/��UѼTd=W�f�]��.Pn:�����м��8�pk�=AaB=U� �l� ��-�&�A<�$;<��`='ঽ�c����9�݅��a�>�y�=Z:>�x���z �M/�=�r[=���<~�>���<�Hμ�sC��>�f�= %̼h��q�˽�p����=~ ���`���$�,5�)��=�c2�B�ɽK��=L'�d>,>��ӽ�-�=D``�;>�܋��?>=��;�{ϼ���B�=O�9�^�ٽ��򽡰���oE���,=��~=�.�<�)��uq�����������j�=�� �_����f=x��;>��=��>�����{7<����^A�=t�>:��=ّz<��=+.<+�E=����#6�����=ϭ��UA�;x��a�==V-Q���\�rJ>��ռd��=���iu<�Y=i >���=�X��\�="퐽��k=��p�����N��=;Ϩ�<=�Ӗ=$3=�����<�*>��M��޳=K�)�TI=��X]� >�����f�<_A�=�A��Wq��k)�_�ӽ8�����=��ļ��=m��<�<Ԇ��
5 �:��x�H� �=�€�����*�r��A��^���{B=���HR$>ժE�,f�G섽��]�� >��#<hB�=�n�:J�r;�N����� ��=d���t<�.�=A+�<˄�<�qN� _�;^�`��0+=��k�Ẹ=�P�=Y���8��;S���rz�=4��=��E<�m�=�*���!�u��=���=$����=8�(��Nȼ�A_;<QP<O��=���=��<�!�)O��Q��e+�/���
��k���Z���n�5�N��<@���{��v�p=k�%���\��6I����=S����<��a���=;R��k��Y�� ���=�;��׌��� l=�۫�Ӈ��x��=eT�;����W��<}��=�)��A(�V�ӻ���=r�=��<hC�=�>Yx�<����>�>Κӽ�0C���=1��=��Z>�C>�M�<׹�=�,*�XU����i<Y%> 7F>���<�^+���-���Q=� �<���<�����k=���<C��=]����0`�v�q�]T�<��m=k=��+SY<��6>JZ�=�"�����c���,+> MW=�}~<����mE�=SI��rL]=ܗ=��=uԽ�?f���Ʌ=�Q�;?�#�k�6�� 1=��?><j��=U�[�8K�|�J�^��<�yF�o�D>�=�O�=��n=��+>�F���m'=*C��(Hƽ&� ��b��p.�=&�9=c>ﻩ��=%�μm��=Z�!<�̆<���=�`-�Z>=�g/�8�=��=n��?��=}����a@��4���u>�B��cļ�6H=P3u=�{4=���=Ҥ�=�(���I=E�.>�m$>뀜��> >��=��v���>����6�x=�n��0(����%��&C<�@y=�= �j�a���%�����xL���=C�#�{��<� �=�_�:�*���-.����<s���y콗�l���x= z������v�=+��<�.�=�ߛ=��c=��6=��d�Z��<�c>� =]1i<���<��I��zټQ=�X��'�=�T��)%=?�<��F�61�=�̕=:����C�f�T=�\��8�;<��=��E<��=e��<Z��=w��<�J4=@�˼�_�=(����^:V�>���<Ռ�=O��.͞=��
>��H���n< ��0��<E�N=�`��l�!�� =�� ��D�=��ý
�� _�=��h�]8=YK&> �"����<ߟ�=~�����M=8Y��Y�<�������FȽ��'>�%��Qm��,\�;���v=F�w�q��=I9�=b���E����
�d!�<��=^ij��Kܼ�I���n=,�=�(���F>��=e�8��"Y=�I=�">{�i��4n=��9�ȱj���f<�0<�����i>|i���!��w���4��3��=��e=��&�M�d���>|��=����Ͻ�/�X��m����<��X>�}�<�%�h���*H=K��;�=�qһ�����է<oQ[�7�꽔{s=0�W=���=�iɼp =��������U���Ⲽo�F����p�=(�����v��p����;^�ҼE��=�l=��<�����=�?��|�q=TK��P�8�<G�<�L=���=v <��=$IX=LZ+>] �=��N� � >唴�K3��k���A����k��;q��T�Y8�yi:��Й<?w���ޢ�4� �{[<1��B�=.6>!5�=3M��J�.=
hb=\O���]�@�[=�j<�B,���+=�u�=]�G��=K����k����=���7<*–�Z���L�L��&>+<�E0�j�Q<,�=-R'�xV�<q�2�N1���!��#1>�t�� �2��*^<��:��\h.>6����s���9>U��=�5=�=��‘-����=<k��gv���f='��k��$᰽Q4�Gp�2�E<�K�=#(R����:��Ƽ�o;�9(<}��<:J���6�e�)�3c;3�!�M�=n�v=H=;q��=C�2���A��u;��Z��1r���v/��ۡ�]�>%�>5s�G,�< �&-\=��@>�N�=�{>�N=5=0��͐�<JK�=����ܿ���P*�g������}�=| �=6
<pCh�k�#��] >�E�)U8>�O'>.� �2�����=�O< �.���^����m ��%K���?�0 �=]*>�Z��'{{��������=���ס�<V�ɼ�����k%<�j�=�4ҽ���=AV�=ԙ�={*,=84.���);�\o=g(1=L��=���=x��� 8=1�(�H��:�����fL=h>�㼄��<���;�ϟ��򓽔̀�rU\;� �(μ���=�oϻ�{ >�A;����=dpq�� ��wc�=�Y�� <>ۓ ���v���>�s">�Z���L>6��}+�����˽t\l=zO!=�H��`�=���=��.��5�= �����T~�F��=����W�=7 R>��j���9>���=�׽n&�⽰��=kT�
��=2Խ3�/�J�C���0�q$�=�%½���=O��=w��=�#����;#C���ݽ�g˽Z���-�����={��؃������{�= ��� ��υ=��<ˮv=�����(�5+����=������=� � !#�}�b<e��=��4>J�j=]>�k��\�=.��=΃�=4<S�>�S���T�=f��֮�c��� =>=���G$�&��< V��!���R�ǽK�׽��½���=�t���> ��=��>I!a�]LU�a����o�<�4�=�hb=���<�8ֽ/�.<��>iE��"��;�������2L� L!��|v�0 >��/���e�+��=n��;�/=ԉ������8m=&v<U�K=JY<���CT2�SB>&�>�R�������M�B>���;>;=������%Ǽ/�g;KS>����<��$>�ީ���>�Q۽g�P�^�t����ə8Om�IƼ�C�������R:�5 ̼��<��<�*=£��^>�Y=���p=[��=_k��"�� �Ǽǣ����1��u<az�=!K�=���;`l=>� >����6Q/=z��<{���ߺ<��=^=�<�8�����0�=v��&�==��%<���=�y�Qvd���=v�=s۷=4��; ����@q='��=��u=����2���a�=�ʒ��H���v���G�{A�;4�=�U�=R>�鬼��*�Vq�=�ۃ�F<�<j ��K�="�";�[�<����!1���� =?��=� =Հ�k� ��=�$>V�$�%��G�>K�= ����=�X ;cݽb"/�V�><���={�A�0��=K��<�I=�+��r���L�9��r�=Ua&>ï��'����(���>�����r�i�Z��8&={�l��O�=IbE�ݕE=�>8��@=҄=���
��c�;���>=�v���cq=5u�=������=(�޽�׭=ڇ���&ϼ��R=���=`��=��/>_��m�E�;]:=U�g�ɪ�=U�c��Uѽ�t >��L>�Y}=d&�=1Z���Xq�3�D=v�4��Q>K���r�P�=�q'�<0�"Rf�&���w[�;ou��D�,�.bG�,��� =!=f����=�z�<���< ����F��P⽝M->P6ؽ'�ֽ��I������ی��$H==x�=h��<CI"=��ѽ4���m��������a#`���G�d�2>�d�=�3O=��5>��v�`��=B�e�~�Ż�U=K��������]=8ʼ;,�=����������<�����W�:;%��>c�=Aֺ����y��<�I`=H�>¦>��ý��'��J�<�ʽ� !�R�)=�7�<���=n��=�I��~ �?�O=)6�>?������!�h=�^�<�(>���;�!�X;��=ڀ">i�&���=Ҁl�E��=��^�?ƛ�u��m ؽ�j˽�ۼ�����n=µ�</�f�g��ވ=*Ŗ;ic�=0z�������A;3��<JZ��&3��/�=Z��=�逽�� = <s^D<Ҽ=��<��S�s$;>sK=s��?�=�D��2���(���9'=J���[����=�6�;�`��DC�2�4=�:��.=�ϒ�Ra�=
�=���<&z�����>���ゲ<���=ط7��������=�ͼ�?��l�#>�
��f�պ{��JX>�޻I"��?>Ĩ�=��+l��a��^vF�5+I=Z��=�� =�g��#I� l�=�S=>N�=*Nr=�n=; /�W�A> �C��=��'�Uv=`c���3�5��=�Q�� �=>�u�� ��t�9���E>��G��׿�&��=�(���';>�W=A8��/Q�<��k<6�����;�֑�(��;D���J�=��r=�wA�l>�'i�=jq�<4t?��D�<;Uc=��=����7��Yx'=�r � ��_��o/=�I �b���p�H<ʶ� I%�����*,<���νJV˼�>7=N�=��=b�����:�.��l����wV>����v�=T�]�a7��4�=T] >���=� ɽ��d=_����=�u�<�$A���x=?����>�FR=.i'��:�=��@>��{;^��<+됽�M�PЦ=�BV��{�=�]��W,�K ��@|���}����4��F=a�a=�-�=��ɽ#�v=c� �����w=�I��`dJ��P1<�B��-M�=_�>��=��@�j�L�*��=��P>�lH=, >{J�1H��٫�� 9�=ى��cO=cp3��f;=�Z���G�c =S��^P{�D�G<���^G�<�� �5>Sᘼ�シ���=G;2>[ְ�mW1=��2�;� ��B=��Z�pN =�"`=!���D���6�;A,>� �pO�=�ސ<��%>�!�=�r1<��-:��@��1��6?��`����ǻ��=��y=͗�=��3�ъ�<��F>M��=+��=�(=ɁE<?pJ���<>�H; �&�xb�=�@^;1�w;���=i簻���<�@ͽ>#G���O=��2�&���f��=�����0.���S��g&���=M�= �=׬�=��'��F >���=��=~�'>����ȋf=(9��v)�=���=4���mӽ2G������s�;]�v=O��J�3�~�+;�9�=���=0�`�<��<�)�<9Z��QL&�!( �������м��=����"�=�������@C)����:xS�=�!�6~V= !�Є�=ģ�<�������y�=�N>y��;��=d�h����= ��=μ=.��=�J>�ʽ|�����ս��>�O񽦕���,F���׽�8>�yH���=RZ
������+>9�<�.:�)W=f��:�<B�k<DJ<�|���Lb���g<D)�=�������wm<��E;V����3<m/�2�i��@����A=[9=~ڷ���I=���/z=M��=�">��>/B�<N� �2y�,�F=��>�"�<ړ�;J�<V��=1!��@x�=���=v���QA�:�ċ<Szغ�%=�ؚ�<�=�@�<nC>jN��_������'K�� ��<��^=7�>����*4�=d�Լe�N�����1��=��z=�r"��#<"9�� ��,=y�<=��1�<����4�<Þ�=�E�=���<MN�����=__ ��=Bg������̑=���=��� > {żj핽�s��,q=@� ��p=�
��`#}=�����M�^�N=j�{��sH=�8ٽ�C�=&�=�"�;��_=��ͼ�%�c8 >E楼C
�=v��<��=�&s�6>J��;�Z�=����gk������*���ϳ�g����ٽ^� >߽ =�_<�@����uj��x�=����O{�=��{=��X�Y�oq�=�f�j�f����<'���)u=�s���/�u���0�,ߦ���=ڦ�gԯ�0��=n���̻��K=�9��,B����V��=����P�����=ZQ�<Zn��|=��۽hpн��@=�%�=LV����S������&���m�=/g�=h(�i����'���=c�T�<u=�H���A�=ڢ1�I����l�=�'��3�=����A=�WN>�~���ʞ��i>n�=>����6�=��>z�6=���;��=���<2���ℽ�Q�<�2<�7>���Y >Mo >��j<�ˊ=���=�h���>��P�g�)�=�R�=�D����=#BŽ"��=����"����<,���}�<�p> X!�ۼ��-���1��
��!���c�<D�,�H��=��<aX�������"=h��<Y>k��_;���
��<p�/>D��=n;4=�������� ��=�nݽ�oĽ� �=����:�=?r�=�[�=x'F>I?�=�������=3�;>x�
��=�)=�C5�`9=��V=J>��+���½�o㽼���q���d=O��;��~��\���)����<�u�.滸��=�(>K���R�=OF�;!�Ɵ̽T�H�l�Ҽ�(�����=o��=3��<������r�
>�����M�K�黹 ��g�ҽou>�/=������<Vڽ-l@=1~G>�"=*ݗ�o]t<Z��:|��<R��/�ռ_�>���=0��=�F<�rA=H}ǽ��=� >O��=�!a���.���)���p��=��=�'üN��=X���0���P�=�nڽͲ�<���~���һwb<��V>�Ⱥ=�GȽ�8�H��}�:>O�=���=���8v��=��;�����5=b��S�ٽ1C�=�����(>�����ÿ=ڲ�@�=���=`��O�=��>:ܼ;�V�=�Ŏ�:�������'����=���=�4@�`��=��=01��0> �A��?� Q��>�j3켳%{���9�m;�=�q4�Vs�="������ଽ�ɽO{��$s� "j�!|>�e��2��$�>�75> ��=�?�=�H�q�T�a�I�j�
�Ž��=�7�=`u)�,Q��z)=�����7=�g�=8�,>�
������kX=��
:Ȋ �u���:���2?�Ƒ=k�e=��=ӹj�Q�y=�?���u��X����F�m7�=#�߼� �փE>��=�q�=g��=�v���.�=S/Z=W<���;�=e�Yf�=-��=7w�<���o�*���⽝=�zw=L<�=\�$>՚�<�� <���;�$����=r<�P�=L�$� :��D��T%f����<UX�=�yU=h�+�S( >�8���P�=�v7��Zi�n#��G,<�w<䣖��ң��/̽ӥ�<����EF>ܽ>���=�ݚ=����������ɼ���=9�<�B>��"���ǻ�f;��<��w��;mE���t=� %=���P�
���<��1��ǟ��Ih�Y� >���=czA>N��Ǹ���} �N~�=��Խ{�=���=��P�`���� �B=[v=�B�<X#��[<��h����=E=*O<����Y�ͽj�v=�ܽ{`�<�=��<��d�=t��=�.>Ի��B;ip[���w�|�v=���=xK��&/���>�� <EƘ����7���'j��,�ؽ���=�U����h=�Q>������ ��=Y�����D����F��: �<U�Z=_|ɼP7��x�>+T =���=��>���= r
>�K�5��� T�;�(�=~>�X��5��=M&�<�<>]�"<�6O=Xa�� �2�����'5
�����߼��潞��=�>��=F1̼�2V��锽 ��?'w�T��=8�;P^�</��=e�k��>V����s+�^��<���<�� �]lɽ�$��b.a<<� �l��7\����=�D��n&�(�=y�p<(&]=� �=u<<D����H��9���ռX>�= ��;ÓK<ƙ�^,�=���=8,�=F�����.=�*
��6��m=x��k�I���;��=�>�<$&R>tP�=e��;�@A=)#>�B�< ��3�<������>N>��C=k���½�����s���u���<�/��2�<�*�=mb>�꒼eYE=�ǩ��V�愗�����Ƽ���=��нDfZ���g=K�;=�̃:����cr>�n���{�<u���?q>��=� >� e=}��=Z��<�5Q��hӽ�Q�<zz�YՒ<f߽lu�=���;L5�=�@F>��=@��=�.S��3w�i^h�!Dɽ'�>�'�w�L=Z�=KRV������ �=$�=��>�C.>M2=�h������=�%�9��=��Ⱥ����|!�#0~=�E*��h�����B��BY=����Zz���2=2h<>qӾ='<��f����ٽ�&�=��B��~Ļ�����<�����=�D�=�� >��+>q�_=�D߽/F��^A =$�ʽ� �="��Κ0�'�F=`�=�{����+�ڢ�<˙� ">oH���G=�&c=K�A����� =�������]� � �"B����l>������=�R��Q�to��]⽈:y�1�3<8�'�寘= -�<�>A�7���>���P n=�e���8;��~��>����[�w=�`,<��n�7�p=�=ܽLa|�E}E=���=tZ���6ɼ2ӽ� >�����K��HOQ��V <j�-=��x=U)�:�� �-����O�=*�8��۽���D�<t�=v ���&<Ox(�,^�=�Q�9��=:�C=�G7>�t%=�̌��}���4��^d�=���<�H>���J/� �9�h�<;��<�=�^]���=|��<<ֱ�Mv�<�#F�R�=N�i��]��)��W�=�s�<(Q�= ��=���yj�<.���3� = �H=���>�6=��S�xý2��=��:�Ͼ�b<=�K]>�s����5�ܺʼ#�<���c-�=2D>�"�=1;��>�ZR=z&=���O�K��vj�Ab������][|�B�c��!c��R�=�m���A�=?�����<�^>\޻�פ�=�l ���?����<�z=��;qy.<[�>�c7��> !>�6��7� �O�>�\��S��������0�'=Z��<�������4r�<|"�=Ǣ�On���D���1�ׄ&=�p">8ړ= ���#��U6=pE���t��G=�3��t:(+>��8=�\���&Խ̈���'�ǧ���
�xH�������G���/>����H��*�a�0����<���=�Z�< �-��E.��e+�sUG�9d�;�)�=�6h=7�#<Η�<����xͼ��ӓ=osս4G�;�b��w�彑D>qʤ�x�J:�8�Oχ;�eֽD�}<(��=��>�b7=Lo�=��=�^>hI)�3w�=UH1>8M�=wH��PTM�����%���xJ=-<>eV�<��<1ĝ���������P��k'4��o�=<����、�o= ʽ����%��H �=�>XR�=���(���?oW=G�;
��=�%�<�{��=p=U���pݭ��5`=�æ�#�==ݔ:RY����=� %��iG���˼РY�̸:>>f�����^�q��%ý�h��^� �����^=X��=�1@>j3F=��=羾����=)��=ݒ����|�=bƽtֻ�_ ��"+�=b�:[Z��n�ؽ��V<��=}{�=�N
���<��=4o۽CҽB���Uqټ,�9=������'�����dk0= �h=0��=R�=��>S��=Z�9>3μ I����$=���=�Q}<@b��zU>)C>��=N�t��眽���=zh=���/��t�D>��8>�
�=U�N��c��"�D⻽�"<n\p=��2>O
��c�=���=�+���V@� By�ۺ0=&��=���e�>#W��H�7���轆c�=�u:<,�=���B��LL�= 蔼=$F��(>{~5�G�0>_0ҼR�<��LB� ҽ�Out<q�;P~�m)��y6�=&.�=�������_=��p����=�p��ڲ�:�<>Yij<�5�VP����|=�e.=��<�ٝ���K��8>P���Iw��[��ӥ<�<1>Wm�<Eр�Mb==tb1�C�
>Rz��ݙ��&��쇽�Խ��!�4# � �->s�A�e�ʽ����GC�ӳ=��h=-P>�J�Պ>r�v< U,>�*��J��=�\�g�>�B
��r��$� >"���> �s��̶�=p�=�"�=}ƕ�܊�;�A�=���=�߇�̿��zH˽�������<�[�=���=_蚽c����k�=m���Ȑ=�K�<�����)u=�&=h��=������6�;�8=�^�<&��=У)<zR��ń�=y5ν�V�=�k�;�F�=6c�=�Ȗ���=6# �S�ṁ��=Pt�=��Ǽ�ܽNWƽ)��=_8���p��=)�
<�X��S�&=������=}�=A���}J�Dv;���=GK�=���P�=�y
���߽�F>yv�=��=1og= ��<iR'��B��������_�ҽ��>ý[�&�$� >拽��ɽ�`�=z&�< 3�h۽%rI=T��=���;��ּQ�G�߂=�!���n=;�=~펽�I�=c�W=��.�Yj`<�->�ʙ���=!�=38���ǁ=|��gI�X%ջ (�����*%=�ƽ�E�=�ޫ=���=��B���8���C=@�ʼ�ۖ=gD��IS
=�~�<ⷅ�H!<��0��i�=[�=���=�ޗ����<H��J޺=������
=�ݜ�Ͷt=δ{=E ��:=�| �^z�� !�=�S�=��<g�{=/�P<���ߊ"���=%�=,*�=ʽ�Z��A����\ֽ�\��(����;4���;� ���==V"N��}=�l����R=����<ҽ�(=�6=b�������=
��=�J�����<j㸽J �I�>U=��>����;�����b)�����
�� X�=�A?=�Zp��At<X�'<+��=ɢ�8�e�Ƽ��D���<db=���rſ;a��=Q:��dU <XDz�>S���j����=�m>e�M=�n��Ob=����Q =}���/ݑ<�p>�\�;f�Ӽv��=m�"���H��=�"���5L���=������L1��=>ž����=��� =%fJ�G��=��z����D)�N�)�:D=h� =�?u�a(�����:O����=-�I=yU���
>Sf�����=9,O=N;h����=ಁ< τ� Y>r�%��, >��(=�����#�}y =�̭�_�<�<>=\ �= Z�=j��=��=f��<�yJ=���<�--�v�>��
<�u�=5��=(c�=�TM>8;�;�N��^��5>*�=��½p̺��=�5T�̑"����=Ҡ=s�=���
�p�b&>�� �2����t=MN���[=g"O�G�<��>X������=:# >3wh=7�>U�q=���fF���+ >���=��-=o��-
��R=r�=���>g�>3>�-L��A9=��{�����ZX%=˂�1+X=]B��$�=#=�3�<"9!���(��;�����:{ZB�=��=a�����=��=��d)��dF<fkM=�;R��U��� $ ��#�= ,%����=^=��+#�X��<KV�ͺ*�e콧>Up��R����.=K2��
4 =�.��J��� ":<��Q�� �3��^ѽ=2�����<�d�<�D�=)w��"�y+'>as�=�>�=W?%=�Zǽt ׽:�";$��#$����=�J�=[����9�hj�=c��=v>5;z <hh�<��ܻ���<T��=��D=��<u�>������=%�k���=:��=�,g�v��΀�=0�a<�k1>V��=Fj�= \<|��塼 ��=ļ��7�<j1!�i幽�//��v(=�9���»{3��yVȽ����{>�L�������ɼ�;�='��<�����P=���<l=UQ�<p��"H�<�/C>�Ԙ=�k!>� �=i�=�Y���Y�=�μ��K=#���O��R�⯡<�kM����=�����>D='�H~���ؼ8 z�����T.�u��=��e��,k��p��=8��^� >Q��<r��O3�=��#H>UA����:�9�=G>R�=3��h�L��>sͽ�b˽%�:=���;�=���=u���1[<
����fH=�&��j׽��B���B�}������pY��:߽��y�&$>�N2<��%>���=f�->f?>���;��=s�̽ɛ}= �s=��|=Yi�<�2�=�災��<���=�T�;��Y��˕�����#��=Q���G>J)k�����y�=!]�= ج�Tӎ���=&WU���q�b����>b�����<@^�<�M(��Ņ=+��<� f<B8�=WF>��=�1��ť= ���>=��<�hS> �=呴��w�<�\�<�g�;��*>AԼ�}h=��P=�Dݽ�[a<���f>@�s=�񍽹]����n��=�,��d�(��`�v.7>bZ��� �����Kd<� �<r�����h=�B�M1l=�'z<�@�=V�H�����`������=ѩ�=�+4�_����mB>����st>Cx>ɤ�c�(�Q|�=B��=$�>� =��ؽS��=��=Լ7���Q�����v�i���=�������~�=;=��3>Z �Db��֣�ц>H���<�̼�t��ů=����0���ҽ��<�P�=* ���U�=���=�|�S��=RR��=>�ۆ=4Pd���L�PX�=�,>��n��A�=҂>��='y��s���W�=�ߟ�瀑��ӂ<5�=�"o<�%l=͝r��>m-���\�=ۧ-�����l�9q�ݡ�J����qܽ��;E~>��g<g�]� ~����= E����;�"A��_�=n>�E=E��ϟN<�=<[�����i=�I>�x�=2L�;E��=�����Y�Ƃ��j��=��.��c��W�=�1�;�� ��"<�l���Ƞ=�ઽ�0!��(ٽCӾ=��ü�;�s_�h����!^=���=��=��<0ۛ�TE���h"<{��=��b<P�۸S�6=��=*xd�J�<��<�>N�J�^'��@�"����=��ܼ��2��;�=X=%ZF��`(�P g<)��;�O�<l�=p����<��B>O�b=@*>җ��j��=H]�=V�ٽL#5���b����;���<@���Q����T�C��K> e>:} �7w�{��=��D7�J�=>Q>x��GgI���<8�����l=0����=�Ei=�`���T;>O����L�=sV� �$>�f�=��:������Yo=�X�=O��;�����V4>� �=2��=�_�=0ѽ�U��{�����9>y\�=�Z�K���Uɴ�Y��=w3�!h�ໂ<���<����#��U;�C�ؽ��1>�S��A�޺VH��}7=�^3� �ɽq"�;͙ =�L�<3" =S|�=��=����G��=������5ݽ@��=v�1=?�Ž�zz=���;��{��)Y<=[V=Em���P-�(�J=�&L�a��=��<�$;d����}X�����! ���=k��=���=N�=�Wǽ�r�=>>�W=g���Q'=]ᏽno<B�گ�<ٌJ>�,����j�H����:=('�<N4q<Nx��ͽ8`���i��6�zh��Zq��{H�%r�rc.�`L\���<����4��w�(��`�=�w����<�0ɺ
:�f��u����=�R��,&�U�o�� }<����[�/���C��<=:ҥ=Ң3>vMU�@=���b�k�C>�s ��I"<�o��T��\t�= ��=q9>(<�==+R
�6�=�G;��>3�_��=�v�(��p|�=������N�~�L<2s ��0�=t�=��q�h8����;��hu�*���Xp�=%��:z��h����w;mB1�y|�=�������<�|$<*�Q��Bu=1.���]<�^���f=ʕ�� �=�b�=T��=��@<(� ���D=Mv;��>�O=T��<��=Q�=�Y.���(>�~��g�=� ����&߽~܆�f�=Z�>+�=�T��N }=�j�`��=q��<X腽U>�ʰ,><N8=6�����ܻ%���i��=w=W큻�]=oPd�$&��Ŧ1=� =�5����6�<D%���.�tUa����v! >?"7�z�T�=���Y�� ���f^,=���=��(�y=�-;�r��;숅�1�=���I+ν6p;��^��.���-��7����a@�=V��=���=��=����X�<=��3=������`>�����=͆-� ��<�C>U��=늸;ap-�m���� � = �=��>��>�W�B�����:�;�ހ=-�9��Cнh����8>*��h-�=�K���u=��E�t���\=�h;ߘ�;��>�+=ϝ!� �?>V����=l�1�1�l�vZ�b@�=�<=�X�=];�=���<OT*��t����.>bF=��Yxe�A�c��~(>6$�=��#>JG�:Շ��ð��[c�ی�=��׽��A=�N!�O?<�@���������4ȯ�r��=�Y���wϻ�V�=��3=D�ƻyi��D=����d�a��=F��<����{>��=
0�y�:�F��������׽��ؽɣ�={�⼧3�=vˠ=J6��d�ڪ�<��^��)���:>���=���=��=K3����=��=�d���BǽEc��P�=9��=%���^���M��H�=2��=):1���f=�r6>�{�n5�<3 �=���=F�����=�!�n���G���dt��W���x�<��;C��<�9!=�>��Ͻ��k=-� �;%�=�>�ཽO�4>U�(����c�=��E= w>�"e;0k�=�� ;ē�=l=�)�=J^�=׃��=�bV<P�b� y�􏐻���=w�Q���<�����B ���f�L�>��ֽ�i��ĭ =�'2<|��=U���Õ<�T>�3M���>�@�=�̈�������� �{���=9м�*>sǼ:'2���y=;��M��=橁=p������=���Z(��M�=��νxl�u�=��;�yV�386���=��L=<tC���=~"<�݅=OҼ8�>�� k����Ȗӻ,��=\����V=I|�<u���3��N�1���">������F>X���8>�v�<:l�=5�d=�����>ڃ�=�����d�� ��<��O=��f=�gʽ.u���D:>-�(�Kv>~��<���=u^����=���l�l�����&�=�a9��=;�v����y��=�=�pҼ�� =`# ��>��s>(��J
>�}<�_�=)`3�����!���k4&>�>�=�2�=0�ټϔ>�=�O ���>���=¦&=(��Ӝ�=k���] =W�~=s`,���@�\�Ža�ɽhF�= *f=14���ͺ,�4�U > &=a���`ƽJ���$��@��<Rf+>0(E='HT���=� ���E>�]k�Q!�=� �:�5�<XI>����L�"�=N.��Bs=����p��k���D;D<���l� ��݋=�C���2=
s����c�\�=`�'>7�<�}��]4Q��)��������7^>����/>T/A={�ǽ0o<8z�=h۽y�U>��=�J��RO�=��= ������{�\�D�o=[�����p>2�=ޢ�=+�����=�4\���!� �����'<��c:�x^�@�5��>\ʽNH{���S��Rٺ�o~;˝�=2���r�=Y>�� ` �.� >�8w����=�F���>���=�:�8=�z�G`C����<�ɭ=ޢ�}>����=�dk<���<�4����)<@Q�� ٳ=��=S�,�dK<~���Z⻋9��S�#���=��S��p�=�;+�l���!��=2нY��wI���ͽ�=�r=�lk>�A�<h�=�l�<ͬ=>*�,���=�s˽I�����D9� =D)�<����o�M��˽�����t�Q�O �����4�<��7=1� >m�=+U,=.��=<�+��L==�W��8ع��;=(N}���>��u��Կ���ӽ!�=��7��F�;��;�r!���r=Պ=�6l���h����„(�I�H>wy�=����� ����=�_>�Q�=UА���=]����*>�=7��+=.��=s'�=��{<�bƼ��>�<��0 �m�<_�[<cg�=Zݼ,��<->=��=�'���V;7 �<7�)<q����j�l=A�P<q�[=�Z
>�2@=�1�=RD�=S��;����J�U=p��yt�������S�<�s�=3����� Ӗ��.�9*;�GV�1�=
�߼�ּ��H��: ��u��0q�<N->I� ;.=�qͽ �����<?���5Ļ�8��#��:��=������ >S��T:�<�*���$=��@<2�޽؀��?���'S�i�={=q=��0=�kc��E�,�r<|v�<6T�P�@>�/�<�>�x����=�������]>i<Ϙ���=� ���i���n�=���<��<� >�t�=��ϼ��%�d�=q������<����H)a��> I�T��=�(4��^ν��R����Dw�������=��A��(>��7<���=�M&�<�G��Ov�=��u�̜=7��c�<�9��_b3>��7��r�=��Լ��2>����V�!>���=~_t���1>�m
;V��V��<�d������<B�޽���=����ذ���k�<VA <�Y"�jo�=(�=�*�=�+T=�N\;x�=�}���-=��b=M���:3��h?�߶1<���<���<%.=�=��=<1I�C��>��(Qּ���=]�[=n��������1a��LT��1�=�/�����)@��m��<�&��n�=ݭf�7�4=�,b=��#�_l='+>,7(=� �=��`=�D�d�L=j����1��S�׽� �=ق��"��#��=Z������=�������ܘ��+=�<��=L"=���<���B�<�H�<�&=!(��#K=�1��f�$<��e�K�V�.=���=3¼tx���>�7H����!��������@ <����v�>�+� fݽa垼��=#P�Rr�<�M&�h��������l���=UBb�a��=��=��.�(�w���P<iO?=CYV<�ݬ�V��< �޼�>��ɽ���;�>P�齖d#�� ��G���2�4�/�¼Y�=O,ۺU>��`罁�<��<Ir��UEw����=aV>A ��r�=����`�!����fؽb�K�p�U>�>��,m8X�>)�����=��v=�5<�w�<���t�=ҏ�✼X�����]=�M[�4�ս�"彠�v��n������e@�ߣ��N>N��� �L�+rS� ��;0�����q��S����Hk、�(���6���'=�3�<4���M��-�=�H>�o�`�>�M�<���~q��Eʌ=�e����ٽM� >���=�^.�5/�=�=Ȼ~~�= ��=3�K=c'@:������=�<�<I�>�;��Y��=���<+��<I��<��6�S�;8弼�mؽ�>=Pw�<\W���R�=;—��v��}� ���ɼ^=��$�7
�=�� >֕��㒽���=w�T�e��=P;��qҽ)v��ǘ ={Y=W�9��|��e\��� ;���?Y�=Z�}= T��XjټA�.=�I�=j�=`��=���� >.�x��ٙ=�b�=���`�9�D�>��K>NU5����=ZA �}&i���T�Ϗ�=�%N�7#C>{X�=�@�&�O=&�<Ⱦ5>q޺����T\=�� ��DM�D��(>ƞ=]����;=V�,> ����н�xĽ��m��1������߮���F4<��3���������D�A����<�3뽌 >���=� ֽc��&�;D�G��L>��E=�� �������.<$5�=>ٰ=��ݽۯ����ռ%�$>[��=�g�8�ӈ=����1�RM�y0�<>��;�r9��� >{e}<#��@�;���&87�\A���8>��[>�l�F2�=l�ɽҼ@��;�.Ku�����ڈ���=ȽT� =+�/>?E��GU^�y���e->���=�q�<��'��<7<||G�iӄ�՞���ż�=�b����ļOn�X�~=� G����K�1�+�>�0=�M=��=�[Z>C�=8��U��=��[o�&�@=���=]<>?ھ��O��Ɏ�<5!������U#�,�g=�f~<�h�<���������<o02����=~�->J�im��4"
�ݗ�+ �����=�9j����{�z���=�nF�U".<qa�=��=�t3=���,w>b��ZC�=�~�=:��ƻ =��O=�K��\�=Y���e>&�*� Ӗ�4p彥��� b4�Wk<$D��!X��ж�;���]6�c��� Q�=��O=��9��4�<=���A#=��(��H��Mz�4y���e��
ǽi�=6S�Cüs�4<���=��I<�F�mE1���V;�� �՚�������Wf>�W���;����)�k<h,�JCҽ��3���>�⭽���o�;=(��=��{=# ��""=�$-�^�-�HU��0H��<�ͽw
=�z���q�D.�<���#G��;�a=/>��~�Zw���N����A=��x=,����*P���~ŽTK���W=���=F��9��b<��=v�*<IJ=��%<� ���/����=�>ý#�$�>3�=d{>�J��!Ys� x8�37)>c<����=A,˽j�y#=���:Ģ�o��$�c����t�n=2 �=~r��7ɼqX���W@��fp<��<�=p�νC86<х��?�����=���=�=ߊ���T|�!�7>��\<u��=���0>�q�N�����Z<�*O=���=�xI�A�5���n����=�#�=�O#��2�=�7��EQ��T#<�T�w��a1���� >R"�<��<���=�x��� �1��=������!ǎ=d�<�&%=����˻���!�i���p��:g�[�ݙ��g�Խ��ʽ.�b<����\�7=H&�ش����<w�=}<n��)�i�u<�_��dϕ���D�}ܒ=kV˻�g<�6>���=(�O�.!=)x��.��+�=8�-����=k�a=۔�<�|����=�3�;F��=y��v7潾6>{� >��0> ��nJ�=��=d��ls%���%=�ܺ=�u��a&�=�8�=�����x&<�*�=Ӡ����]=E����K�=D4�<�*�z�=Q�=Å߽�h�=P���s:�껙��F\=���=8z˽���3Lv=�,A=���:'!K>�px<�VW�/��a���gvڼ�[����ͽl�ܻ0؉�%d">�Ѡ=ٵ�=9g<����������=�|I>�F�R�M�n<1�1es�&*�="�F����;j�F=�O >�� ��z���Q =���=Z��<��T�u{;y�-���l=t��=cc�:��<ٜJ��<���̽)G��ݘڽ&�=�i�������_=�M)�ӑ齴�=!~�9K�=:Օ��K��W�+TF<.Q>p`P=���=W�>���<�܀��-�<�( >�[8>cxػn@��Y5��ڨl=��޽ 3�;�*o:�a�7|�����<C:���&����=.�=������X=�q���(���;�K�;'�Q��3��U`�<8����-�=�}�=$ю�A9^=���; B�<e3J='K_��>u����~�a����f���> n=�{�<���;�Y��%��<R
r�d��=㒎<�ؒ:��8=��V�5����x���j<�Pb�n����=�R��RfA����Xu�X&�=].��ެ=�e��Q=�U�=yTϼ�����ҽ�J>0�>E�������=G���P�#<K��)�=�Ь=)�v=�ӭ�%�k���}�~��֥&�ˎ =w�M=g >��><��?=�g�=�B�=�p�
>b��F>�㵼�C�uh�=����]J=��ɽИK>�.�=2唼�C\�Ի>�f�;�ò���O=>C&>6,�<� ����%���׼|�X��� >�t.=ir�;m���T��<�X=��<�,�������<>��>u2����(>O�=k��1`C=����o"3<p�<JsK<���=�B � LS�����? 5��L%���軣��<b�<��=L��jί����=���<K���^�G>��>��O,�+��=��Q=�2�<g�,>����U=QC8=�U2=����<:�ᘀ�7f����Q9�=D,���^�=c"==G� �B
>�C�K,=�>(9I�kb[��>iJ�<�z>g�=�Zo���-� �=�H>��>���=���=0r<C����l���*�_�׼�������= ��=&ף<%���G��<o�����>�<�=U� =�����O@=_7�oR��> �\=si>��EZ���4 >�sv=�8�=��%�֜���O���}�;�����&�P�f�W�u�?T�=q��=[��������'>��{<�M<��1�=1@�<@�<����=Wx��y�<��<N��=��/=k� =��4=0���C����f�R��9cX=�Y�<܎���4�M;��jm=�"�=N�=f2�����<�4�h �����"}�yb6���8����������w��� >����З=�1����=qp�=Ѯ!�q�;����m=���=��b=�%�=�'�<7�4>GA������ԇ��������=;�(>^�==Hd�A!d==�^<s���1=���=R��Kd�<*��;���� �(������w��>5�;d�̽ʑ�e�v=z}���L�<�=�2�<ܛ*����=Z��=��=*��]C������u�=�s=;�< ����=�v۽6�Ͻld���;����A�%֮=)6=�I����
н�@��ڋY=)��e���E�@��;0f������"���$/��<��'����=�PF�˧�=� ���v�"�O�N�5���=�R��~����>��>����Z=�j��Ɋ�uꊽ"=��=^�)=n���'5��ׄ=�N=����ƪ=ݷ��8��V5K���±�=1 >P�˽|�R�[�\�������Q��톽YX���3>^`���.&=��.���?���;0�>�d>;'�=��= =�ڏ;I\=�R=�G/>����jl#�Y�!���������;�ʽ�=��\�c��=��>���I� >��>����*A�;H�ƻ֔0> L>�׆��I�my��|x���–��"��xOw=�ݙ=�;�:С=;�x�|����m7���� �1<�DŽ�O5�=Fa=������f=�8������F�(*��O�>�,��g� =���!���c��=��J��ݔ=��<b�S=�h�<J�����<;�6��+�����=��C>N�<��蹽�i9�|��D�U:c��5��FS�=庸�ӄE��
=�x>�!F>r�v=�N >u�n���=�#�=��<}P����=ݍ(>��o<�,�<����s�0=
��<��< ��a�<4����Y���� >'Mʽ���=e��=ɓG;w7����=<�����*��@��e�<L}�<\GܼUJ">J�������<M���ɛ��k>9�.=R;>WY�=k�l<[��=m~�=ሽ���8"=�Z%=�w�<��)<�fz= ���4�=���������#<��м #>K#=��ּ�Y=f���F �<�E���g��u�:�^ :����G�K�)��=��A=� �(��=�A����*�g�W@�<��5=��'�_=l��=JG�=ǖ&=�|� ��=N ӼoCM=�=b���>���=��#<�|8>�5>>��ͽ��1>�=Dd�=B��mm�r%�5�!�_�$���>�<����;=��T=�7=�(
>q�<�ý���=p�;�������;�=�m�t��<�Y��
�<��d<{��ጨ��A޽Vrh���-�]�H����c�H���3>(��=��@� ����� >)ZԽ�=��ާ_��� >`O>D��=k����p��!���c'�"����;���t==����u˽� ��Ō<���=���=�� �:�ɽd�#��Mf=�d5�W̠�V�=>�>�q�;�٣�FR��c�����<�'�<��=��E�����Dؒ��)̽cb�=�=�P�0�ᔕ��;�=t>=�Z�=\��;�y==���������掽��x@�=='�>����$�(�VA=�4���M=u4)��{c=7^>��S<���v,��BPӼWr>��ż��h=j���'���[���<~��F�=�%��r��硣=�@�=+ͽ�2���ו�� ��z��n�Ҽ1�k�f�޽��߼r2%>�F�=le廎<��\$�g��=���=f���!ѽ��;Ad��?��=���;Ot$�0,< �P=�b��\{��U���V=�W.=�c�]鼲B=�cm� �2=:_��J{����Zս��Ҽ�>�\�;JAU=G4>.�l=���<Q����h�˓ >ڂ�= �>{^�=��ýk��<m,>;7˽��}<�7<Q㰽Ƿ�=����f=���=\<����=2d��>�{Ľ�P�<���*E(�L��=Zm�<� ����<¾;>^��=u�#="�=ʼ�=��=We=�Y�:+]�=q��=�=�=e_R��b������� =�p%=^܊�)��=-��o�����D�OR�=��k=�>3���4=&}�<x��T���=.I�|��=+4��uü�)v��F>�9�̈�=v'=�ve=Ҿ�<�o׽7��=�� <�����r�������<pr=�B >�1�=�pv�H�>�����H༼�S>ô�=��=w#=�0�<��>�g�;�p!�?��=L������<A)<�͋=�g�<��s�R�� s�x�<�x��ٟ����<��XZ>1�;��H4��T=/AG�;KK��9>?�C>��:>�?>ܰq<�&�=��=w��=H��=���=��=�%����<�=�������=�P>�����ֽ�j�=1��i�=��>���fk��^'�=1�(�@��C��<w�2��H�=���;8����1�<"�νQ�F<�b����ݽ���>��<y��'>�A�,��a�7�@�>y&���> ��)=�{�=��=0)>Bx'=���\ۺ=+��<i��<��q��%��y�<svi���F�>b��_�D�F�~�
���7>���=���=+#��F��u�;�!�=�u=�Ƽ8�>�>\]>������M>��<r�=���*�������!>�������Jn��J<��ڽ�<�!��*�p�<��=��Q�?�>��A�9�B� {B�� G������=� ��q
v=(#���Q�=�^��=A�fˆ��.��9�`��W'=$VC=�U�N(��m@<�$�=h�4>�e==�>�#�<�J�=�M�=���=G��9� ���>�����e�5������
>:����>|�>��<�f�_�I>�A<#�l�j��� �=�4�=~n�=A4�=���W�=��>�b�y=�=0c�=2uG��j;�@�>��P��$���^4= �����=��,������E�=t�>j��=B�ĽQ�h=�y>��[��6>=민��:=���=d��E�'>��@�H�=Jτ����= H���=�:%���ٽ�( >�*>���2��=dW=�N�w�<?����d=�M>;�=(aN>v��=�6�l2_��<=��=t��=KG�� ���#PG�UJ��i�<<ϵ=\ �<��<��l=����*M=��4;|n�=w1
<����k1��
L<N��=.�����<vD<[�%<k��=K�@�U�q�`��=\ټ���|X�=��H��H�<>
�;�!�=�J���=�<H��;��%=�?=��&�k���&���YO�<\�S>{Yĺ��=��m>���:�1����=ߏ �z��� �P=��v����<�=*k��k��0���~թ;e�}=dx�:w�=�����ݜ=�#=��T=i1�=�)>��=����� ^=d2�<(���+��=�����;tq�=��}��ǣ���;Wi��Z���� ���>���=�{�<W2�=�ɛ�� > ^>�_���=Y�ڽT7�o��=�Z�k<���]>�]�=��A>H�� Eӹ<Xu��2s����=S2<2{����ֽ�*��=$���Q=�;���6>s�Լ�z��c����4�����i��'�
>���c�=9ν��=Yu=�ս�z�� �)������H=C�K��ѥ=�%�ٗ½��F��:L>���J�=�ʸ<Hz6<Ɗ=��.���j=��P��� �����Г�$(>��`=e��qP=��'��֮=�I}��q����J���;mL<�����=A =P/�kf"<Q�;{��w�2;0E�=ڔ�=$�>^m=�Ͻ�l�=�a<��=����R�����7<n� <��b�w��=$7%>��=m�=�jK�8��=��R>�U�=������;2<���=�h����,������<��>�ŵ� DN=cb��*$>p���� .<ή+������J1>#��=��'>��ļ���#���V>�f𽲚�=�*�=MN{�U�>I5�<ћ5=xd�(�V=i��=k]>b�ɽ�$=�����8>h����=hFռ�+,��4�<��l=��ͽg���/��/7W�jw>^�<�;��d='U�n��6��=_�:=f�=��l<�7強��=�$�ˊ�<M!>�_���4��R3�֙ >�+Z<�#<G���2P�<�)��TR�=p$N=��8��l�=e�`�x�:=��w1��� S=�s�<�[�<&�=4;����=v޻��U;�� ����=��.����<k2>0�;Cb��'x��/�������ɪ<3�h�M�x�6�4�����_t(>K�$>������=��=3�<���`>�=�c��!�>>�x#�ü2>Bظ�*Ԓ�L��<�5���E�l��=�=�����a����M���-ګ=m�=�8'>�z@;5
%=ז ��K/��GV��S�<Q�=iC�-ؑ=����F�.= ��<����ۨ,���&>��T�� �<Kսz��=+�G>j*�<�*�P�P���ǐ>�2�<Q�\�č��c;�<��G< ��|P�;��^�����=��=x���_��N��=%�>�����d=�+Խ9����HG��NA>�Ѽǖa�v�!��џ�y =# J=��2= 65>�)J���Y> >@�o<<�{<���;�?�=������>Y��;�VU=�b ���ӽ,���~���%�`=&<=K��=F`I=W`{��Q!��П<7A�����$�$>�'k<���^�;>ޢ5�*�=��3=�6��T�.>`s��Ϊ��=���=��`���=�~�=_B =�O�=l��<��=�HY����<������N� ���,B>e9��wx�=Z�,=#��ࡽ�� > �%��W�<�󝽒]�=��g=�<��$�=F<[̽�6��i����4=�>�����C�X�>� >$Lk����=���,ǽ�I�=��ý>�>>ȷ�+�b>��7����<~&��[���g>��=�6�=�!�=ս7��=_?I���2;ǗE�w��,�=Xy���K��= �h=�+�=D+S>F��� K�=[ �Q(��έ��i�=;���^F>�?���/;� ;j�/������(Ճ�B��=Jʼ<���,[>,��=�Ľt�������6�<p e���G��>�<wg�=|q4>������;=�O>I&�+>�t� �!����;��$=��P>c��=��%��.�=�s�=,Og=?�9=�S�=E��߰�<1M���YP�!�����d��sؼY'��Z\'�,}�=��������R��HD=Η&>�]��Ӏ\:�!�=�󅽐�'��?��I(">y�>i$�=�S7�9�6=O5�=�������ص9�e=��=�=ʛ6>�-U=L��=Z!����=}S��rs޽.� =7��=@A�<��:>��½!t�<�OV��>L��= �=@k��ů�l9���R>���=*� >� >�?�=�0 �BS��*hս���)[!>ğ=w'�=�6==�l�=��>�O�9��f�
� o=g��=K�b������_�=������U>ȸ��J$������ >η ��E�=�Q�=�/#��R�=v��=�(�� �<*�V���=^���e��ɿ=�y�p��=������4��I�6>���.�� >%��=��>+H`����=�[��@މ=�d��ǫA=�y���ͤ;[���߫>pn�\)<�@_�+2�=K^�LIh��hS<Z8=ʆb�푆=��N�7�.;f_�=�g�<@���\Ƽ�W0�
>��:�.ܝ�0�|=e�꼒�=�Y>��<<)�=V ޽Sv<���Ԧ�<�M=�~��y�=�E�ꔽT��=��P=�����wx�42�=<��=l�R�tH�=��8=2vQ�4�b��=�|(��E>Hҁ=5E�3�>�h�=�j4=pu��g'�t�@=]1����<Ͷ�@����>j�����<\� ����<9�Q=)\1>H� �~�o=#��=u����Z�;>j2=�������;��c=��=�`>���^��ȥ/��c1=a.��<�������������<��f=k� ��p0=y�J<�R>>:چ���B=��=B)=ł��> >s2c=#I�=���=_A � �C���<= ���I> ����&����=���6EP����$���7=�ɥ�xq��.��=��<=y�[�����r=�M���{��a��= =���i�<^�껢 >� ӽ`x���R<��!>S�<�Գ=��:>��=���<�_�=X>U�j�����h���ۘ<L����>��q���Y<�]8�������=Ȝ#��������: >��J=����x�=r��یz=?�L<5�b=�(�X��=���=P�#=��t=�h�<!���e�=��=m��=������YL�=ZJ2�4�=�;>^v{��Lü�:�5�)>1什1-=>�=���<�A��M�>�8~���=��Խ�.���p����=I5�=�]�l�>TH3���J�"&���aO=@ၽò*���=��8=��=Ar�m��< ���X��<
��=��:>+��=y�νI�,��GǼ���ZSۻ�����
����=Oi"���ֻ�$X�#_�=����~������-x^=sʿ<���r{�"��=� >�A �Wy��q=�4���Z=�H�<:�=J�ܽ�gƽy�x:㘀�׆�<u��K0��Gm�[�O���+=�)>M2a���>�F;�q���K�(>�a<��|>f�3!j��?��̿>/�������>N">�� >�I�:>"�o��:�(���,����=�ˮ=�̣��V����>�� �����lP��&�)>h;�<���z>�=�*�=������彶C�<�T>�8>��3>C�^�����U�=v�=�u_=q����H>5�=��d���,���:<���i`ܼ
K��1�=� �X��=t��k->��g�s�ȼ6�k=�� >i�w��Q�v�=A�n=ffV�5�e=�V(�� >w��=���pĽ8�{=��<,;M=�~r��\�=������=*��=�}w=�?'=+�=�x�<-��=�i�=n%�==�8��G�=MiȻ���ԥ�=`�k�Wv��P�=�Q���NP=&��=,�ۼ������0Ƕ=7�ȼN�⽧h��vG�����7̓=gb�=o>��.;�!��:�勽����{�-4�={�q<Pm����#>���=G_;����i�u�`j�=�j�`��n�=�V.���;�b�<>?���D8>F�<�E.>�D
����������/'�=�ڤ�/?ɽ螖=I����=����<��E=@�>�F�=����於��=Ua�=���=.c;������=���|q+�lJ���=�9�=z]=v�>� >52�;�i��pβ=���=�y��_�= =�<����+�=���6�=՝_<��>�D�=[:=.����>������[�=�����c��{>������-�y!*��:T�=$>[�>� >_Sァ6F��;(=�e&>�.%>j�G�ұ�qL�<[V�=~b��e��=��&=����e5��xt�=޸l=�����k=:3=<�=��>�ý~o�� ������<9Yp=�����=��2��k=�>m�=]�;�sG��4�<tD ��U�<����ú|������Ғ��]sG���>���}{;=�����Q>��E>½3�2<� �=�j�<=�8�^��=y=�5=���#�߼p �p��<���+�ݼ<@��;���=��/��?�=k�,��&=P�ƽ ^;s=�:��{�_ >6�a8�.�^\�<v<_ ���J�<��<��q�$���M�=nۆ=�˽&$�;= Z�4q >��<=d����=k(�P�#>���=�ݱ���%>i�=��7���t�5 B�s�>΅��� ���T�=�O�=�>���`�=� ���մ<�m���X�=�N=ý�=�p��-�>V��;wy�=�)p�B���^�}<q�/�W*�=F��=��=��=��:�S@���0�/��=�@>6Jy=LH0>�����'���:��:>��=�2�=)s�=&��=nxe��?<�t�� ��= ʥ��@�<���=��Ѽ8�=L��؆�;����;����<���=n��=���� ��=xx�FWY��=�m=��W�X@�<`!
�QR�=_�=o.�:��0J���R���}=?� <�*P�2� ���z=I.�<�U��d�<��2���V�h�:&�;�V�=�� >S\�<9C;� <:ֿ0���н�Q�x�X>WIz=0(��c=�4<����=�l���]?=v!��5>��-�����X�=K��<���8~��*>:*�=P�R=��=降<�e|=��b=�~�<U��9��~=% �D�<��K�7��=@H>yО��t=WA9�9ش��騽I">��*t�������$��Ǩ >%>��>�� ���=���<����)3�=� �X���y�=&aM=r��g/Z=!U�;�a>�=ܽ��=HWܽ��&�E��=o�4�-.>��ٽU��T�ɽ{, >}�<v�G>!e��<�������Rj=3c������ -�=&�=��� �=n…<_u��0�o�KsL�D��E>�=F��-�(�ռ���=.\>'�>�I�=f�=~(��gI�=�o��P���(�<s���(p�=�/�=��G��\<J�ҽ�p ;FA�=��8������R1�i!'�@-�=4����0�=�3�= K���j.>�p�6b�;=�&�D�=Ҽ��֔?���=�Ö��כ= ��=��<a��o�|�9t ���ɑ�<���<�w[�'���Z�>�8�������>�* <�>ض�< �d=zi�;*H
>|�#�GJ�=�Q�� �&�Y^9��A>�~����=>^ >:�-"�Y�;=�^�<N%$=�=H"=�Q>���g�û�>-Z� ��=U΀��� �l <�\ ����4;>@y!�-o�=���=_Ŗ=�0�<��Ͻ~���ŋ�=����->�|'>I��{��=����:�P�����D��=���=b>�k��=c��=Ed�=`�������
�=D(�<Ϻ��� �<p?�<,&���2��-�����෼��
>�>�x>7q<H������<��%���=�"�=��ֽ���=j��;2[=!�<*h>�߰���梽5(�=��3�}�Ӽ P�T��=�l=����^P=E��=b�=�K2;-eջ�h>������<f�нT�?��n�*�<>���=�٥��a�ډ��8�6�_
>b2<al��r��~=�G�]��=�)��Kz%>r!/�t '��/нy�*��߽T�<;��;���F�2�G�;�[�;c|&>�k>M������O��=� >~�<��;˅��� >���=���=�� �p�=��Y=���=�����T >?m�=|O�<��߽
�4=I�=�A��F�< 6=��'<�I<� ��3ڼ!�S>�=�ؽ�>�=ޱ�=V��=a�F=Rl=aT>^Ԡ����<�g!�[(�kQ'��b^�}*�=Ub=��(>���=�Ec�n��=`�=�����<�鞽��>�Ǵ=�.,=C�ǽC[ǽ��:U��<
�>���=��/�Z�=�ս�CG�ֳ,=Ǘ�ꁡ<�@ѽ�(=5�>V-=��Y=05�=Ha�m0)=��ν���=�4���O�t4�=+�=2����'&<S����R�e>��m4>��ʽC� >w�_�L��<�M�=6�+�������=`^=������t���ܽh�:!*#�d#>)�={��E�e<9�<6}����<f����R�tZ�= C>��νqF="�j���]>�o�=�B�C@����<�5����<��]=�s�<f9=|ؓ=Փ_=߽>��=?YP��>WT[=j#�=��;>K���V��=���"e6=���=�L���Y>��=��;쬽�����B=}�t�o]�<4;=;�'>*��=���=���=Y-�=��=��%<E�7��1<~ゼ�����<:��| ��g�<�+㽲0��B��U�܏����N^=<�!y�4`f<pߋ�.ئ�=C�;RA�'9C=^9�=���=?�,�m�������E�RJ���" =p-
>�O�E��=N@Q���:�N���޳q���&�F�̽ Ɵ<�\�������,����'�=*��=_�����R�@�����=tO����ܽj�=��u�����Di=�7����=8o>����va:#{ѽ �̽�=_HY��꨽�sv=�Z���~;�=B�4��x@=�^�<��n=0���3�=n^�;ˁ���MA>�3]> �
�!���-=� >�:��L[#�YA������l>`_A����@���J�=0�+<���=Gk��W��=�3=��Y��r�=@�:=�F��M��}W�=�Z�<�Pռ�7�=�䁽�$�r��<��꼨��= �-��=�<���=g��=�$��Ҳ=+!�<� )��<�=m��<]c��,�?���������U����= 齯����N>񁋽X/b=�BT�l->ŭC>�}�=�鶼�5U�2��;�<P�=������=�M+�`��=S�8�}�����=��P�
�VǛ��QT�%B���-��?��=���= ު�����ԏ������������ ����.=���=�Aͽ�,�=}�>8��:!TQ>�~)��>��}�=�8���=P =a�=��[�Ƽ5@��� q�Kd���(D=��<?����A����H=2ժ<@�&>p+��=�Ȼ�.8�K�+���M�Ѣ =��s�*.=�%R�DO��Wu��!-����=1@�=M�%���?�.����-*�C�=�����Q=�N��νn ��nX<>��h<���=�1s�=�J>{��-�W=$Z=0���e6{����=e<��^=�x�<֥-<�D�=2�=t��=0���~�<����"����%<���=Gʓ�Lh.���;
���O$>{�K=!i#�K�
���u=& ڼ8F;9��=[����s�=ES�=�w�=�-e"�����ot#>X���/�K;�3>�� >7R3>��ƽ�_=�!1<Qi�<~ >�-�=2��t=n)>�q�=n�=c|���B�=hG�=x{>��J����>��=K�2>��#=q��%�=�V�=S��ה�<2�x=ZSO=��9=4=i\Ǽ�:����{�Ӓ��b��>��=������<a >� ��廊�p���an*��K�<�]7��)">�=3�o<x�F>y����'�|��7�=Nԡ�M`�=�C�=��F������=.���;?2=�h>:�<���|ڽᴻW�
<��?��=ƽ��:���7��&>����y��=l���=
��Xo�=Eר=�U��,�<��>������=���_@�����4�����=�T��tܽ�= 
='fѻN�ݽ#m-�lj�ͩ�=@>�(�=�=�z��e�b������ߩE��%��Q��|��<�t9>G >{��:8\����ɻĵ��$�=��D<DֽH#2��-���<*f0�ľ���?���=���=�Lؼ�9�����h�(��ص�/��t,����=zN�=@ >����ŕ=~C�=�p=�<�=� �=z��=^d��x�t=\I��I�>P1����c<& ��n6
���=j�/:�V�����'8��2
>��7>H���6���E�<�$�<�3>:�<�(��ӆ�W��ø��u�K�Ž�X;=� +����*Ǽ2ń=y?=�Ç�U'<�m����=O=�`0��V�=��<��`�#��:��<y-׽�Z��w,>����т�=��]=d 1>�Rl<�g�x �w��=��۽�p> �(=��#�!!�qB��K��;�T��۽��C>�l��cX�=�ן�+B �I���ID���_�<�1R=�f��,�o����=�W����ڼv�#>MN�=49�;�/�=@K>1 �=1��=��=>���<^����.?� �D�^$���9��<�<� ��=�>£�=���<Yl@=/���c���s;4>� �=�>u>rʫ����=�ӈ=�H�;K*X=�.*�M���2>���] L���3�xқ���<�h"�����k���U=D(���)�=W�e=�x\=u�`<J�(> ��=*r=���Խ@~`�#:��Nl>�:c�O-�;i���4 =��Q�Y߱=*�S<"^M��w����T=,���Y�/��=6�={@ݻ�֮�=k߽��
��m��EI�%wj=Z��6��=x">�՗�K�<ɡ�=�^�=�7�<k�=��7�#Q�=��<v�g�����i<,��29~��=}�ݧ�!0>M5>�r*�܀)��N�=|���q��+��!ᴽ͔����[<�؆=�e��PD�+��=���=��@��{h�����������=g\P��˽6V�=(�=گɽ"'L���k*$��5�=����Q?A<m��$�T=aٞ� '�k!�Ƹֽ�
=j��<�M���)�=�������w��=C�(>��=��"����=#�!>�=׽�Un<��Ž1뙽�Ю= gV���0�逐�H��8�f<g^-=Q��=F��}X3�n ����Ó�<z��� �/������0<Ƽ��!��+^����V�@��=jP0��h�Q��<��:=��%����~��=�=$=���=co��M��<�s!�85���=��ļ �X=,q�;+"����<�!Y�kǩ��b=M��=´�����ߵ=��#�t�%>�i�=bm�=�p��\#m<C���i��܊�C���V�<��I��&>B�u�T=���<�q� ;�<��*��N�;�-��F��<���� �����V�9=(M���/��LOɽ�a&=9��=�0�l���J ���u�=�(Z;�ٴ��Y�=�����>^�=��X=zz
��N�=�_��}����qۺ|��=��%���{�=N�n=�L�=�{9���k=��ܼ���<�5�=��=㕼H�m�b�޽v�F�7X5<� =�� ���=<�@�ER=�O�=�ˁ��������=�-(=���=.�H=�)@��3j�U) =.��=��=�%�85E�X]==�+W����=��,�>T����7��m5��d'�%F.��#&�B!����I=��=~���.m:=�z�<ސS�Qډ�O��=���<����3�a��S��F��`�$ʅ=�}���>�+�K��<��=��'>^�@>� �=gZ=���\����`=t�<�]=��"���3<�h��S/�r],>?��26ɽ�g>Q9H�\�U
�<W��I�<��=ep-=2Qa=��`�䯷��dr=��&>6@�= 3㽤�޽��<1�/�r F���7�ԇ���]�;��,=W�G>ɍ1�M�8���&�S�"�G2Z�(⮽�5>��=��=v�F=`@�=���=�:�=���y�A=0�=�=&��g = �ս�{���U ����=:+ ����<fb���#��.���ϧҼM��=q�=Q���ϥk=`$7<�Z�����<n��kW\=��ս�݈��#��]�=���=��=��ѽ�B�=��L����<����?�B=kh=DC��>\ؾ=�A8=����|�(<����=����mp�='a�=�ٞ���=]������E=�#�=�k���_�<�Yz<�)�<��<�iR���n�;�¼(��=�ʨ��=�=&2����A=Gb$�}��<�5�?�=��{=�J���[*��g�=o�> ��<�X�<�}�=�T��>�k=C�9��C��x}>[[>��!�=З��Xv��x=���=�'��q�ý�^���p��蕽���=� ż����s >ƭ'����<����5��=���<̈�'���`�<';�'=ڲ�)U{�NW/=�{N�󇉽�X�=�������=����~�=���<��>��f=��=}��=� >f�.���v=E/+�"�<=]=*yA>����pT�=:�v<B�ռ���=Z��=��Ž�ڣ�~��=!���[�=�y���>�x����R�<" > ������k)>|V �q> ��� >9v>�M�=�ٮ=fv$��ս
�N�5��=�4����<�1�=jV��h%�)(>�����^�=|�;<�ӎ<JB�c�>gSB=�e�;uU �B�=��{�_�%>�L*�� ����=�@�=h����/���>�#��}��>�\�r*�=��F�sEּ�3>P�e���T��څ<��;ή>�}�<y��<�(�=c��O��`R���4�����*�@�[ I=i��=#bV<2��<��]=]V�<�?�W��<��C�qq�=��m<g�D�}&=Y,<�����ra�ך�=��=�Z��Ox�<������=o��=�R����[=G�>P4���?�<Jj=]�&�Q���l5����=�y��6,�=�[g<���wu)=0z<A׽��� �=�u5>�*^����c� >4OJ�~�0=!">c���،C��f]����Uļ���<��н"��qJ���Ƚ�P6>q�);+%潘���h%�;��t�5�<Vn�=��o=��=v(�=����5߼��f����=~��D#�¹u=�n=
���ȉC<a�=��K=o��=��0=�M$���=Q�=���nC>�Z�����` �
>�� ����k$��՞1�q.=���=�Fb=)r�=��R�j���q�/�Gv�;g���4=�x ��1���� >c�(>9T>�k�=I��}{S>�>���r�<�w7�%4>�6���6�=�3�<������;2k"=5p��I�v=������=$U�KJ"=sF�n�<�NG�ߌ����=_B=�|�=G���%>��[>W(Y;��U<?q��C4�0C�y%�=��=dz��H� ���8�Ţe�wg�=Am�=��W��|I�u�ͽ8�ٽ�*= ����=
C��8@>���=]��=G��=��Q��q �{ ��W��J={�s=U6=�� ��~o;�/�:��@>x�>_���C��<��=c
�Q�=�~}�=y��<jM`��>�<����.���1�a�>�s1�.&ؽ��=�-!>x+�<���=V��DI#���������:�����=Ssy=��=���4�L>�G=WQý��%=5���G<��H.��h.>��F=��6���8m����=�<��D� >������j�\Y�=�T.=1M>^Q��8(���0�����{'=��b=2��L���׳���9��A�=�M�<���<=Ĝ��?*�I�=�@f�V�= ۥ��ͳ��k�=��<�W�=���=��0����<�w=Ww�=ξn;�5�/�׽�����m<<Z�q0���ǼZ������=A?�=�8�(�Y��Ȍ=���=������=�n��`�f�q�_n��ݠ<��3<�}E�j��=¤K�q��<�vH=tX�M/�="�Y<�0&�� ��Ѱ�=c/���4�=g�W�zӽ�GH����=>X=�߻-s�=��L>᱆�^�Ƚ�]���KW<����a��I��隼^`ӽ A��z?>�� =Փ�=���=���Š�/��<�� >4�;]��������=�<�ů>?� ���ͽ%���lݽ �=���=�U ��i�; �=� ��kIp��<1�$=��џx��] �o���]s�ɩ��)�=�g���=�R�?�=�E����`=@m >�) >�$5>"���>�;ָ�=d��2�n=�%��� ����@=�c�`ʟ��g^={H�=���=R�H>��^��=��=�w���qD>�i�=��6���λ��H����n�i����:��Ƚ��&��K>ռ#�j>�Y�i���̼�������nǼ����׳t� {�=�q��{�=DR+�-.νvTX=>�E���ݽ���=��ڼ,��L�����=�IS��i��J���0�e=�"M<rS;�ό�=� $�n��<�s��%�<��#�#���=E"�<�,t='м���=q��=[$>��=�0�<��=-(=?��;}9�=��T=�4���ٽ� �=r6����Լ� c= �:>���<�����׼?�����=��@���/�A�ĻꚐ�*f�� ��=\�P�Μ=�f�;dF�=ĺ=K;�)��=To����#=�4;p��O����];�s=�4=� úX�x��N�=�fe=�α=D��=F���o�<��=�]k��/;=��ҽ��<׃!� ��<��Y�LP>�N���O=Pǽ���]ּ�)�@*���=�\�=��=���~=Y@>���!��=�0�=��s==�<�U�;�S4�.x?=��W=BG�=v.Ƽ 沼����������<�Y3>�ٵ�����u
����>�l�<Qz��8�����dAH��G�.��<��d;u?�*3m=��*=�P���׼�%������ 署���"��P���c�=�Q��h#=��N���7�P]>ǫ׽��>>�<]� �zuY���->@�0�kw�=L�<d���_��G j=w��;[�;=T�L�+�P��9����y<�m|=�[,=�ɽq����#>��.=4~r<����$7�=�+�=lf�=��'��㢽�5�I�C=Sd�����ta?<$Ϝ�q�뼖��;�^��yd��ʫ�=�E>�G��ֽٰ%��=����"� �C��&߼�� =gV�<V.<��<7=�f���=���=#��<95=P1���㽦!'�G%/��6�=��-=ֿ+�� L���
< =����J>�?=78���>�ic;��%>>�L�=��`��-�<Mr��i�.�.~ �o��=+�����M<y �lN�=ʬ��"�"���u=����"g�0��=v1<=|�}���y<?�1>����p��=�����*
�nڷ�;�,>��V=c���K� ���t=���;n��<-�>W
>����0����������q��1�G� ڒ����=�1u=b�ټ/<��>0=(>؍:��n���b=��'�q�<3�N�q�M�Z�<G$e�؅
��,����{�'3?=��<:WY=�h�<I)=�uo=��>QUս��սJ�ϼ͋�= �<�߷<���;k�=��C="�&>l7��H/�=�:�=Aˡ���<��;�q�<e
>��s�f���B6�<���A�+����=�F��9h�<-���P!
=�AD��]�=�_�4G(=2���vg<t����j���E»!r4<W#0���߻�yB�3)�=���=�)=��g�E�-���������ܽ�j�8���x=6=�א��s�� �����>��$����<vL�=9½��<�@�N�<ɛʽ�P��Ð�<Tc~=�8 �x�w�֘=��=;s���< /��vG���J>I!=L�#>}�>Ȯ ��A�=�5��Y�5�����=���<gv=*)G�M�ァ�> ��
��=x�:�#�=4߽? �=E�E�u�<�w��=],>Z������=��=Ep>�:�=%R�<�3Q���>@�N���={^�=X}�=�ы=+�w=���1a/�D��A���O^ �3�?<�X�=?>�=�a=��.>��D�HH>����̅�=�"���=���=J=�O>{��sڼ�#��3�f<��)=���*��=� �ϴ�=^<����=p� <�e�bv�=�./��>x=yμ������#>�U�����='b�=zt�=��x��Cǻw��;x�Ž�j�=�� ���=�X"=��8��.2��p½T��<
��,��=�A��V伸ҽ�ܰ= O�<��(��z �z���Y��=}��=�]B=��a�� �=H��Jz=�������pμ9i_��h�=��y=�b�<����.��=��`ZM=$��=�^-���u���.=r�~<1�����������B=;,%=<3>
_;<�C=�&"�! �=(�q��%
=��b�:I]���g=�>�=�[������ =��;���6ؽٌ=I'�=�v�=B������yQ�=��˻�,K���>1�ݽ��ν�A ��Px;j�l=Y�*=�ܼ�y#����F���='Y=��=�N��N">@���8��-j�<-�<7��=wׂ�Cn��� ���� =�P>�`ļ� ��0r�W8>q�*= K'�mQ���~��w=^==��ؼ`�4�4����+C<埄=�5�޵�<�\|�iA��<���A�扈=�O�<UZͽ�>>�?��p<�;���0==�Q=�8R�F�=�������<�� =��D;-�>ax��, =@�_=z��=��,���>�a�=��= j�=�I�x��=�8~���/=$!�=�t޽��c�X�m����=��j�^@ϼQ��< g>�|/����<��=��=?��=&= ����=o7>��&= ^~����k>��-��=0�;�=]����=��+���P��`ļ�7Y��� >y�y=���=Oy��m�1>�߼XN^�@qb��'=��6=0XP>����a{��<��a�=R�|}?< �u;��E�B��M��Xā���-=�S��f �+Ԏ=�I���ܽ�!>=�˜<��=�YN���>X#�� S�������=�e�<=$���������= ��=j���Ф�=9H-��ǽ�Ԃ=��Ƚ"k=W��=�(>J�=0h���>+.���F�p��=9j�س*�޶/=���g·�g��;{�X={?^=͔�=̛�<�y�<w�=xS��v>_��=�G����/=�g�7�Ժ�T�=�À=��3�>6\��y��=>���. =�d�=3��==���<&�>]������4�'����<y�g=��=|��=�u=7�=?�;_�\v�<}��=/�*�}�v�G����6���k�=��=
[
dense_3/kernel/readIdentitydense_3/kernel*
T0*!
_class
loc:@dense_3/kernel
�
dense_3/biasConst*
dtype0*�
value�B��"�Iȫ=�E��*��j��M6�=���=��=W��BN���ϛ=m¦�1L�=۶��^��=���=7���ʭ��J ���M��D��=���=c�=��=&��=dG�=d���#����ר=���=�W��/c��Y<���x�=b��=}L���¡=�ߛ��{�=O>�=D����.��A٤��՗=y̽��=�u�����=��������ԭ�����Į� ����z��U���q���͘=�s�=x��=�����+��"D���R�=�zͽ'��B}�=�)����=�T�=���ҟ=����i��=a-�=���=꥽
�=h��[5�=�3��x���v��.�=������=��=��P�=ַ�=�����ꣽT��= �=�ö=A��=�k��k˾=�~�=�x�=���=6����=v �����=%���]��=�̧=��=Ŧ�=������=r~�������e�����U��=赽kY�=����GUȽ���=j �������ϱ�q����>��;����]��
U
dense_3/bias/readIdentity dense_3/bias*
T0*
_class
loc:@dense_3/bias
j
dense_4/MatMulMatMul dense_3/Tanhdense_3/kernel/read*
transpose_a(*
transpose_b(*
T0
]
dense_4/BiasAddBiasAdddense_4/MatMuldense_3/bias/read*
T0*
data_formatNHWC
.
dense_4/TanhTanhdense_4/BiasAdd*
T0
�
dense_4/kernelConst*
dtype0*�
value�B� �"�u2Ѽ+�+�s�F=@�2<BD+=���\ټ�r\�%k+<�"��NY=EX��˙�<Oy(�ZF�<+^Q�8�<�4��� �U�I���=��0n=@��<�*��z�Ӽ��1����;Zo^��>����J=;�ռ���M�!=��<�}=}3���d����ǀ� �<(^;�mO=�I=����~�D=�Q��^0"��u<�� =�
�� w=n�<rpl�]�=s�b<��U=E�L=�j��7=��=<��:=��G<Ϫ�����jXڼ=�;��oT=c��<���n�<�I��p�<��]<[=�� =K:+ �<�䯼b��<�5��\{=y�ʼA8���<�<b�1�)u}<LzR=w�=�N�;��~��9��^���$�@�X=HZ=��)=qQ��)�=,$=I�=r�=������ ]f�)�=Y�t��s2=�D&=W'�ߌ<�3��<=�T�'�:(1=߉j��'����R�j�(=�)z�:��<��=|�n��..=(�
<�����D�^��<s|<ő=OF<�=I��=���&=�Z =
���#�=�{����{���k����< ��6�L=��T���o;��[��g=iҚ���t=�k<ԭo����&W=��$<��:�뙭��O=y�I=��<J��-�O�����^O�:40=��6�T/��i�Ik�<y)�<R:˼)U:��)���<�0A;Be3=Ql*�N�+=\�4�OP��M��"� �@�
=����p�;9��&�;��V=f8�}i=�G=P+= ��� �t���
BP��I =�.;g��;U�T�g�ݻY�}=���:���Hk=F$�<�,��i�!�!?��8�=�F�<�J�l�="�B=�~ּY�p=^�ݼjB=�}X=����f#�<�,�������^�>a �yF=����p�>�i��y=L:����f�,U=J�=��J=[Ю;�N=��㼐{Y;�欼�>��ݕ=H͇=-r�;�kq��x%<����l<Ğ�<�3<�@�<B=������D�/�N<ūh=
[
dense_4/kernel/readIdentitydense_4/kernel*
T0*!
_class
loc:@dense_4/kernel
j
dense_5/MatMulMatMul dense_2/Tanhdense_4/kernel/read*
transpose_a(*
transpose_b(*
T0
F
log_sigma_squaredConst*
dtype0*
valueB"��)����
d
log_sigma_squared/readIdentitylog_sigma_squared*
T0*$
_class
loc:@log_sigma_squared
+
ExpExplog_sigma_squared/read*
T0
A
epsilon Placeholder*
dtype0*
shape: ���������

Sqrt_1SqrtExp*
T0
$
mulMulSqrt_1epsilon*
T0
*
add_1Adddense_5/MatMulmul*
T0
"
actionIdentityadd_1*
T0
-
StopGradient StopGradientaction*
T0
3
sub_1Sub StopGradientdense_5/MatMul*
T0
2
Pow/yConst*
value B
*@*
dtype0
!
PowPowsub_1Pow/y*
T0
4
mul_1/xConst*
value B
*��*
dtype0
#
mul_1Mulmul_1/xPow*
T0
4
mul_2/xConst*
value B
*@*
dtype0
#
mul_2Mulmul_2/xExp*
T0
+
truediv_2RealDivmul_1mul_2*
T0
Exp_1Exp truediv_2*
T0
4
mul_3/xConst*
value B
*@*
dtype0
#
mul_3Mulmul_3/xExp*
T0
4
mul_4/yConst*
value B
*�I@*
dtype0
%
mul_4Mulmul_3mul_4/y*
T0

Sqrt_2Sqrtmul_4*
T0
8
truediv_3/xConst*
value B
*�?*
dtype0
2
truediv_3RealDiv truediv_3/xSqrt_2*
T0
.
action_probsMulExp_1 truediv_3*
T0
�
dense_5/kernelConst*
dtype0*�
value�B� �"��b1>( ���N彁��� Y[>�g>�:>��g���5�{��=�ǽ�t>]�m��]^>�( >3�ӽqd���)2�� w�ͽH>�RG>�bp>�:�=��#>2��=n%-�_mȽ�>j��=K���e�F�������2=�'8=�wɼQ�#>�~��|i<�G�=LP���4�`۸��w5>m��,>]���z�+>������E��� �i/��[�窧���*��Lʽ��}�;��=@�$=�My= ���Z]q�KY��f�>��k��T��� >�{X��U >�*>��罔�2>��Z���=��c=Y��=D�7�E�K=3�i�m:>�eR� ���4@��J=����>�ϭ=W$����="2>ETg���!���B>߲�=��_=7M> 7��='=�%>���=���<,�Ƚ5��=)�+�!�5>��8�8f�=�#3>1#>O5>j/��?>����v��@��AKV��v->�]���VQ=;dm���-> .j�sd��É��U���
����t��W�
[
dense_5/kernel/readIdentitydense_5/kernel*
T0*!
_class
loc:@dense_5/kernel
=
dense_5/biasConst*
dtype0*
valueB*<��=
U
dense_5/bias/readIdentity dense_5/bias*
T0*
_class
loc:@dense_5/bias
j
dense_6/MatMulMatMul dense_4/Tanhdense_5/kernel/read*
transpose_a(*
transpose_b(*
T0
]
dense_6/BiasAddBiasAdddense_6/MatMuldense_5/bias/read*
T0*
data_formatNHWC
4
value_estimateIdentitydense_6/BiasAdd*
T0

8
unity-environment/Assets/ML-Agents/Examples/3DBall/TFModels/ball.bytes.meta


fileFormatVersion: 2
guid: cd09ad04cdee641b390f8fe176718c51
timeCreated: 1516665377
licenseType: Free
TextScriptImporter:
userData:
assetBundleName:
assetBundleVariant:

1001
unity-environment/Assets/ML-Agents/Examples/3DBall/ball-EBS-hard_ppo.bytes
文件差异内容过多而无法显示
查看文件

1001
unity-environment/Assets/ML-Agents/Examples/3DBall/ball-EBS_ppo.bytes
文件差异内容过多而无法显示
查看文件

10
unity-environment/Assets/ML-Agents/Examples/Bouncer.meta


fileFormatVersion: 2
guid: d49541568568a44fe8e8a78844821afd
folderAsset: yes
timeCreated: 1518038008
licenseType: Free
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

52
unity-environment/Assets/ML-Agents/Scripts/ResetParameters.cs


using System;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class ResetParameters : Dictionary<string, float>, ISerializationCallbackReceiver
{
[System.Serializable]
public struct ResetParameter
{
public string key;
public float value;
}
[SerializeField]
private List<ResetParameter> resetParameters = new List<ResetParameter>();
public void OnBeforeSerialize()
{
resetParameters.Clear();
foreach (KeyValuePair<string, float> pair in this)
{
ResetParameter rp = new ResetParameter();
rp.key = pair.Key;
rp.value = pair.Value;
resetParameters.Add(rp);
}
}
public void OnAfterDeserialize()
{
this.Clear();
for (int i = 0; i < resetParameters.Count; i++)
{
if (this.ContainsKey(resetParameters[i].key))
{
Debug.LogError("The ResetParameters contains the same key twice");
}
else
{
this.Add(resetParameters[i].key, resetParameters[i].value);
}
}
}
}

12
unity-environment/Assets/ML-Agents/Scripts/ResetParameters.cs.meta


fileFormatVersion: 2
guid: af19281a4c1dd47518ac7501c45eca9f
timeCreated: 1517261137
licenseType: Free
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

993
unity-environment/Assets/ML-Agents/Examples/Bouncer/Bouncer.unity


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 8
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 0
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0.4465785, g: 0.49641252, b: 0.574817, a: 1}
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 11
m_GIWorkflowMode: 0
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_TemporalCoherenceThreshold: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 1
m_LightmapEditorSettings:
serializedVersion: 9
m_Resolution: 2
m_BakeResolution: 40
m_TextureWidth: 1024
m_TextureHeight: 1024
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
m_FinalGather: 0
m_FinalGatherFiltering: 1
m_FinalGatherRayCount: 256
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 0
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 500
m_PVRBounces: 2
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVRFilteringMode: 1
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_LightingDataAsset: {fileID: 0}
m_UseShadowmask: 1
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 2
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
accuratePlacement: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1001 &387204267
Prefab:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.y
value: -40
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_RootOrder
value: 7
objectReference: {fileID: 0}
- target: {fileID: 114529466885660502, guid: 6e61e9f3ef64d4ffe86950d8a0311f91,
type: 2}
propertyPath: brain
value:
objectReference: {fileID: 1319880098}
- target: {fileID: 1680241239607220, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_Name
value: Ground (4)
objectReference: {fileID: 0}
- target: {fileID: 1680241239607220, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
m_IsPrefabParent: 0
--- !u!1001 &531401815
Prefab:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_RootOrder
value: 3
objectReference: {fileID: 0}
- target: {fileID: 114529466885660502, guid: 6e61e9f3ef64d4ffe86950d8a0311f91,
type: 2}
propertyPath: brain
value:
objectReference: {fileID: 1319880098}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
m_IsPrefabParent: 0
--- !u!1001 &553719297
Prefab:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.y
value: -20
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_RootOrder
value: 5
objectReference: {fileID: 0}
- target: {fileID: 114529466885660502, guid: 6e61e9f3ef64d4ffe86950d8a0311f91,
type: 2}
propertyPath: brain
value:
objectReference: {fileID: 1319880098}
- target: {fileID: 1680241239607220, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_Name
value: Ground (2)
objectReference: {fileID: 0}
- target: {fileID: 1680241239607220, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
m_IsPrefabParent: 0
--- !u!1001 &715699381
Prefab:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.y
value: -10
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_RootOrder
value: 4
objectReference: {fileID: 0}
- target: {fileID: 114529466885660502, guid: 6e61e9f3ef64d4ffe86950d8a0311f91,
type: 2}
propertyPath: brain
value:
objectReference: {fileID: 1319880098}
- target: {fileID: 1680241239607220, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_Name
value: Ground (1)
objectReference: {fileID: 0}
- target: {fileID: 1680241239607220, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
m_IsPrefabParent: 0
--- !u!1001 &863238562
Prefab:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.y
value: -80
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_RootOrder
value: 11
objectReference: {fileID: 0}
- target: {fileID: 114529466885660502, guid: 6e61e9f3ef64d4ffe86950d8a0311f91,
type: 2}
propertyPath: brain
value:
objectReference: {fileID: 1319880098}
- target: {fileID: 1680241239607220, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_Name
value: Ground (8)
objectReference: {fileID: 0}
- target: {fileID: 1680241239607220, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
m_IsPrefabParent: 0
--- !u!1001 &950406124
Prefab:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.y
value: -30
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_RootOrder
value: 6
objectReference: {fileID: 0}
- target: {fileID: 114529466885660502, guid: 6e61e9f3ef64d4ffe86950d8a0311f91,
type: 2}
propertyPath: brain
value:
objectReference: {fileID: 1319880098}
- target: {fileID: 1680241239607220, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_Name
value: Ground (3)
objectReference: {fileID: 0}
- target: {fileID: 1680241239607220, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
m_IsPrefabParent: 0
--- !u!114 &973485307
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 41e9bda8f3cf1492fa74926a530f6f70, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
continuousPlayerActions:
- key: 97
index: 0
value: -1
- key: 100
index: 0
value: 1
- key: 119
index: 1
value: 1
- key: 115
index: 1
value: -1
discretePlayerActions: []
defaultAction: 0
brain: {fileID: 1319880098}
--- !u!1001 &990254208
Prefab:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.y
value: -50
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_RootOrder
value: 8
objectReference: {fileID: 0}
- target: {fileID: 114529466885660502, guid: 6e61e9f3ef64d4ffe86950d8a0311f91,
type: 2}
propertyPath: brain
value:
objectReference: {fileID: 1319880098}
- target: {fileID: 1680241239607220, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_Name
value: Ground (5)
objectReference: {fileID: 0}
- target: {fileID: 1680241239607220, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
m_IsPrefabParent: 0
--- !u!114 &1138825117
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35813a1be64e144f887d7d5f15b963fa, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
brain: {fileID: 1319880098}
--- !u!114 &1176356748
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 943466ab374444748a364f9d6c3e2fe2, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
brain: {fileID: 0}
--- !u!1 &1319880096
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 5
m_Component:
- component: {fileID: 1319880097}
- component: {fileID: 1319880098}
m_Layer: 0
m_Name: BouncerBrain
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1319880097
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1319880096}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1453982295}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1319880098
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1319880096}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c676a8ddf5a5f4f64b35e9ed5028679d, type: 3}
m_Name:
m_EditorClassIdentifier:
brainParameters:
vectorObservationSize: 4
numStackedVectorObservations: 1
vectorActionSize: 2
cameraResolutions: []
vectorActionDescriptions:
-
-
vectorActionSpaceType: 1
vectorObservationSpaceType: 1
brainType: 2
CoreBrains:
- {fileID: 973485307}
- {fileID: 1176356748}
- {fileID: 1138825117}
- {fileID: 1773297366}
instanceID: 104222
--- !u!1 &1453982293
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 5
m_Component:
- component: {fileID: 1453982295}
- component: {fileID: 1453982294}
m_Layer: 0
m_Name: Academy
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1453982294
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1453982293}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7223013998783490db672119a97e1fdb, type: 3}
m_Name:
m_EditorClassIdentifier:
maxSteps: 0
isInference: 1
trainingConfiguration:
width: 80
height: 80
qualityLevel: 1
timeScale: 100
targetFrameRate: -1
inferenceConfiguration:
width: 1280
height: 720
qualityLevel: 5
timeScale: 1
targetFrameRate: 60
resetParameters:
resetParameters: []
episodeCount: 0
stepsSinceReset: 0
--- !u!4 &1453982295
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1453982293}
m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068}
m_LocalPosition: {x: 0, y: 1, z: 0}
m_LocalScale: {x: 72.52305, y: 72.39882, z: 72.52292}
m_Children:
- {fileID: 1319880097}
m_Father: {fileID: 0}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &1599655133
Prefab:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.y
value: -60
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_RootOrder
value: 9
objectReference: {fileID: 0}
- target: {fileID: 114529466885660502, guid: 6e61e9f3ef64d4ffe86950d8a0311f91,
type: 2}
propertyPath: brain
value:
objectReference: {fileID: 1319880098}
- target: {fileID: 1680241239607220, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_Name
value: Ground (6)
objectReference: {fileID: 0}
- target: {fileID: 1680241239607220, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
m_IsPrefabParent: 0
--- !u!1001 &1689260383
Prefab:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.y
value: -90
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_RootOrder
value: 12
objectReference: {fileID: 0}
- target: {fileID: 114529466885660502, guid: 6e61e9f3ef64d4ffe86950d8a0311f91,
type: 2}
propertyPath: brain
value:
objectReference: {fileID: 1319880098}
- target: {fileID: 1680241239607220, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_Name
value: Ground (9)
objectReference: {fileID: 0}
- target: {fileID: 1680241239607220, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
m_IsPrefabParent: 0
--- !u!114 &1773297366
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b23992c8eb17439887f5e944bf04a40, type: 3}
m_Name: (Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
m_EditorClassIdentifier:
broadcast: 1
graphModel: {fileID: 4900000, guid: 1cd7f0238a77844289743688a85f8bff, type: 3}
graphScope:
graphPlaceholders: []
BatchSizePlaceholderName: batch_size
StatePlacholderName: state
RecurrentInPlaceholderName: recurrent_in
RecurrentOutPlaceholderName: recurrent_out
ObservationPlaceholderName: []
ActionPlaceholderName: action
brain: {fileID: 1319880098}
--- !u!1 &2058716318
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 5
m_Component:
- component: {fileID: 2058716320}
- component: {fileID: 2058716319}
m_Layer: 0
m_Name: Directional Light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!108 &2058716319
Light:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 2058716318}
m_Enabled: 1
serializedVersion: 8
m_Type: 1
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
m_CookieSize: 10
m_Shadows:
m_Type: 2
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 1
m_Bias: 0.05
m_NormalBias: 0.4
m_NearPlane: 0.2
m_Cookie: {fileID: 0}
m_DrawHalo: 0
m_Flare: {fileID: 0}
m_RenderMode: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_Lightmapping: 4
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_ShadowRadius: 0
m_ShadowAngle: 0
--- !u!4 &2058716320
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 2058716318}
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!1 &2080114702
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 5
m_Component:
- component: {fileID: 2080114706}
- component: {fileID: 2080114705}
- component: {fileID: 2080114704}
- component: {fileID: 2080114703}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!81 &2080114703
AudioListener:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 2080114702}
m_Enabled: 1
--- !u!124 &2080114704
Behaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 2080114702}
m_Enabled: 1
--- !u!20 &2080114705
Camera:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 2080114702}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 0
orthographic size: 5
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &2080114706
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 2080114702}
m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068}
m_LocalPosition: {x: 0, y: 50, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
--- !u!1001 &2086299877
Prefab:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.y
value: -70
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4543736733764230, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_RootOrder
value: 10
objectReference: {fileID: 0}
- target: {fileID: 114529466885660502, guid: 6e61e9f3ef64d4ffe86950d8a0311f91,
type: 2}
propertyPath: brain
value:
objectReference: {fileID: 1319880098}
- target: {fileID: 1680241239607220, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_Name
value: Ground (7)
objectReference: {fileID: 0}
- target: {fileID: 1680241239607220, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 6e61e9f3ef64d4ffe86950d8a0311f91, type: 2}
m_IsPrefabParent: 0

9
unity-environment/Assets/ML-Agents/Examples/Bouncer/Bouncer.unity.meta


fileFormatVersion: 2
guid: 2c29359d4c9fe49219b21cd83e246596
timeCreated: 1518038044
licenseType: Free
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

10
unity-environment/Assets/ML-Agents/Examples/Bouncer/Prefabs.meta


fileFormatVersion: 2
guid: 1cf7223946d81411d824ab5ea5fea955
folderAsset: yes
timeCreated: 1518038062
licenseType: Free
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

部分文件因为文件数量过多而无法显示

正在加载...
取消
保存