浏览代码

Develop remove past action communication (#2913)

* Modifying the .proto files

* attempt 1 at refactoring Python

* works for ppo hallway

* changing the documentation

* now works with both sac and ppo both training and inference

* Ned to fix the tests

* TODOs :
 - Fix the demonstration recorder
 - Fix the demonstration loader
 - verify the intrinsic reward signals work
 - Fix the tests on Python
 - Fix the C# tests

* Regenerating the protos

* fix proto typo

* protos and modifying the C# demo recorder

* modified the demo loader

* Demos are loading

* IMPORTANT : THESE ARE THE FILES USED FOR CONVERSION FROM OLD TO NEW FORMAT

* Modified all the demo files

* Fixing all the tests

* fixing ci

* addressing comments

* removing reference to memories in the ll-api
/develop-newnormalization
GitHub 5 年前
当前提交
69d1a033
共有 53 个文件被更改,包括 6486 次插入5507 次删除
  1. 4
      UnitySDK/Assets/ML-Agents/Editor/Tests/DemonstrationTests.cs
  2. 4
      UnitySDK/Assets/ML-Agents/Scripts/DemonstrationStore.cs
  3. 38
      UnitySDK/Assets/ML-Agents/Scripts/Grpc/CommunicatorObjects/AgentInfo.cs
  4. 24
      UnitySDK/Assets/ML-Agents/Scripts/Grpc/GrpcExtensions.cs
  5. 2
      UnitySDK/Assets/ML-Agents/Scripts/Grpc/RpcCommunicator.cs
  6. 18
      UnitySDK/Assets/ML-Agents/Scripts/InferenceBrain/GeneratorImpl.cs
  7. 1001
      demos/Expert3DBall.demo
  8. 1001
      demos/Expert3DBallHard.demo
  9. 366
      demos/ExpertBasic.demo
  10. 510
      demos/ExpertBouncer.demo
  11. 995
      demos/ExpertCrawlerDyn.demo
  12. 1000
      demos/ExpertFood.demo
  13. 1000
      demos/ExpertGrid.demo
  14. 1001
      demos/ExpertHallway.demo
  15. 1001
      demos/ExpertPyramid.demo
  16. 1001
      demos/ExpertReacher.demo
  17. 1001
      demos/ExpertTennis.demo
  18. 5
      docs/Python-API.md
  19. 3
      ml-agents-envs/mlagents/envs/brain.py
  20. 23
      ml-agents-envs/mlagents/envs/communicator_objects/agent_info_pb2.py
  21. 6
      ml-agents-envs/mlagents/envs/communicator_objects/agent_info_pb2.pyi
  22. 5
      ml-agents-envs/mlagents/envs/mock_communicator.py
  23. 3
      ml-agents/mlagents/trainers/components/reward_signals/__init__.py
  24. 4
      ml-agents/mlagents/trainers/components/reward_signals/curiosity/signal.py
  25. 2
      ml-agents/mlagents/trainers/components/reward_signals/extrinsic/signal.py
  26. 4
      ml-agents/mlagents/trainers/components/reward_signals/gail/signal.py
  27. 58
      ml-agents/mlagents/trainers/demo_loader.py
  28. 10
      ml-agents/mlagents/trainers/ppo/policy.py
  29. 17
      ml-agents/mlagents/trainers/rl_trainer.py
  30. 6
      ml-agents/mlagents/trainers/sac/policy.py
  31. 7
      ml-agents/mlagents/trainers/tests/mock_brain.py
  32. 344
      ml-agents/mlagents/trainers/tests/test.demo
  33. 16
      ml-agents/mlagents/trainers/tests/test_demo_loader.py
  34. 4
      ml-agents/mlagents/trainers/tests/test_reward_signals.py
  35. 2
      ml-agents/mlagents/trainers/tests/test_rl_trainer.py
  36. 2
      ml-agents/mlagents/trainers/tests/test_simple_rl.py
  37. 153
      ml-agents/mlagents/trainers/tests/testdcvis.demo
  38. 50
      ml-agents/mlagents/trainers/tf_policy.py
  39. 2
      protobuf-definitions/proto/mlagents/envs/communicator_objects/agent_info.proto
  40. 219
      UnitySDK/Assets/ML-Agents/Scripts/Grpc/CommunicatorObjects/AgentInfoActionPair.cs
  41. 11
      UnitySDK/Assets/ML-Agents/Scripts/Grpc/CommunicatorObjects/AgentInfoActionPair.cs.meta
  42. 83
      ml-agents-envs/mlagents/envs/communicator_objects/agent_info_action_pair_pb2.py
  43. 57
      ml-agents-envs/mlagents/envs/communicator_objects/agent_info_action_pair_pb2.pyi
  44. 130
      ml-agents/mlagents/trainers/tests/test_demo_dir/test4.demo
  45. 130
      ml-agents/mlagents/trainers/tests/test_demo_dir/test5.demo
  46. 130
      ml-agents/mlagents/trainers/tests/test_demo_dir/test6.demo
  47. 12
      protobuf-definitions/proto/mlagents/envs/communicator_objects/agent_info_action_pair.proto
  48. 176
      ml-agents/mlagents/trainers/tests/test_demo_dir/test.demo
  49. 176
      ml-agents/mlagents/trainers/tests/test_demo_dir/test2.demo
  50. 176
      ml-agents/mlagents/trainers/tests/test_demo_dir/test3.demo

4
UnitySDK/Assets/ML-Agents/Editor/Tests/DemonstrationTests.cs


reader.Seek(DemonstrationStore.MetaDataBytes + 1, 0);
BrainParametersProto.Parser.ParseDelimitedFrom(reader);
var agentInfoProto = AgentInfoProto.Parser.ParseDelimitedFrom(reader);
var agentInfoProto = AgentInfoActionPairProto.Parser.ParseDelimitedFrom(reader).AgentInfo;
var obs = agentInfoProto.Observations[2]; // skip dummy sensors
{
var vecObs = obs.FloatData.Data;

Assert.AreEqual((float) i+1, vecObs[i]);
Assert.AreEqual((float)i + 1, vecObs[i]);
}
}

4
UnitySDK/Assets/ML-Agents/Scripts/DemonstrationStore.cs


}
m_Writer = m_FileSystem.File.Create(m_FilePath);
m_MetaData = new DemonstrationMetaData {demonstrationName = demonstrationName};
m_MetaData = new DemonstrationMetaData { demonstrationName = demonstrationName };
var metaProto = m_MetaData.ToProto();
metaProto.WriteDelimitedTo(m_Writer);
}

}
// Write AgentInfo to file.
var agentProto = info.ToProto();
var agentProto = info.ToInfoActionPairProto();
agentProto.WriteDelimitedTo(m_Writer);
}

38
UnitySDK/Assets/ML-Agents/Scripts/Grpc/CommunicatorObjects/AgentInfo.cs


string.Concat(
"CjNtbGFnZW50cy9lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL2FnZW50X2lu",
"Zm8ucHJvdG8SFGNvbW11bmljYXRvcl9vYmplY3RzGjRtbGFnZW50cy9lbnZz",
"L2NvbW11bmljYXRvcl9vYmplY3RzL29ic2VydmF0aW9uLnByb3RvIuoBCg5B",
"Z2VudEluZm9Qcm90bxIdChVzdG9yZWRfdmVjdG9yX2FjdGlvbnMYBCADKAIS",
"DgoGcmV3YXJkGAcgASgCEgwKBGRvbmUYCCABKAgSGAoQbWF4X3N0ZXBfcmVh",
"Y2hlZBgJIAEoCBIKCgJpZBgKIAEoBRITCgthY3Rpb25fbWFzaxgLIAMoCBI8",
"CgxvYnNlcnZhdGlvbnMYDSADKAsyJi5jb21tdW5pY2F0b3Jfb2JqZWN0cy5P",
"YnNlcnZhdGlvblByb3RvSgQIARACSgQIAhADSgQIAxAESgQIBRAGSgQIBhAH",
"SgQIDBANQh+qAhxNTEFnZW50cy5Db21tdW5pY2F0b3JPYmplY3RzYgZwcm90",
"bzM="));
"L2NvbW11bmljYXRvcl9vYmplY3RzL29ic2VydmF0aW9uLnByb3RvItEBCg5B",
"Z2VudEluZm9Qcm90bxIOCgZyZXdhcmQYByABKAISDAoEZG9uZRgIIAEoCBIY",
"ChBtYXhfc3RlcF9yZWFjaGVkGAkgASgIEgoKAmlkGAogASgFEhMKC2FjdGlv",
"bl9tYXNrGAsgAygIEjwKDG9ic2VydmF0aW9ucxgNIAMoCzImLmNvbW11bmlj",
"YXRvcl9vYmplY3RzLk9ic2VydmF0aW9uUHJvdG9KBAgBEAJKBAgCEANKBAgD",
"EARKBAgEEAVKBAgFEAZKBAgGEAdKBAgMEA1CH6oCHE1MQWdlbnRzLkNvbW11",
"bmljYXRvck9iamVjdHNiBnByb3RvMw=="));
new pbr::GeneratedClrTypeInfo(typeof(global::MLAgents.CommunicatorObjects.AgentInfoProto), global::MLAgents.CommunicatorObjects.AgentInfoProto.Parser, new[]{ "StoredVectorActions", "Reward", "Done", "MaxStepReached", "Id", "ActionMask", "Observations" }, null, null, null)
new pbr::GeneratedClrTypeInfo(typeof(global::MLAgents.CommunicatorObjects.AgentInfoProto), global::MLAgents.CommunicatorObjects.AgentInfoProto.Parser, new[]{ "Reward", "Done", "MaxStepReached", "Id", "ActionMask", "Observations" }, null, null, null)
}));
}
#endregion

[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public AgentInfoProto(AgentInfoProto other) : this() {
storedVectorActions_ = other.storedVectorActions_.Clone();
reward_ = other.reward_;
done_ = other.done_;
maxStepReached_ = other.maxStepReached_;

return new AgentInfoProto(this);
}
/// <summary>Field number for the "stored_vector_actions" field.</summary>
public const int StoredVectorActionsFieldNumber = 4;
private static readonly pb::FieldCodec<float> _repeated_storedVectorActions_codec
= pb::FieldCodec.ForFloat(34);
private readonly pbc::RepeatedField<float> storedVectorActions_ = new pbc::RepeatedField<float>();
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public pbc::RepeatedField<float> StoredVectorActions {
get { return storedVectorActions_; }
}
/// <summary>Field number for the "reward" field.</summary>
public const int RewardFieldNumber = 7;
private float reward_;

if (ReferenceEquals(other, this)) {
return true;
}
if(!storedVectorActions_.Equals(other.storedVectorActions_)) return false;
if (!pbc::ProtobufEqualityComparers.BitwiseSingleEqualityComparer.Equals(Reward, other.Reward)) return false;
if (Done != other.Done) return false;
if (MaxStepReached != other.MaxStepReached) return false;

[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override int GetHashCode() {
int hash = 1;
hash ^= storedVectorActions_.GetHashCode();
if (Reward != 0F) hash ^= pbc::ProtobufEqualityComparers.BitwiseSingleEqualityComparer.GetHashCode(Reward);
if (Done != false) hash ^= Done.GetHashCode();
if (MaxStepReached != false) hash ^= MaxStepReached.GetHashCode();

[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public void WriteTo(pb::CodedOutputStream output) {
storedVectorActions_.WriteTo(output, _repeated_storedVectorActions_codec);
if (Reward != 0F) {
output.WriteRawTag(61);
output.WriteFloat(Reward);

[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int CalculateSize() {
int size = 0;
size += storedVectorActions_.CalculateSize(_repeated_storedVectorActions_codec);
if (Reward != 0F) {
size += 1 + 4;
}

if (other == null) {
return;
}
storedVectorActions_.Add(other.storedVectorActions_);
if (other.Reward != 0F) {
Reward = other.Reward;
}

default:
_unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
break;
case 34:
case 37: {
storedVectorActions_.AddEntriesFrom(input, _repeated_storedVectorActions_codec);
break;
}
case 61: {
Reward = input.ReadFloat();
break;

24
UnitySDK/Assets/ML-Agents/Scripts/Grpc/GrpcExtensions.cs


{
public static class GrpcExtensions
{
/// <summary>
/// Converts a AgentInfo to a protobuf generated AgentInfoActionPairProto
/// </summary>
/// <returns>The protobuf version of the AgentInfoActionPairProto.</returns>
public static AgentInfoActionPairProto ToInfoActionPairProto(this AgentInfo ai)
{
var agentInfoProto = ai.ToAgentInfoProto();
var agentActionProto = new AgentActionProto
{
VectorActions = { ai.storedVectorActions }
};
return new AgentInfoActionPairProto
{
AgentInfo = agentInfoProto,
ActionInfo = agentActionProto
};
}
public static AgentInfoProto ToProto(this AgentInfo ai)
public static AgentInfoProto ToAgentInfoProto(this AgentInfo ai)
StoredVectorActions = { ai.storedVectorActions },
Reward = ai.reward,
MaxStepReached = ai.maxStepReached,
Done = ai.done,

2
UnitySDK/Assets/ML-Agents/Scripts/Grpc/RpcCommunicator.cs


{
// Update the sensor data on the AgentInfo
agent.GenerateSensorData();
var agentInfoProto = agent.Info.ToProto();
var agentInfoProto = agent.Info.ToAgentInfoProto();
m_CurrentUnityRlOutput.AgentInfos[brainKey].Value.Add(agentInfoProto);
}

18
UnitySDK/Assets/ML-Agents/Scripts/InferenceBrain/GeneratorImpl.cs


{
var info = agent.Info;
List<float> memory;
if (agent.Info.done)
{
m_Memories.Remove(agent.Info.id);
}
for (var j = 0; j < memorySize; j++)
{
tensorProxy.data[agentIndex, j] = 0;
}
agentIndex++;
continue;
}

{
var offset = memorySize * m_MemoryIndex;
List<float> memory;
if (agent.Info.done)
{
m_Memories.Remove(agent.Info.id);
}
for (var j = 0; j < memorySize; j++)
{
tensorProxy.data[agentIndex, j] = 0;
}
agentIndex++;
continue;
}

1001
demos/Expert3DBall.demo
文件差异内容过多而无法显示
查看文件

1001
demos/Expert3DBallHard.demo
文件差异内容过多而无法显示
查看文件

366
demos/ExpertBasic.demo


 ExpertBasicI -��W?*: BasicLearning�
P�?"P���������jW
 ExpertBasicI -��W?*: BasicLearningn
dP���������jW
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=�p}?@P���������jW
P�?
@u
k=�p}?@P���������jW
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=�p}?@P���������jW
P�?
@u
k=�p}?@P���������jW
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=�p}?@P���������jW
P�?
@u
k=�p}?@P���������jW
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=�p}?@P���������jW
P�?
@u
k=�p}?@P���������jW
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=�p}?@P���������jW
P�?
@u
k=�p}?@P���������jW
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=�p}?@P���������jW
P�?
@u
k=�p}?@P���������jW
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=�p}?@P���������jW
P�?
@u
k=�p}?@P���������jW
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=�p}?@P���������jW
P�?
@u
k=�p}?@P���������jW
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=�p}?@P���������jW
P�?
@u
k=�p}?@P���������jW
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=�p}?@P���������jW
P�?
@u
k=�p}?@P���������jW
P�?�
P�?"@=
P�?
@s
i=
P�?�
P�?"@=
P�?
@m
i=
P�?
P�?

510
demos/ExpertBouncer.demo


 ExpertBouncer` -�ćA ***0:BouncerLearning�
H~� ��
o?>�K@Dp�?l`@6��?" P���������jO
 ExpertBouncer` -�ćA ***0:BouncerLearningn
\P���������jO
o?>�K@Dp�?l`@6��?�
H~� ��
o?>�K@Dp�?l`@6��?^ @��t?xXO?���@.5��" ��>C���X�=6�|?P���������jO
o?>�K@Dp�?l`@6��?
��>C���X�s
a=6�|?P���������jO
o?>�K@Dp�?l`@6��?^ @��t?xXO?���@.5���
H~� ��
o?>�K@Dp�?l`@6��?^ @��t?xXO?��о��@.5���� ���G?&����*�W��@��" �*�����1�о=�i}?P���������jO
o?>�K@Dp�?l`@6��?^ @��t?xXO?���@.5��
�*�����1�оs
a=�i}?P���������jO
o?>�K@Dp�?l`@6��?^ @��t?xXO?���@.5���� ���G?&����*�W��@���
H^ @��t?xXO?��о��@.5���� ���G?&����*�W��@��K�6�B�6?W鿶�X?�]@���" �o&�ո>|>=��?P���������jO
o?>�K@Dp�?l`@6��?^ @��t?xXO?���@.5���� ���G?&����*�W��@��
�o&�ո>|>s
a=��?P���������jO
H^ @��t?xXO?��о��@.5���� ���G?&����*�W��@��K�6�B�6?W鿶�X?�]@����
H�� ���G?&����*�W��@��K�6�B�6?W鿶�X?�]@������?PXQ?���'#+���%@���?" y�>/�+��.þ=��|?P���������jO
H^ @��t?xXO?��о��@.5���� ���G?&����*�W��@��K�6�B�6?W鿶�X?�]@���
y�>/�+��.þs
a=��|?P���������jO
H�� ���G?&����*�W��@��K�6�B�6?W鿶�X?�]@������?PXQ?���'#+���%@���?�
HK�6�B�6?W鿶�X?�]@������?PXQ?���'#+���%@���?n��:�[?�@�-#�V�>@�ӕ@" �f��!о�%?=Qj|?P���������jO
H�� ���G?&����*�W��@��K�6�B�6?W鿶�X?�]@������?PXQ?���'#+���%@���?
�f��!о�%?s
a=Qj|?P���������jO
HK�6�B�6?W鿶�X?�]@������?PXQ?���'#+���%@���?n��:�[?�@�-#�V�>@�ӕ@�
H���?PXQ?���'#+���%@���?n��:�[?�@�-#�V�>@�ӕ@Iڼ�]�?���@LPA@=;�@Fe~?" ^��>[#����>=Lp}?P���������jO
HK�6�B�6?W鿶�X?�]@������?PXQ?���'#+���%@���?n��:�[?�@�-#�V�>@�ӕ@
^��>[#����>s
a=Lp}?P���������jO
H���?PXQ?���'#+���%@���?n��:�[?�@�-#�V�>@�ӕ@Iڼ�]�?���@LPA@=;�@Fe~?�
Hn��:�[?�@�-#�V�>@�ӕ@Iڼ�]�?���@LPA@=;�@Fe~?��a@�m?�{�"��?k1@Rc�@" ��>���_��=��}?P���������jO
H���?PXQ?���'#+���%@���?n��:�[?�@�-#�V�>@�ӕ@Iڼ�]�?���@LPA@=;�@Fe~?
��>���_��s
a=��}?P���������jO
Hn��:�[?�@�-#�V�>@�ӕ@Iڼ�]�?���@LPA@=;�@Fe~?��a@�m?�{�"��?k1@Rc�@�
HIڼ�]�?���@LPA@=;�@Fe~?��a@�m?�{�"��?k1@Rc�@r��?H0c?Yc�@�c⿏��@���" q%��Z��+V?=��y?P���������jO
Hn��:�[?�@�-#�V�>@�ӕ@Iڼ�]�?���@LPA@=;�@Fe~?��a@�m?�{�"��?k1@Rc�@
q%��Z��+V?s
a=��y?P���������jO
HIڼ�]�?���@LPA@=;�@Fe~?��a@�m?�{�"��?k1@Rc�@r��?H0c?Yc�@�c⿏��@����
H��a@�m?�{�"��?k1@Rc�@r��?H0c?Yc�@�c⿏��@���Dl����L?8(�� 3��]�@ƭV?" l����B��S�=l�{?P���������jO
HIڼ�]�?���@LPA@=;�@Fe~?��a@�m?�{�"��?k1@Rc�@r��?H0c?Yc�@�c⿏��@���
l����B��S�s
a=l�{?P���������jO
H��a@�m?�{�"��?k1@Rc�@r��?H0c?Yc�@�c⿏��@���Dl����L?8(�� 3��]�@ƭV?�
Hr��?H0c?Yc�@�c⿏��@���Dl����L?8(�� 3��]�@ƭV?���}�7?+-�? j�?�>�@�>" +Xp>��(>���>=E�~?P���������jO
H��a@�m?�{�"��?k1@Rc�@r��?H0c?Yc�@�c⿏��@���Dl����L?8(�� 3��]�@ƭV?
+Xp>��(>���>s
a=E�~?P���������jO
Hr��?H0c?Yc�@�c⿏��@���Dl����L?8(�� 3��]�@ƭV?���}�7?+-�? j�?�>�@�>�
HDl����L?8(�� 3��]�@ƭV?���}�7?+-�? j�?�>�@�>��T?v#m?���S_O��ֵ@ks�@" 7vR>.��}�@�=g+?P���������jO
Hr��?H0c?Yc�@�c⿏��@���Dl����L?8(�� 3��]�@ƭV?���}�7?+-�? j�?�>�@�>
7vR>.��}�@�s
a=g+?P���������jO
HDl����L?8(�� 3��]�@ƭV?���}�7?+-�? j�?�>�@�>��T?v#m?���S_O��ֵ@ks�@�
H���}�7?+-�? j�?�>�@�>��T?v#m?���S_O��ֵ@ks�@J���u�J?٥�@W��x��@��z?" �i�]qZ::��>=b�}?P���������jO
HDl����L?8(�� 3��]�@ƭV?���}�7?+-�? j�?�>�@�>��T?v#m?���S_O��ֵ@ks�@
�i�]qZ::��>s
a=b�}?P���������jO
H���}�7?+-�? j�?�>�@�>��T?v#m?���S_O��ֵ@ks�@J���u�J?٥�@W��x��@��z?�
H��T?v#m?���S_O��ֵ@ks�@J���u�J?٥�@W��x��@��z?(c&�$�M?���N�;�,k@>b�@" ��>ސ��)�6�=�p|?P���������jO
H���}�7?+-�? j�?�>�@�>��T?v#m?���S_O��ֵ@ks�@J���u�J?٥�@W��x��@��z?
��>ސ��)�6�s
a=�p|?P���������jO
H��T?v#m?���S_O��ֵ@ks�@J���u�J?٥�@W��x��@��z?(c&�$�M?���N�;�,k@>b�@�
HJ���u�J?٥�@W��x��@��z?(c&�$�M?���N�;�,k@>b�@�f���e?&Y�@T@=G@%�#�" � > �˾��?=�~?P���������jO
H��T?v#m?���S_O��ֵ@ks�@J���u�J?٥�@W��x��@��z?(c&�$�M?���N�;�,k@>b�@
� > �˾��?s
a=�~?P���������jO
HJ���u�J?٥�@W��x��@��z?(c&�$�M?���N�;�,k@>b�@�f���e?&Y�@T@=G@%�#��
H(c&�$�M?���N�;�,k@>b�@�f���e?&Y�@T@=G@%�#�)X�@ڵ}?d{�J��4T@GD��" ���>1�!�~ �=]\|?P���������jO
HJ���u�J?٥�@W��x��@��z?(c&�$�M?���N�;�,k@>b�@�f���e?&Y�@T@=G@%�#�
���>1�!�~ �s
a=]\|?P���������jO
H(c&�$�M?���N�;�,k@>b�@�f���e?&Y�@T@=G@%�#�)X�@ڵ}?d{�J��4T@GD���
H�f���e?&Y�@T@=G@%�#�)X�@ڵ}?d{�J��4T@GD��Ja��c�I?�S뾤Qk���Q@J��?" ��W��$�9�>=�!{?P���������jO
H(c&�$�M?���N�;�,k@>b�@�f���e?&Y�@T@=G@%�#�)X�@ڵ}?d{�J��4T@GD��
��W��$�9�>s
a=�!{?P���������jO
H�f���e?&Y�@T@=G@%�#�)X�@ڵ}?d{�J��4T@GD��Ja��c�I?�S뾤Qk���Q@J��?�
H)X�@ڵ}?d{�J��4T@GD��Ja��c�I?�S뾤Qk���Q@J��?E�>��Rp? ��@r�s��@���" ��>iI)�<A?=��|?P���������jO
H�f���e?&Y�@T@=G@%�#�)X�@ڵ}?d{�J��4T@GD��Ja��c�I?�S뾤Qk���Q@J��?
��>iI)�<A?s
a=��|?P���������jO
H)X�@ڵ}?d{�J��4T@GD��Ja��c�I?�S뾤Qk���Q@J��?E�>��Rp? ��@r�s��@����
HJa��c�I?�S뾤Qk���Q@J��?E�>��Rp? ��@r�s��@���ñ��f8R?w�!�]^�K$@�4 >" �?�i�q���H�=%ky?P���������jO
H)X�@ڵ}?d{�J��4T@GD��Ja��c�I?�S뾤Qk���Q@J��?E�>��Rp? ��@r�s��@���
�?�i�q���H�s
a=%ky?P���������jO
HJa��c�I?�S뾤Qk���Q@J��?E�>��Rp? ��@r�s��@���ñ��f8R?w�!�]^�K$@�4 >�
Hδ�@@x��?�@{��@��j�" ��n=`��چ�>=~?@P���������jO
HJa��c�I?�S뾤Qk���Q@J��?E�>��Rp? ��@r�s��@���ñ��f8R?w�!�]^�K$@�4 >
��n=`��چ�>u
c=~?@P���������jO
Hδ�@@x��?�@{��@��j��
Hδ�@@x��?�@{��@��j�*�����W?�.�S @FԀ@���@" �+^� �m�bѾ=~cx?P���������jO
Hδ�@@x��?�@{��@��j�
�+^� �m�bѾs
a=~cx?P���������jO
Hδ�@@x��?�@{��@��j�*�����W?�.�S @FԀ@���@�
Hδ�@@x��?�@{��@��j�*�����W?�.�S @FԀ@���@���@��U?4&�@��8@�(�@��\@" ��i?�"��(?=y?P���������jO
Hδ�@@x��?�@{��@��j�*�����W?�.�S @FԀ@���@
��i?�"��(?s
a=y?P���������jO
Hδ�@@x��?�@{��@��j�*�����W?�.�S @FԀ@���@���@��U?4&�@��8@�(�@��\@�
H*�����W?�.�S @FԀ@���@���@��U?4&�@��8@�(�@��\@����=�a?�ޏ?ȓ}>��@��" ҄�i�p�Y܊�=�I�?P���������jO
Hδ�@@x��?�@{��@��j�*�����W?�.�S @FԀ@���@���@��U?4&�@��8@�(�@��\@
҄�i�p�Y܊�s
a=�I�?P���������jO
H*�����W?�.�S @FԀ@���@���@��U?4&�@��8@�(�@��\@����=�a?�ޏ?ȓ}>��@Ό
H���@��U?4&�@��8@�(�@��\@����=�a?�ޏ?ȓ}>��@��$?>�u?^�����.@�� @f�'�" Z�.>ZJ�H�L�=��?P���������jO
H*�����W?�.�S @FԀ@���@���@��U?4&�@��8@�(�@��\@����=�a?�ޏ?ȓ}>��@��
Z�.>ZJ�H�L�s
a=��?P���������jO
H���@��U?4&�@��8@�(�@��\@����=�a?�ޏ?ȓ}>��@��$?>�u?^�����.@�� @f�'��
H����=�a?�ޏ?ȓ}>��@��$?>�u?^�����.@�� @f�'���;@ʋV?��>�� ����@����" ��_>��g�l�X>=|?P���������jO
H���@��U?4&�@��8@�(�@��\@����=�a?�ޏ?ȓ}>��@��$?>�u?^�����.@�� @f�'�
��_>��g�l�X>s
a=|?P���������jO
H����=�a?�ޏ?ȓ}>��@��$?>�u?^�����.@�� @f�'���;@ʋV?��>�� ����@�����
H$?>�u?^�����.@�� @f�'���;@ʋV?��>�� ����@���������R?����%@�Zn@H�j�" �*�
4�<j��=\n}?P���������jO
H����=�a?�ޏ?ȓ}>��@��$?>�u?^�����.@�� @f�'���;@ʋV?��>�� ����@����
�*�
4�<j��s
a=\n}?P���������jO
H$?>�u?^�����.@�� @f�'���;@ʋV?��>�� ����@���������R?����%@�Zn@H�j��
H��;@ʋV?��>�� ����@���������R?����%@�Zn@H�j���t?0�\?��^��%@�Zn@H�j�" �-�>=\о�l�>=C �P���������jO
H$?>�u?^�����.@�� @f�'���;@ʋV?��>�� ����@���������R?����%@�Zn@H�j�
�-�>=\о�l�>s
a=C �P���������jO
H��;@ʋV?��>�� ����@���������R?����%@�Zn@H�j���t?0�\?��^��%@�Zn@H�j��
H�����R?����%@�Zn@H�j���t?0�\?��^��%@�Zn@H�j��z?B1m?��t��3���M�@�)@" �t�:8��&��=��~?P���������jO
H��;@ʋV?��>�� ����@���������R?����%@�Zn@H�j���t?0�\?��^��%@�Zn@H�j�
�t�:8��&��s
a=��~?P���������jO
H�����R?����%@�Zn@H�j���t?0�\?��^��%@�Zn@H�j��z?B1m?��t��3���M�@�)@�
H��t?0�\?��^��%@�Zn@H�j��z?B1m?��t��3���M�@�)@ �D�q?c?A�3���M�@�)@" �H/�K�u=��^?=�ڧ�P���������jO
H�����R?����%@�Zn@H�j���t?0�\?��^��%@�Zn@H�j��z?B1m?��t��3���M�@�)@
�H/�K�u=��^?s
a=�ڧ�P���������jO
H��t?0�\?��^��%@�Zn@H�j��z?B1m?��t��3���M�@�)@ �D�q?c?A�3���M�@�)@�
H�z?B1m?��t��3���M�@�)@ �D�q?c?A�3���M�@�)@�����s?i"�?�$�5�@�z��" �?�����1)�=�{?P���������jO
H��t?0�\?��^��%@�Zn@H�j��z?B1m?��t��3���M�@�)@ �D�q?c?A�3���M�@�)@
�?�����1)�s
a=�{?P���������jO
H�z?B1m?��t��3���M�@�)@ �D�q?c?A�3���M�@�)@�����s?i"�?�$�5�@�z���
H �D�q?c?A�3���M�@�)@�����s?i"�?�$�5�@�z��Xd���R?P�[�X�>5ja@�r�" 1W��#^���׾=�{?P���������jO
H�z?B1m?��t��3���M�@�)@ �D�q?c?A�3���M�@�)@�����s?i"�?�$�5�@�z��
1W��#^���׾s
a=�{?P���������jO
H �D�q?c?A�3���M�@�)@�����s?i"�?�$�5�@�z��Xd���R?P�[�X�>5ja@�r��
H�����s?i"�?�$�5�@�z��Xd���R?P�[�X�>5ja@�r� ��?� s?�鸿��(�z��@ƨG�" ��?�~��)>=�F}?P���������jO
H �D�q?c?A�3���M�@�)@�����s?i"�?�$�5�@�z��Xd���R?P�[�X�>5ja@�r�
��?�~��)>s
a=�F}?P���������jO
H�����s?i"�?�$�5�@�z��Xd���R?P�[�X�>5ja@�r� ��?� s?�鸿��(�z��@ƨG��
HXd���R?P�[�X�>5ja@�r� ��?� s?�鸿��(�z��@ƨG�lX���u? /���`�1C@�v�@" q^�����,D�=�[?P���������jO
H�����s?i"�?�$�5�@�z��Xd���R?P�[�X�>5ja@�r� ��?� s?�鸿��(�z��@ƨG�
q^�����,D�s
a=�[?P���������jO
HXd���R?P�[�X�>5ja@�r� ��?� s?�鸿��(�z��@ƨG�lX���u? /���`�1C@�v�@�
H ��?� s?�鸿��(�z��@ƨG�lX���u? /���`�1C@�v�@�l}�J'J?~�A�`�1C@�v�@" �����=�_^?=�N�P���������jO
HXd���R?P�[�X�>5ja@�r� ��?� s?�鸿��(�z��@ƨG�lX���u? /���`�1C@�v�@
�����=�_^?s
a=�N�P���������jO
H ��?� s?�鸿��(�z��@ƨG�lX���u? /���`�1C@�v�@�l}�J'J?~�A�`�1C@�v�@�
HlX���u? /���`�1C@�v�@�l}�J'J?~�A�`�1C@�v�@�-����w?��@i6����@� ��" � 2�]dc�ne��=��{?P���������jO
H ��?� s?�鸿��(�z��@ƨG�lX���u? /���`�1C@�v�@�l}�J'J?~�A�`�1C@�v�@
� 2�]dc�ne��s
a=��{?P���������jO
HlX���u? /���`�1C@�v�@�l}�J'J?~�A�`�1C@�v�@�-����w?��@i6����@� ���
H�l}�J'J?~�A�`�1C@�v�@�-����w?��@i6����@� ��,$��pb?RKI��~?vk�@���?" w����ž�p
�=�~?P���������jO
HlX���u? /���`�1C@�v�@�l}�J'J?~�A�`�1C@�v�@�-����w?��@i6����@� ��
w����ž�p
�s
a=�~?P���������jO
H�l}�J'J?~�A�`�1C@�v�@�-����w?��@i6����@� ��,$��pb?RKI��~?vk�@���?�
H�-����w?��@i6����@� ��,$��pb?RKI��~?vk�@���?ܒt@S?��?�~?vk�@���?" �/5?;�׾3�>=RM\�P���������jO
H�l}�J'J?~�A�`�1C@�v�@�-����w?��@i6����@� ��,$��pb?RKI��~?vk�@���?
�/5?;�׾3�>s
a=RM\�P���������jO
H�-����w?��@i6����@� ��,$��pb?RKI��~?vk�@���?ܒt@S?��?�~?vk�@���?�
H,$��pb?RKI��~?vk�@���?ܒt@S?��?�~?vk�@���?�V����z?�i@�o�?��@���" ����"��)�>=�2?P���������jO
H�-����w?��@i6����@� ��,$��pb?RKI��~?vk�@���?ܒt@S?��?�~?vk�@���?
����"��)�>s
a=�2?P���������jO
H,$��pb?RKI��~?vk�@���?ܒt@S?��?�~?vk�@���?�V����z?�i@�o�?��@�꿹
Hܒt@S?��?�~?vk�@���?�V����z?�i@�o�?��@�����@l��?�چ�F�?���@����" �>C��C;�=�D}?P���������jO
H,$��pb?RKI��~?vk�@���?ܒt@S?��?�~?vk�@���?�V����z?�i@�o�?��@���
�>C��C;�s
a=�D}?P���������jO
Hܒt@S?��?�~?vk�@���?�V����z?�i@�o�?��@�����@l��?�چ�F�?���@�����
H]ۙ�@B�Q�H-m@�9�@����" ��|�%���X�ȼ=�~?@P���������jO
Hܒt@S?��?�~?vk�@���?�V����z?�i@�o�?��@�����@l��?�چ�F�?���@����
��|�%���X�ȼu
c=�~?@P���������jO
H]ۙ�@B�Q�H-m@�9�@�����
H]ۙ�@B�Q�H-m@�9�@�����a�@x~O?)���&`5�u�V@u�2�" ϓ[? r��$��=�q|?P���������jO
H]ۙ�@B�Q�H-m@�9�@����
ϓ[? r��$��s
a=�q|?P���������jO
H]ۙ�@B�Q�H-m@�9�@�����a�@x~O?)���&`5�u�V@u�2��
H]ۙ�@B�Q�H-m@�9�@�����a�@x~O?)���&`5�u�V@u�2��l���P?+���cQ%����@����" �5d�N��tx>=%U{?P���������jO
H]ۙ�@B�Q�H-m@�9�@�����a�@x~O?)���&`5�u�V@u�2�
�5d�N��tx>s
a=%U{?P���������jO
H]ۙ�@B�Q�H-m@�9�@�����a�@x~O?)���&`5�u�V@u�2��l���P?+���cQ%����@�����
H�a�@x~O?)���&`5�u�V@u�2��l���P?+���cQ%����@������(�!}?�U�������Y�@k� @" ?�=-��'���=0�?P���������jO
H]ۙ�@B�Q�H-m@�9�@�����a�@x~O?)���&`5�u�V@u�2��l���P?+���cQ%����@����
?�=-��'���s
a=0�?P���������jO
H�a�@x~O?)���&`5�u�V@u�2��l���P?+���cQ%����@������(�!}?�U�������Y�@k� @�
H�l���P?+���cQ%����@������(�!}?�U�������Y�@k� @il��r>M?�X�@��5@��@3S��" k�J�������\?=�|?P���������jO
H�a�@x~O?)���&`5�u�V@u�2��l���P?+���cQ%����@������(�!}?�U�������Y�@k� @
k�J�������\?s
a=�|?P���������jO
H�l���P?+���cQ%����@������(�!}?�U�������Y�@k� @il��r>M?�X�@��5@��@3S⿹
H��(�!}?�U�������Y�@k� @il��r>M?�X�@��5@��@3S���u�@�k?����+����@n�?" �;>?[;����Y�="z?P���������jO
H�l���P?+���cQ%����@������(�!}?�U�������Y�@k� @il��r>M?�X�@��5@��@3S��
�;>?[;����Y�s
a="z?P���������jO
H��(�!}?�U�������Y�@k� @il��r>M?�X�@��5@��@3S���u�@�k?����+����@n�?�
Hil��r>M?�X�@��5@��@3S���u�@�k?����+����@n�?�����p?�~@,�þjZ�@���" �����Z���"?=z|?P���������jO
H��(�!}?�U�������Y�@k� @il��r>M?�X�@��5@��@3S���u�@�k?����+����@n�?
�����Z���"?s
a=z|?P���������jO
Hil��r>M?�X�@��5@��@3S���u�@�k?����+����@n�?�����p?�~@,�þjZ�@����
H�u�@�k?����+����@n�?�����p?�~@,�þjZ�@����]G@^�`?����:��x��@�T�@" Ī�>�/J=.D��=�~?P���������jO
Hil��r>M?�X�@��5@��@3S���u�@�k?����+����@n�?�����p?�~@,�þjZ�@���
Ī�>�/J=.D��s
a=�~?P���������jO
H�u�@�k?����+����@n�?�����p?�~@,�þjZ�@����]G@^�`?����:��x��@�T�@�
H�����p?�~@,�þjZ�@����]G@^�`?����:��x��@�T�@(���f?B��@O�>@�N�@� ��" �������?=b7}?P���������jO
H�u�@�k?����+����@n�?�����p?�~@,�þjZ�@����]G@^�`?����:��x��@�T�@
�������?s
a=b7}?P���������jO
H�����p?�~@,�þjZ�@����]G@^�`?����:��x��@�T�@(���f?B��@O�>@�N�@� ���
H�]G@^�`?����:��x��@�T�@(���f?B��@O�>@�N�@� ���ƽ@�2g?
�����4��.�@��D@" CyR?+� |�=��x?P���������jO
H�����p?�~@,�þjZ�@����]G@^�`?����:��x��@�T�@(���f?B��@O�>@�N�@� ��
CyR?+Ж� |�s
a=��x?P���������jO
�����4��.�@��D@�
H(���f?B��@O�>@�N�@� ���ƽ@�2g?
�����4��.�@��D@)>��(RE?���@:�����;@4,�?" �tj��� �%o?=ӗx?P���������jO
�����4��.�@��D@
�tj��� �%o?s
a=ӗx?P���������jO
�����4��.�@��D@)>��(RE?���@:�����;@4,�?�
H�ƽ@�2g?
�����4��.�@��D@)>��(RE?���@:�����;@4,�?�Ӟ���c?rw�?Jo��P@��" S�U>��H��X�=(|?P���������jO
�����4��.�@��D@)>��(RE?���@:�����;@4,�?
S�U>��H��X�s
a=(|?P���������jO
�����4��.�@��D@)>��(RE?���@:�����;@4,�?�Ӟ���c?rw�?Jo��P@���
H)>��(RE?���@:�����;@4,�?�Ӟ���c?rw�?Jo��P@��
���V�]?=�g�\U@@V��@�8�?" �[4=-+Y���k�=��|?P���������jO
�����4��.�@��D@)>��(RE?���@:�����;@4,�?�Ӟ���c?rw�?Jo��P@��
�[4=-+Y���k�s
a=��|?P���������jO
���V�]?=�g�\U@@V��@�8�?�
H�Ӟ���c?rw�?Jo��P@��
���V�]?=�g�\U@@V��@�8�?(T�@��Z?��]@U��Wj�@�"�?" ��P?H��rt�>=yX|?P���������jO
���V�]?=�g�\U@@V��@�8�?
��P?H��rt�>s
a=yX|?P���������jO
���V�]?=�g�\U@@V��@�8�?(T�@��Z?��]@U��Wj�@�"�?�
H
���V�]?=�g�\U@@V��@�8�?(T�@��Z?��]@U��Wj�@�"�?D5�f_Y?���>�Ǔ�J�@w�޿" ��|�Ԃ�>��9�=o{?P���������jO
���V�]?=�g�\U@@V��@�8�?(T�@��Z?��]@U��Wj�@�"�?
��|�Ԃ�>��9�s
a=o{?P���������jO
���V�]?=�g�\U@@V��@�8�?(T�@��Z?��]@U��Wj�@�"�?D5�f_Y?���>�Ǔ�J�@w�޿�
H(T�@��Z?��]@U��Wj�@�"�?D5�f_Y?���>�Ǔ�J�@w�޿�{�@|�N?x_�I@ ��@)L�@" KG^?׭�>U�'�=y�{?P���������jO
���V�]?=�g�\U@@V��@�8�?(T�@��Z?��]@U��Wj�@�"�?D5�f_Y?���>�Ǔ�J�@w�޿
KG^?׭�>U�'�s
a=y�{?P���������jO
H(T�@��Z?��]@U��Wj�@�"�?D5�f_Y?���>�Ǔ�J�@w�޿�{�@|�N?x_�I@ ��@)L�@�
HD5�f_Y?���>�Ǔ�J�@w�޿�{�@|�N?x_�I@ ��@)L�@�f���M?A�@.�?����@��" s:ᄍ�����,?=��|?P���������jO
H(T�@��Z?��]@U��Wj�@�"�?D5�f_Y?���>�Ǔ�J�@w�޿�{�@|�N?x_�I@ ��@)L�@
s:ᄍ�����,?s
a=��|?P���������jO
HD5�f_Y?���>�Ǔ�J�@w�޿�{�@|�N?x_�I@ ��@)L�@�f���M?A�@.�?����@���
H�{�@|�N?x_�I@ ��@)L�@�f���M?A�@.�?����@��0JG�2��?�s�>.�?����@��" �<C���&���
�=\;N�P���������jO
HD5�f_Y?���>�Ǔ�J�@w�޿�{�@|�N?x_�I@ ��@)L�@�f���M?A�@.�?����@��
�<C���&���
�s
a=\;N�P���������jO
H�{�@|�N?x_�I@ ��@)L�@�f���M?A�@.�?����@��0JG�2��?�s�>.�?����@���
H�f���M?A�@.�?����@��0JG�2��?�s�>.�?����@�� }!�J�R?3!O���@���@�O�@" �M=s�-���T�=�~?P���������jO
H�{�@|�N?x_�I@ ��@)L�@�f���M?A�@.�?����@��0JG�2��?�s�>.�?����@��
�M=s�-���T�s
a=�~?P���������jO
H�f���M?A�@.�?����@��0JG�2��?�s�>.�?����@�� }!�J�R?3!O���@���@�O�@�
H0JG�2��?�s�>.�?����@�� }!�J�R?3!O���@���@�O�@�E�@�^?P��@X:@,^�@��0�" c3?���� �?=��{?P���������jO
H�f���M?A�@.�?����@��0JG�2��?�s�>.�?����@�� }!�J�R?3!O���@���@�O�@
c3?���� �?s
a=��{?P���������jO
H0JG�2��?�s�>.�?����@�� }!�J�R?3!O���@���@�O�@�E�@�^?P��@X:@,^�@��0��
Ha�<�@���?B@�@� �?" W���E*���;t�=T���@P���������jO
H0JG�2��?�s�>.�?����@�� }!�J�R?3!O���@���@�O�@�E�@�^?P��@X:@,^�@��0�
W���E*���;t�u
c=T���@P���������jO
Ha�<�@���?B@�@� �?�
Ha�<�@���?B@�@� �?~�q@jI�@n��??B@�@� �?" �.,?�.r�6v�>=a�#�P���������jO
Ha�<�@���?B@�@� �?
�.,?�.r�6v�>s
a=a�#�P���������jO
Ha�<�@���?B@�@� �?~�q@jI�@n��??B@�@� �?�
Ha�<�@���?B@�@� �?~�q@jI�@n��??B@�@� �?��l���p?O@�k@��@��Ŀ"
1����O����==X�~?P���������jO
Ha�<�@���?B@�@� �?~�q@jI�@n��??B@�@� �?
1����O����=s
a=X�~?P���������jO
Ha�<�@���?B@�@� �?~�q@jI�@n��??B@�@� �?��l���p?O@�k@��@��Ŀ�
H~�q@jI�@n��??B@�@� �?��l���p?O@�k@��@��ĿVO�@�m�?4����<�@r{�" ��5?�~.�%�ܾ=�}?P���������jO
Ha�<�@���?B@�@� �?~�q@jI�@n��??B@�@� �?��l���p?O@�k@��@��Ŀ
��5?�~.�%�ܾs
a=�}?P���������jO
H~�q@jI�@n��??B@�@� �?��l���p?O@�k@��@��ĿVO�@�m�?4����<�@r{��
H��l���p?O@�k@��@��ĿVO�@�m�?4����<�@r{�9���?��?)gW���<�@r{�" 0�v��㪾�*B==fM��P���������jO
H~�q@jI�@n��??B@�@� �?��l���p?O@�k@��@��ĿVO�@�m�?4����<�@r{�
0�v��㪾�*B=s
a=fM��P���������jO
H��l���p?O@�k@��@��ĿVO�@�m�?4����<�@r{�9���?��?)gW���<�@r{��
HVO�@�m�?4����<�@r{�9���?��?)gW���<�@r{�>���S�?LA���.�?R��@H��" �۽<��r���==��?P���������jO
H��l���p?O@�k@��@��ĿVO�@�m�?4����<�@r{�9���?��?)gW���<�@r{�
�۽<��r���=s
a=��?P���������jO
HVO�@�m�?4����<�@r{�9���?��?)gW���<�@r{�>���S�?LA���.�?R��@H���
H9���?��?)gW���<�@r{�>���S�?LA���.�?R��@H�����@v(x?�_s����B?�@gj:�" c�B?��μL1��=^u}?P���������jO
HVO�@�m�?4����<�@r{�9���?��?)gW���<�@r{�>���S�?LA���.�?R��@H��
c�B?��μL1��s
a=^u}?P���������jO
H9���?��?)gW���<�@r{�>���S�?LA���.�?R��@H�����@v(x?�_s����B?�@gj:��
H>���S�?LA���.�?R��@H�����@v(x?�_s����B?�@gj:�]g���K?�/���k@ ��@LlC@" l�W����>���='i|?P���������jO
H9���?��?)gW���<�@r{�>���S�?LA���.�?R��@H�����@v(x?�_s����B?�@gj:�
l�W����>���s
a='i|?P���������jO
H>���S�?LA���.�?R��@H�����@v(x?�_s����B?�@gj:�]g���K?�/���k@ ��@LlC@�
H���@v(x?�_s����B?�@gj:�]g���K?�/���k@ ��@LlC@�t�@�"E?��A�k@ ��@LlC@" ��w?�^�>2~R?=���P���������jO
H>���S�?LA���.�?R��@H�����@v(x?�_s����B?�@gj:�]g���K?�/���k@ ��@LlC@
��w?�^�>2~R?s
a=���P���������jO
H���@v(x?�_s����B?�@gj:�]g���K?�/���k@ ��@LlC@�t�@�"E?��A�k@ ��@LlC@�
H]g���K?�/���k@ ��@LlC@�t�@�"E?��A�k@ ��@LlC@�E�?�c?���?����`��@jZ.?" �3��4���=${?P���������jO
H���@v(x?�_s����B?�@gj:�]g���K?�/���k@ ��@LlC@�t�@�"E?��A�k@ ��@LlC@
�3��4���s
a=${?P���������jO
H]g���K?�/���k@ ��@LlC@�t�@�"E?��A�k@ ��@LlC@�E�?�c?���?����`��@jZ.?�
H�t�@�"E?��A�k@ ��@LlC@�E�?�c?���?����`��@jZ.?�����tp?�< @m�l�HK�@S-�" *q(�3�V�wD==��}?P���������jO
H]g���K?�/���k@ ��@LlC@�t�@�"E?��A�k@ ��@LlC@�E�?�c?���?����`��@jZ.?
*q(�3�V�wD=s
a=��}?P���������jO
H�t�@�"E?��A�k@ ��@LlC@�E�?�c?���?����`��@jZ.?�����tp?�< @m�l�HK�@S-��
H�E�?�c?���?����`��@jZ.?�����tp?�< @m�l�HK�@S-�����)G�?`������?�7�@C�@" ���>ۉ+� ���=�S~?P���������jO
H�t�@�"E?��A�k@ ��@LlC@�E�?�c?���?����`��@jZ.?�����tp?�< @m�l�HK�@S-�
���>ۉ+� ���s
a=�S~?P���������jO
H�E�?�c?���?����`��@jZ.?�����tp?�< @m�l�HK�@S-�����)G�?`������?�7�@C�@�
H�����tp?�< @m�l�HK�@S-�����)G�?`������?�7�@C�@9�Z@��a?2L9@|M ��Z�@��˾" ���>��o��o?=���?P���������jO
H�E�?�c?���?����`��@jZ.?�����tp?�< @m�l�HK�@S-�����)G�?`������?�7�@C�@
���>��o��o?s
a=���?P���������jO
H�����tp?�< @m�l�HK�@S-�����)G�?`������?�7�@C�@9�Z@��a?2L9@|M ��Z�@��˾�
H����)G�?`������?�7�@C�@9�Z@��a?2L9@|M ��Z�@��˾U��zm`?����0��@r2�@Κ�" T�*�'��<�E��=|5}?P���������jO
H�����tp?�< @m�l�HK�@S-�����)G�?`������?�7�@C�@9�Z@��a?2L9@|M ��Z�@��˾
T�*�'��<�E��s
a=|5}?P���������jO
H����)G�?`������?�7�@C�@9�Z@��a?2L9@|M ��Z�@��˾U��zm`?����0��@r2�@Κ��
H9�Z@��a?2L9@|M ��Z�@��˾U��zm`?����0��@r2�@Κ�T|Af�N?</W��,!�c��@�:��" e�~?]{>;..==փ{?P���������jO
H����)G�?`������?�7�@C�@9�Z@��a?2L9@|M ��Z�@��˾U��zm`?����0��@r2�@Κ�
e�~?]{>;..=s
a=փ{?P���������jO
H9�Z@��a?2L9@|M ��Z�@��˾U��zm`?����0��@r2�@Κ�T|Af�N?</W��,!�c��@�:���
HU��zm`?����0��@r2�@�T|Af�N?</W��,!�c��@�:��Yb���]?�����,!�c��@�:��" a=q�=q�<K�z�=E���P���������jO
H9�Z@��a?2L9@|M ��Z�@��˾U��zm`?����0��@r2�@Κ�T|Af�N?</W��,!�c��@�:��
a=q�=q�<K�z�s
a=E���P���������jO
HU��zm`?����0��@r2�@�T|Af�N?</W��,!�c��@�:��Yb���]?�����,!�c��@�:���
HT|Af�N?</W��,!�c��@�:��Yb���]?�����,!�c��@�:��i�y���9?�ݵ��,!�c��@�:��" � _=�O�9���==�xH�P���������jO
HU��zm`?����0��@r2�@�T|Af�N?</W��,!�c��@�:��Yb���]?�����,!�c��@�:��
� _=�O�9���=s
a=�xH�P���������jO
HT|Af�N?</W��,!�c��@�:��Yb���]?�����,!�c��@�:��i�y���9?�ݵ��,!�c��@�:���
HYb���]?�����,!�c��@�:��i�y���9?�ݵ��,!�c��@�:��������r?P֊�� !��{�@:�n@" �D>����6��==-N?P���������jO
HT|Af�N?</W��,!�c��@�:��Yb���]?�����,!�c��@�:��i�y���9?�ݵ��,!�c��@�:��
�D>����6��=s
a=-N?P���������jO
HYb���]?�����,!�c��@�:��i�y���9?�ݵ��,!�c��@�:��������r?P֊�� !��{�@:�n@�
Hi�y���9?�ݵ��,!�c��@�:��������r?P֊�� !��{�@:�n@/��?K?5$�@d��>JZ�@֫�?" �8Y��[=Ē/?=��}?P���������jO
HYb���]?�����,!�c��@�:��i�y���9?�ݵ��,!�c��@�:��������r?P֊�� !��{�@:�n@
�8Y��[=Ē/?s
a=��}?P���������jO
Hi�y���9?�ݵ��,!�c��@�:��������r?P֊�� !��{�@:�n@/��?K?5$�@d��>JZ�@֫�?�
H������r?P֊�� !��{�@:�n@/��?K?5$�@d��>JZ�@֫�?`�@v\�?)+�
�W����@�'�" ��>�we�� %�=9�|?P���������jO
Hi�y���9?�ݵ��,!�c��@�:��������r?P֊�� !��{�@:�n@/��?K?5$�@d��>JZ�@֫�?
��>�we�� %�s
a=9�|?P���������jO
�W����@�'��
H�5 �@�6�?6D�@r�<@���" 0O6�Sa�d[�>=�}?@P���������jO
�W����@�'�
0O6�Sa�d[�>u
c=�}?@P���������jO
H�5 �@�6�?6D�@r�<@����
H�5 �@�6�?6D�@r�<@�����@a�h?ܿ7�6D�@r�<@���" ;Q�>�T� ���=�G�P���������jO
H�5 �@�6�?6D�@r�<@���
;Q�>�T� ���s
a=�G�P���������jO
H�5 �@�6�?6D�@r�<@�����@a�h?ܿ7�6D�@r�<@����
H�5 �@�6�?6D�@r�<@�����@a�h?ܿ7�6D�@r�<@����$�@�@?�ho��/�@U_�@:�" �5�������=Ŧ?P���������jO
H�5 �@�6�?6D�@r�<@�����@a�h?ܿ7�6D�@r�<@���
�5�������s
a=Ŧ?P���������jO
H�5 �@�6�?6D�@r�<@�����@a�h?ܿ7�6D�@r�<@����$�@�@?�ho��/�@U_�@:��
H��@a�h?ܿ7�6D�@r�<@����$�@�@?�ho��/�@U_�@:�l)>@�9O?D�l��<p>���@���@" G\"�����7H>=*�?P���������jO
H�5 �@�6�?6D�@r�<@�����@a�h?ܿ7�6D�@r�<@����$�@�@?�ho��/�@U_�@:�
G\"�����7H>s
a=*�?P���������jO
H��@a�h?ܿ7�6D�@r�<@����$�@�@?�ho��/�@U_�@:�l)>@�9O?D�l��<p>���@���@�
H�$�@�@?�ho��/�@U_�@:�l)>@�9O?D�l��<p>���@���@z�8��
:?c1A-��?'ט@ᘿ" �fž (�;{ 5?=D;}?P���������jO
H��@a�h?ܿ7�6D�@r�<@����$�@�@?�ho��/�@U_�@:�l)>@�9O?D�l��<p>���@���@
�fž (�;{ 5?s
a=D;}?P���������jO
:?c1A-��?'ט@ᘿ�
Hl)>@�9O?D�l��<p>���@���@z�8��
:?c1A-��?'ט@ᘿ� @��m?�`x��C���q@�k�?" Z��>���w�=�a{?P���������jO
:?c1A-��?'ט@ᘿ
Z��>���w�s
a=�a{?P���������jO
:?c1A-��?'ט@ᘿ� @��m?�`x��C���q@�k�?�
Hz�8��
:?c1A-��?'ט@ᘿ� @��m?�`x��C���q@�k�?;f���G[?���@/'`��B�@|�?" �0!�D�
�%�$?=^H{?P���������jO
:?c1A-��?'ט@ᘿ� @��m?�`x��C���q@�k�?
�0!�D�
�%�$?s
a=^H{?P���������jO
:?c1A-��?'ט@ᘿ� @��m?�`x��C���q@�k�?;f���G[?���@/'`��B�@|�?�
H� @��m?�`x��C���q@�k�?;f���G[?���@/'`��B�@|�?%O���S?�<?�_{@�K@��?" #�*>�:���|�=�z?P���������jO
:?c1A-��?'ט@ᘿ� @��m?�`x��C���q@�k�?;f���G[?���@/'`��B�@|�?
#�*>�:���|�s
a=�z?P���������jO
H� @��m?�`x��C���q@�k�?;f���G[?���@/'`��B�@|�?%O���S?�<?�_{@�K@��?�
H;f���G[?���@/'`��B�@|�?%O���S?�<?�_{@�K@��?���@��s?�=��.�?�/�@ƈ�" 3tL?�0H�����=`�z?P���������jO
H� @��m?�`x��C���q@�k�?;f���G[?���@/'`��B�@|�?%O���S?�<?�_{@�K@��?
3tL?�0H�����s
a=`�z?P���������jO
H;f���G[?���@/'`��B�@|�?%O���S?�<?�_{@�K@��?���@��s?�=��.�?�/�@ƈ��
H%O���S?�<?�_{@�K@��?���@��s?�=��.�?�/�@ƈ�_{�=v
W?J��Ą�@[�8@�Ք�" *����s �K��=��|?P���������jO
H;f���G[?���@/'`��B�@|�?%O���S?�<?�_{@�K@��?���@��s?�=��.�?�/�@ƈ�
*����s �K��s
a=��|?P���������jO
W?J��Ą�@[�8@�Ք��
H���@��s?�=��.�?�/�@ƈ�_{�=v
W?J��Ą�@[�8@�Ք�V�@�Nc?���@�N@QQտ" ��?e�K��:>=�
W?J��Ą�@[�8@�Ք�
��?e�K��:>s
a=�
W?J��Ą�@[�8@�Ք�V�@�Nc?���@�N@QQտ�
H_{�=v
W?J��Ą�@[�8@�Ք�V�@�Nc?���@�N@QQտ'?�?�`V?�)����%���@���>" �����&2�
�>=$o�?P���������jO
W?J��Ą�@[�8@�Ք�V�@�Nc?���@�N@QQտ
�����&2�
�>s
a=$o�?P���������jO
W?J��Ą�@[�8@�Ք�V�@�Nc?���@�N@QQտ'?�?�`V?�)����%���@���>�
HV�@�Nc?���@�N@QQտ'?�?�`V?�)����%���@���>���� ]r?�z�?��H����@���" :'���˻[�==W�~?P���������jO
W?J��Ą�@[�8@�Ք�V�@�Nc?���@�N@QQտ'?�?�`V?�)����%���@���>
:'���˻[�=s
a=W�~?P���������jO
HV�@�Nc?���@�N@QQտ'?�?�`V?�)����%���@���>���� ]r?�z�?��H����@����
H'?�?�`V?�)����%���@���>���� ]r?�z�?��H����@����?��G?����n<?�!@b� �" ?��>c�n>_Z��=D�}?P���������jO
HV�@�Nc?���@�N@QQտ'?�?�`V?�)����%���@���>���� ]r?�z�?��H����@���
?��>c�n>_Z��s
a=D�}?P���������jO
H'?�?�`V?�)����%���@���>���� ]r?�z�?��H����@����?��G?����n<?�!@b� ��
H���� ]r?�z�?��H����@����?��G?����n<?�!@b� �� +?��z?\#���*R�㲒@8�@" N<y{ �!��>=��}?P���������jO
H'?�?�`V?�)����%���@���>���� ]r?�z�?��H����@����?��G?����n<?�!@b� �
N<y{ �!��>s
a=��}?P���������jO
H���� ]r?�z�?��H����@����?��G?����n<?�!@b� �� +?��z?\#���*R�㲒@8�@�
H�?��G?����n<?�!@b� �� +?��z?\#���*R�㲒@8�@s�b�)S?0�@�'�uy�@��@" ���� ���+?=��|?P���������jO
H���� ]r?�z�?��H����@����?��G?����n<?�!@b� �� +?��z?\#���*R�㲒@8�@
���� ���+?s
a=��|?P���������jO
H�?��G?����n<?�!@b� �� +?��z?\#���*R�㲒@8�@s�b�)S?0�@�'�uy�@��@�
H� +?��z?\#���*R�㲒@8�@s�b�)S?0�@�'�uy�@��@Z���
!�?�G @hI_��j�@�@" � =�O*==˰�=�z?P���������jO
H�?��G?����n<?�!@b� �� +?��z?\#���*R�㲒@8�@s�b�)S?0�@�'�uy�@��@
� =�O*==˰�e
a=�z?P���������jO
!�?�G @hI_��j�@�@
!�?�G @hI_��j�@�@

995
demos/ExpertCrawlerDyn.demo
文件差异内容过多而无法显示
查看文件

1000
demos/ExpertFood.demo
文件差异内容过多而无法显示
查看文件

1000
demos/ExpertGrid.demo
文件差异内容过多而无法显示
查看文件

1001
demos/ExpertHallway.demo
文件差异内容过多而无法显示
查看文件

1001
demos/ExpertPyramid.demo
文件差异内容过多而无法显示
查看文件

1001
demos/ExpertReacher.demo
文件差异内容过多而无法显示
查看文件

1001
demos/ExpertTennis.demo
文件差异内容过多而无法显示
查看文件

5
docs/Python-API.md


the list corresponds to the n<sup>th</sup> observation of the Brain.
- **`vector_observations`** : A two dimensional numpy array of dimension `(batch
size, vector observation size)`.
- **`memories`** : A two dimensional numpy array of dimension `(batch size,
memory size)` which corresponds to the memories sent at the previous step.
- **`rewards`** : A list as long as the number of Agents using the Brain
containing the rewards they each obtained at the previous step.
- **`local_done`** : A list as long as the number of Agents using the Brain

- **`agents`** : A list of the unique ids of the Agents using the Brain.
- **`previous_actions`** : A two dimensional numpy array of dimension `(batch
size, vector action size)` if the vector action space is continuous and
`(batch size, number of branches)` if the vector action space is discrete.
Once loaded, you can use your UnityEnvironment object, which referenced by a
variable named `env` in this example, can be used in the following way:

3
ml-agents-envs/mlagents/envs/brain.py


reward=None,
agents=None,
local_done=None,
vector_action=None,
max_reached=None,
action_mask=None,
):

self.local_done = local_done
self.max_reached = max_reached
self.agents = agents
self.previous_vector_actions = vector_action
self.action_masks = action_mask
@staticmethod

reward=[x.reward if not np.isnan(x.reward) else 0 for x in agent_info_list],
agents=agents,
local_done=[x.done for x in agent_info_list],
vector_action=np.array([x.stored_vector_actions for x in agent_info_list]),
max_reached=[x.max_step_reached for x in agent_info_list],
action_mask=mask_actions,
)

23
ml-agents-envs/mlagents/envs/communicator_objects/agent_info_pb2.py


name='mlagents/envs/communicator_objects/agent_info.proto',
package='communicator_objects',
syntax='proto3',
serialized_pb=_b('\n3mlagents/envs/communicator_objects/agent_info.proto\x12\x14\x63ommunicator_objects\x1a\x34mlagents/envs/communicator_objects/observation.proto\"\xea\x01\n\x0e\x41gentInfoProto\x12\x1d\n\x15stored_vector_actions\x18\x04 \x03(\x02\x12\x0e\n\x06reward\x18\x07 \x01(\x02\x12\x0c\n\x04\x64one\x18\x08 \x01(\x08\x12\x18\n\x10max_step_reached\x18\t \x01(\x08\x12\n\n\x02id\x18\n \x01(\x05\x12\x13\n\x0b\x61\x63tion_mask\x18\x0b \x03(\x08\x12<\n\x0cobservations\x18\r \x03(\x0b\x32&.communicator_objects.ObservationProtoJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x0c\x10\rB\x1f\xaa\x02\x1cMLAgents.CommunicatorObjectsb\x06proto3')
serialized_pb=_b('\n3mlagents/envs/communicator_objects/agent_info.proto\x12\x14\x63ommunicator_objects\x1a\x34mlagents/envs/communicator_objects/observation.proto\"\xd1\x01\n\x0e\x41gentInfoProto\x12\x0e\n\x06reward\x18\x07 \x01(\x02\x12\x0c\n\x04\x64one\x18\x08 \x01(\x08\x12\x18\n\x10max_step_reached\x18\t \x01(\x08\x12\n\n\x02id\x18\n \x01(\x05\x12\x13\n\x0b\x61\x63tion_mask\x18\x0b \x03(\x08\x12<\n\x0cobservations\x18\r \x03(\x0b\x32&.communicator_objects.ObservationProtoJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x0c\x10\rB\x1f\xaa\x02\x1cMLAgents.CommunicatorObjectsb\x06proto3')
,
dependencies=[mlagents_dot_envs_dot_communicator__objects_dot_observation__pb2.DESCRIPTOR,])

containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='stored_vector_actions', full_name='communicator_objects.AgentInfoProto.stored_vector_actions', index=0,
number=4, type=2, cpp_type=6, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='reward', full_name='communicator_objects.AgentInfoProto.reward', index=1,
name='reward', full_name='communicator_objects.AgentInfoProto.reward', index=0,
number=7, type=2, cpp_type=6, label=1,
has_default_value=False, default_value=float(0),
message_type=None, enum_type=None, containing_type=None,

name='done', full_name='communicator_objects.AgentInfoProto.done', index=2,
name='done', full_name='communicator_objects.AgentInfoProto.done', index=1,
number=8, type=8, cpp_type=7, label=1,
has_default_value=False, default_value=False,
message_type=None, enum_type=None, containing_type=None,

name='max_step_reached', full_name='communicator_objects.AgentInfoProto.max_step_reached', index=3,
name='max_step_reached', full_name='communicator_objects.AgentInfoProto.max_step_reached', index=2,
number=9, type=8, cpp_type=7, label=1,
has_default_value=False, default_value=False,
message_type=None, enum_type=None, containing_type=None,

name='id', full_name='communicator_objects.AgentInfoProto.id', index=4,
name='id', full_name='communicator_objects.AgentInfoProto.id', index=3,
number=10, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,

name='action_mask', full_name='communicator_objects.AgentInfoProto.action_mask', index=5,
name='action_mask', full_name='communicator_objects.AgentInfoProto.action_mask', index=4,
number=11, type=8, cpp_type=7, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,

name='observations', full_name='communicator_objects.AgentInfoProto.observations', index=6,
name='observations', full_name='communicator_objects.AgentInfoProto.observations', index=5,
number=13, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,

oneofs=[
],
serialized_start=132,
serialized_end=366,
serialized_end=341,
)
_AGENTINFOPROTO.fields_by_name['observations'].message_type = mlagents_dot_envs_dot_communicator__objects_dot_observation__pb2._OBSERVATIONPROTO

6
ml-agents-envs/mlagents/envs/communicator_objects/agent_info_pb2.pyi


class AgentInfoProto(google___protobuf___message___Message):
DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
stored_vector_actions = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[builtin___float]
reward = ... # type: builtin___float
done = ... # type: builtin___bool
max_step_reached = ... # type: builtin___bool

def __init__(self,
*,
stored_vector_actions : typing___Optional[typing___Iterable[builtin___float]] = None,
reward : typing___Optional[builtin___float] = None,
done : typing___Optional[builtin___bool] = None,
max_step_reached : typing___Optional[builtin___bool] = None,

def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
if sys.version_info >= (3,):
def ClearField(self, field_name: typing_extensions___Literal[u"action_mask",u"done",u"id",u"max_step_reached",u"observations",u"reward",u"stored_vector_actions"]) -> None: ...
def ClearField(self, field_name: typing_extensions___Literal[u"action_mask",u"done",u"id",u"max_step_reached",u"observations",u"reward"]) -> None: ...
def ClearField(self, field_name: typing_extensions___Literal[u"action_mask",b"action_mask",u"done",b"done",u"id",b"id",u"max_step_reached",b"max_step_reached",u"observations",b"observations",u"reward",b"reward",u"stored_vector_actions",b"stored_vector_actions"]) -> None: ...
def ClearField(self, field_name: typing_extensions___Literal[u"action_mask",b"action_mask",u"done",b"done",u"id",b"id",u"max_step_reached",b"max_step_reached",u"observations",b"observations",u"reward",b"reward"]) -> None: ...

5
ml-agents-envs/mlagents/envs/mock_communicator.py


def _get_agent_infos(self):
dict_agent_info = {}
if self.is_discrete:
vector_action = [1]
else:
vector_action = [1, 2]
list_agent_info = []
vector_obs = [1, 2, 3]

list_agent_info.append(
AgentInfoProto(
reward=1,
stored_vector_actions=vector_action,
done=(i == 2),
max_step_reached=False,
id=i,

3
ml-agents/mlagents/trainers/components/reward_signals/__init__.py


self.stats_name_to_update_name: Dict[str, str] = {}
def evaluate(
self, current_info: BrainInfo, next_info: BrainInfo
self, current_info: BrainInfo, action: np.array, next_info: BrainInfo
:param action: the action that was taken between the two infos
:param next_info: The BrainInfo from the next timestep.
:return: a RewardSignalResult of (scaled intrinsic reward, unscaled intrinsic reward) provided by the generator
"""

4
ml-agents/mlagents/trainers/components/reward_signals/curiosity/signal.py


self.has_updated = False
def evaluate(
self, current_info: BrainInfo, next_info: BrainInfo
self, current_info: BrainInfo, action: np.array, next_info: BrainInfo
) -> RewardSignalResult:
"""
Evaluates the reward for the agents present in current_info given the next_info

return RewardSignalResult([], [])
mini_batch: Dict[str, np.array] = {}
# Construct the batch and use evaluate_batch
mini_batch["actions"] = next_info.previous_vector_actions
mini_batch["actions"] = action
mini_batch["done"] = np.reshape(next_info.local_done, [-1, 1])
for i in range(len(current_info.visual_observations)):
mini_batch["visual_obs%d" % i] = current_info.visual_observations[i]

2
ml-agents/mlagents/trainers/components/reward_signals/extrinsic/signal.py


super().check_config(config_dict, param_keys)
def evaluate(
self, current_info: BrainInfo, next_info: BrainInfo
self, current_info: BrainInfo, action: np.array, next_info: BrainInfo
) -> RewardSignalResult:
"""
Evaluates the reward for the agents present in current_info given the next_info

4
ml-agents/mlagents/trainers/components/reward_signals/gail/signal.py


}
def evaluate(
self, current_info: BrainInfo, next_info: BrainInfo
self, current_info: BrainInfo, action: np.array, next_info: BrainInfo
mini_batch["actions"] = next_info.previous_vector_actions
mini_batch["actions"] = action
mini_batch["done"] = np.reshape(next_info.local_done, [-1, 1])
for i, obs in enumerate(current_info.visual_observations):
mini_batch["visual_obs%d" % i] = obs

58
ml-agents/mlagents/trainers/demo_loader.py


import logging
import os
from typing import List, Tuple
import numpy as np
from mlagents.envs.communicator_objects.agent_info_pb2 import AgentInfoProto
from mlagents.envs.communicator_objects.agent_info_action_pair_pb2 import (
AgentInfoActionPairProto,
)
from mlagents.envs.communicator_objects.brain_parameters_pb2 import BrainParametersProto
from mlagents.envs.communicator_objects.demonstration_meta_pb2 import (
DemonstrationMetaProto,

def make_demo_buffer(
brain_infos: List[BrainInfo], brain_params: BrainParameters, sequence_length: int
pair_infos: List[AgentInfoActionPairProto],
brain_params: BrainParameters,
sequence_length: int,
for idx, experience in enumerate(brain_infos):
if idx > len(brain_infos) - 2:
for idx, experience in enumerate(pair_infos):
if idx > len(pair_infos) - 2:
current_brain_info = brain_infos[idx]
next_brain_info = brain_infos[idx + 1]
current_pair_info = pair_infos[idx]
next_pair_info = pair_infos[idx + 1]
current_brain_info = BrainInfo.from_agent_proto(
0, [current_pair_info.agent_info], brain_params
)
next_brain_info = BrainInfo.from_agent_proto(
0, [next_pair_info.agent_info], brain_params
)
previous_action = np.array(pair_infos[idx].action_info.vector_actions) * 0
if idx > 0:
previous_action = np.array(pair_infos[idx - 1].action_info.vector_actions)
demo_buffer[0].last_brain_info = current_brain_info
demo_buffer[0]["done"].append(next_brain_info.local_done[0])
demo_buffer[0]["rewards"].append(next_brain_info.rewards[0])

demo_buffer[0]["vector_obs"].append(
current_brain_info.vector_observations[0]
)
demo_buffer[0]["actions"].append(next_brain_info.previous_vector_actions[0])
demo_buffer[0]["prev_action"].append(
current_brain_info.previous_vector_actions[0]
)
demo_buffer[0]["actions"].append(current_pair_info.action_info.vector_actions)
demo_buffer[0]["prev_action"].append(previous_action)
if next_brain_info.local_done[0]:
demo_buffer.append_update_buffer(
0, batch_size=None, training_length=sequence_length

:param sequence_length: Length of trajectories to fill buffer.
:return:
"""
brain_params, brain_infos, _ = load_demonstration(file_path)
demo_buffer = make_demo_buffer(brain_infos, brain_params, sequence_length)
brain_params, info_action_pair, _ = load_demonstration(file_path)
demo_buffer = make_demo_buffer(info_action_pair, brain_params, sequence_length)
def load_demonstration(file_path: str) -> Tuple[BrainParameters, List[BrainInfo], int]:
def load_demonstration(
file_path: str
) -> Tuple[BrainParameters, List[AgentInfoActionPairProto], int]:
:return: BrainParameter and list of BrainInfos containing demonstration data.
:return: BrainParameter and list of AgentInfoActionPairProto containing demonstration data.
"""
# First 32 bytes of file dedicated to meta-data.

brain_params = None
brain_param_proto = None
brain_infos = []
info_action_pairs = []
total_expected = 0
for _file_path in file_paths:
data = open(_file_path, "rb").read()

if obs_decoded == 1:
brain_param_proto = BrainParametersProto()
brain_param_proto.ParseFromString(data[pos : pos + next_pos])
agent_info = AgentInfoProto()
agent_info.ParseFromString(data[pos : pos + next_pos])
agent_info_action = AgentInfoActionPairProto()
agent_info_action.ParseFromString(data[pos : pos + next_pos])
brain_param_proto, agent_info
brain_param_proto, agent_info_action.agent_info
brain_info = BrainInfo.from_agent_proto(0, [agent_info], brain_params)
brain_infos.append(brain_info)
if len(brain_infos) == total_expected:
info_action_pairs.append(agent_info_action)
if len(info_action_pairs) == total_expected:
return brain_params, brain_infos, total_expected
return brain_params, info_action_pairs, total_expected

10
ml-agents/mlagents/trainers/ppo/policy.py


epsilon = None
if self.use_recurrent:
if not self.use_continuous_act:
feed_dict[
self.model.prev_action
] = brain_info.previous_vector_actions.reshape(
[-1, len(self.model.act_size)]
feed_dict[self.model.prev_action] = self.retrieve_previous_action(
brain_info.agents
)
feed_dict[self.model.memory_in] = self.retrieve_memories(brain_info.agents)
if self.use_continuous_act:

if self.use_recurrent:
feed_dict[self.model.memory_in] = self.retrieve_memories([idx])
if not self.use_continuous_act and self.use_recurrent:
feed_dict[self.model.prev_action] = [
brain_info.previous_vector_actions[idx]
]
feed_dict[self.model.prev_action] = self.retrieve_previous_action([idx])
value_estimates = self.sess.run(self.model.value_heads, feed_dict)
value_estimates = {k: float(v) for k, v in value_estimates.items()}

17
ml-agents/mlagents/trainers/rl_trainer.py


local_dones = []
max_reacheds = []
agents = []
prev_vector_actions = []
action_masks = []
for agent_id in next_info.agents:
agent_brain_info = self.training_buffer[agent_id].last_brain_info

local_dones.append(agent_brain_info.local_done[agent_index])
max_reacheds.append(agent_brain_info.max_reached[agent_index])
agents.append(agent_brain_info.agents[agent_index])
prev_vector_actions.append(
agent_brain_info.previous_vector_actions[agent_index]
)
action_masks.append(agent_brain_info.action_masks[agent_index])
curr_info = BrainInfo(
visual_observations,

local_dones,
prev_vector_actions,
max_reacheds,
action_masks,
)

# Evaluate and store the reward signals
tmp_reward_signal_outs = {}
for name, signal in self.policy.reward_signals.items():
tmp_reward_signal_outs[name] = signal.evaluate(curr_to_use, next_info)
tmp_reward_signal_outs[name] = signal.evaluate(
curr_to_use, take_action_outputs["action"], next_info
)
# Store the environment reward
tmp_environment = np.array(next_info.rewards)

self.training_buffer[agent_id]["memory"].append(
self.policy.retrieve_memories([agent_id])[0, :]
)
self.training_buffer[agent_id]["masks"].append(1.0)
self.training_buffer[agent_id]["done"].append(
next_info.local_done[next_idx]

# Store action masks if neccessary
# Store action masks if necessary
stored_info.previous_vector_actions[idx]
self.policy.retrieve_previous_action([agent_id])[0, :]
)
values = stored_take_action_outputs["value_heads"]

if agent_id not in self.episode_steps:
self.episode_steps[agent_id] = 0
self.episode_steps[agent_id] += 1
self.policy.save_previous_action(
curr_info.agents, take_action_outputs["action"]
)
self.trainer_metrics.end_experience_collection_timer()
def end_episode(self) -> None:

6
ml-agents/mlagents/trainers/sac/policy.py


}
if self.use_recurrent:
if not self.use_continuous_act:
feed_dict[
self.model.prev_action
] = brain_info.previous_vector_actions.reshape(
[-1, len(self.model.act_size)]
feed_dict[self.model.prev_action] = self.retrieve_previous_action(
brain_info.agents
)
feed_dict[self.model.memory_in] = self.retrieve_memories(brain_info.agents)

7
ml-agents/mlagents/trainers/tests/mock_brain.py


buffer[0]["next_vector_in"].append(
current_brain_info.vector_observations[0]
)
buffer[0]["actions"].append(next_brain_info.previous_vector_actions[0])
buffer[0]["prev_action"].append(current_brain_info.previous_vector_actions[0])
fake_action_size = len(brain_params.vector_action_space_size)
if brain_params.vector_action_space_type == "continuous":
fake_action_size = brain_params.vector_action_space_size[0]
buffer[0]["actions"].append(np.zeros(fake_action_size))
buffer[0]["prev_action"].append(np.zeros(fake_action_size))
buffer[0]["masks"].append(1.0)
buffer[0]["advantages"].append(1.0)
if brain_params.vector_action_space_type == "discrete":

344
ml-agents/mlagents/trainers/tests/test.demo


Test9 -��@**0: Ball3DBrain`
�k?����<� ���@HZ��"P���������j'
Test9 -��@**0: Ball3DBrainB
4P���������j'
�k?����<� ���@HZ��e
�k?����<� ���;|@HZ���"{�"=���=P���������j'
�k?����<� ���@HZ��
G
9=���=P���������j'
�k?����<� ���;|@HZ���"{�e
�k?����<� ��0r@HZ���"��"=���=P���������j'
�k?����<� ���;|@HZ���"{�
G
9=���=P���������j'
�k?����<� ��0r@HZ���"��e
�k?����<� ���a@HZ��Z<�"=���=P���������j'
�k?����<� ��0r@HZ���"��
G
9=���=P���������j'
�k?����<� ���a@HZ��Z<�e
�k?����<� ���BK@HZ���"{�"=���=P���������j'
�k?����<� ���a@HZ��Z<�
G
9=���=P���������j'
�k?����<� ���BK@HZ���"{�e
�k?����<� ��|a.@HZ������"=���=P���������j'
�k?����<� ���BK@HZ���"{�
G
9=���=P���������j'
�k?����<� ��|a.@HZ������e
�k?����<� ���8 @HZ��Z��"=���=P���������j'
�k?����<� ��|a.@HZ������
G
9=���=P���������j'
�k?����<� ���8 @HZ��Z��e
�k?����<� �����?HZ��r���"=���=P���������j'
�k?����<� ���8 @HZ��Z��
G
9=���=P���������j'
�k?����<� �����?HZ��r���e
�k?����<� ��0FH?HZ���"��"=���=P���������j'
�k?����<� �����?HZ��r���
G
9=���=P���������j'
�k?����<� ��0FH?HZ���"��e
�k?����<�뵾�+?D#���>����7-�>"=���=P���������j'
�k?����<� ��0FH?HZ���"��
G
9=���=P���������j'
�k?����<�뵾�+?D#���>����7-�>e
�k?����<`��P�*?�
����">ש��`Ъ>"=���=P���������j'
�k?����<�뵾�+?D#���>����7-�>
G
9=���=P���������j'
����">ש��`Ъ>e
�k?����<@w��� *?����A�3>b���_L�>"=���=P���������j'
����">ש��`Ъ>
G
9=���=P���������j'
�k?����<@w��� *?����A�3>b���_L�>e
�k?����< ���0s)?8����ID>
hƼ���>"=���=P���������j'
�k?����<@w��� *?����A�3>b���_L�>
G
9=���=P���������j'
hƼ���>e
�k?����<����`�(?�!����T>H׼�R�>"=���=P���������j'
hƼ���>
G
9=���=P���������j'
�k?����<����`�(?�!����T>H׼�R�>e
�k?����<���� (?�I����e>.9�����>"=���=P���������j'
�k?����<����`�(?�!����T>H׼�R�>
G
9=���=P���������j'
�k?����<���� (?�I����e>.9�����>e
�k?����<@u�PV'?�v��Rv>����U$?"=���=P���������j'
�k?����<���� (?�I����e>.9�����>
G
9=���=P���������j'
�k?����<@u�PV'?�v��Rv>����U$?e
�k?����<�r[��&?��h��>]��x� ?"=���=P���������j'
�k?����<@u�PV'?�v��Rv>����U$?
G
9=���=P���������j'
�k?����<�r[��&?��h��>]��x� ?e
�k?����<�%@�@�%?hBZ�8׋>�Y �g�?"=���=P���������j'
�k?����<�r[��&?��h��>]��x� ?
G
9=���=P���������j'
�k?����<�%@�@�%?hBZ�8׋>�Y �g�?e
�k?����<@.#��$?�K�A(�>����Y?"=���=P���������j'
�k?����<�%@�@�%?hBZ�8׋>�Y �g�?
G
9=���=P���������j'
�k?����<@.#��$?�K�A(�>����Y?e
�k?����<��P�#?P;�`��>�0��$?"=���=P���������j'
�k?����<@.#��$?�K�A(�>����Y?
G
9=���=P���������j'
�k?����<��P�#?P;�`��>�0��$?e
�k?����<��Ƚ0�"?�*��Τ>m�&�3�,?"=���=P���������j'
�k?����<��P�#?P;�`��>�0��$?
G
9=���=P���������j'
�k?����<��Ƚ0�"?�*��Τ>m�&�3�,?e
�k?����<������!?HF� '�>� /�T�5?"=���=P���������j'
�k?����<��Ƚ0�"?�*��Τ>m�&�3�,?
G
9=���=P���������j'
�k?����<������!?HF� '�>� /�T�5?e
�k?����<L��p� ?�Rr�>�g7��A>?"=���=P���������j'
�k?����<������!?HF� '�>� /�T�5?
G
9=���=P���������j'
�k?����<L��p� ?�Rr�>�g7��A>?e
�k?����< �;�b?���6˽>(�?�\G?"=���=P���������j'
�k?����<L��p� ?�Rr�>�g7��A>?
G
9=���=P���������j'
�k?����< �;�b?���6˽>(�?�\G?e
�k?����<R6=�'?�?���>`6H�/�O?"=���=P���������j'
�k?����< �;�b?���6˽>(�?�\G?
G
9=���=P���������j'
�k?����<R6=�'?�?���>`6H�/�O?e
�k?����<�d�=��? ����l�><�P��rX?"=���=P���������j'
�k?����<R6=�'?�?���>`6H�/�O?
G
9=���=P���������j'
�k?����<�d�=��? ����l�><�P��rX?e
�k?����<y>��?�H����> Y��a?"=���=P���������j'
�k?����<�d�=��? ����l�><�P��rX?
G
9=���=P���������j'
�k?����<y>��?�H����> Y��a?e
�k?����<�i,>P&?�ٽ �>3~a��i?"=���=P���������j'
�k?����<y>��?�H����> Y��a?
G
9=���=P���������j'
�k?����<�i,>P&?�ٽ �>3~a��i?e
�k?����<@Z>��?HN��K�>��i�ӆr?"=���=P���������j'
�k?����<�i,>P&?�ٽ �>3~a��i?
G
9=���=P���������j'
�k?����<@Z>��?HN��K�>��i�ӆr?e
�k?����<���>p7?�p�=���>�Rr��K{?"=���=P���������j'
�k?����<@Z>��?HN��K�>��i�ӆr?
G
9=���=P���������j'
�k?����<���>p7?�p�=���>�Rr��K{?e
�k?����<��>��?`�<>��>��z��?"=���=P���������j'
�k?����<���>p7?�p�=���>�Rr��K{?
G
9=���=P���������j'
�k?����<��>��?`�<>��>��z��?e
�k?����<`d�>�?�s�>�!?����CZ�?"=���=P���������j'
�k?����<��>��?`�<>��>��z��?
G
9=���=P���������j'
�k?����<`d�>�?�s�>�!?����CZ�?e
�k?����<���>@l?@=�>�G?B�����?"=���=P���������j'
�k?����<`d�>�?�s�>�!?����CZ�?
G
9=���=P���������j'
�k?����<���>@l?@=�>�G?B�����?e
�k?����<y�>P�?b?�m?�扽� �?"=���=P���������j'
�k?����<���>@l?@=�>�G?B�����?
G
9=���=P���������j'
�k?����<y�>P�?b?�m?�扽� �?e
�k?����<��?�?�?]� ?����f�?"=���=P���������j'
�k?����<y�>P�?b?�m?�扽� �?
G
9=���=P���������j'
�k?����<��?�?�?]� ?����f�?e
�k?����<@�?@( ?��<?��?�I�����?"=���=P���������j'
�k?����<��?�?�?]� ?����f�?
G
9=���=P���������j'
�k?����<@�?@( ?��<?��?�I�����?e
�k?����<�� ?L ?�c[?��?�x��<�?"=���=P���������j'
�k?����<@�?@( ?��<?��?�I�����?
G
9=���=P���������j'
�k?����<�� ?L ?�c[?��?�x��<�?e
�k?����<��/?�b ?�!{?e?6���zp�?"=���=P���������j'
�k?����<�� ?L ?�c[?��?�x��<�?
G
9=���=P���������j'
�k?����<��/?�b ?�!{?e?6���zp�?e
�k?����<@W??�k?�ލ?�&?[ߞ�hȤ?"=���=P���������j'
�k?����<��/?�b ?�!{?e?6���zp�?
G
9=���=P���������j'
�k?����<@W??�k?�ލ?�&?[ߞ�hȤ?e
�k?����<NO?0g?��?�J!?m �� �?"=���=P���������j'
�k?����<@W??�k?�ލ?�&?[ߞ�hȤ?
G
9=���=P���������j'
�k?����<NO?0g?��?�J!?m �� �?e
�k?����<��_?pU?hȯ?�n%?�=��Nw�?"=���=P���������j'
�k?����<NO?0g?��?�J!?m �� �?
G
9=���=P���������j'
�k?����<��_?pU?hȯ?�n%?�=��Nw�?e
�k?����<�yp?P6?�c�?=�)?�f��Eα?"=���=P���������j'
�k?����<��_?pU?hȯ?�n%?�=��Nw�?
G
9=���=P���������j'
�k?����<�yp?P6?�c�?=�)?�f��Eα?e
�k?����<׀?��>ln�?t�-?]����$�?"=���=P���������j'
�k?����<�yp?P6?�c�?=�)?�f��Eα?
G
9=���=P���������j'
�k?����<׀?��>ln�?t�-?]����$�?e
�k?����<X��?���>��?W�1?�ó�A{�?"=���=P���������j'
�k?����<׀?��>ln�?t�-?]����$�?
G
9=���=P���������j'
�k?����<X��?���>��?W�1?�ó�A{�?e
�k?����<���?@�>���?��5?����BѾ?"=���=P���������j'
�k?����<X��?���>��?W�1?�ó�A{�?
G
9=���=P���������j'
�k?����<���?@�>���?��5?����BѾ?e
�k?����<���?�g�>@1:?�%���&�?"=���=P���������j'
�k?����<���?@�>���?��5?����BѾ?
G
9=���=P���������j'
�k?����<���?�g�>@1:?�%���&�?e
�k?����<�Q�?���>_�@*?>?�L��T|�?"=���=P���������j'
�k?����<���?�g�>@1:?�%���&�?
G
9=���=P���������j'
�k?����<�Q�?���>_�@*?>?�L��T|�?e
�k?����<���? ��>@�`B?A�Ľf��?"=���=P���������j'
�k?����<�Q�?���>_�@*?>?�L��T|�?
G
9=���=P���������j'
�k?����<���? ��>@�`B?A�Ľf��?e
�k?����<�˸?]�>hd$@�AF?*{��2�?"=���=P���������j'
�k?����<���? ��>@�`B?A�Ľf��?
G
9=���=P���������j'
�k?����<�˸?]�>hd$@�AF?*{��2�?e
�k?����<���? ��>��.@C?6�K�r-�?"=���=P���������j'
�k?����<�˸?]�>hd$@�AF?*{��2�?
G
9=���=P���������j'
�k?����<���? ��>��.@C?6�K�r-�?e
�k?����<XN�? U�>P\9@9A?��ڿC��?"=���=P���������j'
�k?����<���? ��>��.@C?6�K�r-�?
G
9=���=P���������j'
�k?����<XN�? U�>P\9@9A?��ڿC��?g
yM�����=4g=�@,��?"=��@P���������j'
�k?����<XN�? U�>P\9@9A?��ڿC��?
I
;=��@P���������j'
yM�����=4g=�@,��?e
yM�����=4g=�;|@,��?�"{�"=���=P���������j'
yM�����=4g=�@,��?
G
9=���=P���������j'
yM�����=4g=�;|@,��?�"{�e
yM�����=4g=0r@,��?�"��"=���=P���������j'
yM�����=4g=�;|@,��?�"{�
G
9=���=P���������j'
yM�����=4g=0r@,��?�"��e
yM�����=4g=�a@,��?Z<�"=���=P���������j'
yM�����=4g=0r@,��?�"��
G
9=���=P���������j'
yM�����=4g=�a@,��?Z<�e
yM�����=4g=�BK@,��?�"{�"=���=P���������j'
yM�����=4g=�a@,��?Z<�
G
9=���=P���������j'
yM�����=4g=�BK@,��?�"{�e
yM�����=4g=|a.@,��?����"=���=P���������j'
yM�����=4g=�BK@,��?�"{�
=
9=���=P���������j'
yM�����=4g=|a.@,��?����
yM�����=4g=|a.@,��?����

16
ml-agents/mlagents/trainers/tests/test_demo_loader.py


import os
from mlagents.trainers.demo_loader import load_demonstration, make_demo_buffer
from mlagents.trainers.demo_loader import load_demonstration, demo_to_buffer
brain_parameters, brain_infos, total_expected = load_demonstration(
brain_parameters, pair_infos, total_expected = load_demonstration(
assert len(brain_infos) == total_expected
assert len(pair_infos) == total_expected
demo_buffer = make_demo_buffer(brain_infos, brain_parameters, 1)
_, demo_buffer = demo_to_buffer(path_prefix + "/test.demo", 1)
brain_parameters, brain_infos, total_expected = load_demonstration(
brain_parameters, pair_infos, total_expected = load_demonstration(
assert brain_parameters.brain_name == "Ball3DBrain"
assert brain_parameters.brain_name == "3DBall"
assert len(brain_infos) == total_expected
assert len(pair_infos) == total_expected
demo_buffer = make_demo_buffer(brain_infos, brain_parameters, 1)
_, demo_buffer = demo_to_buffer(path_prefix + "/test_demo_dir", 1)
assert len(demo_buffer.update_buffer["actions"]) == total_expected - 1

4
ml-agents/mlagents/trainers/tests/test_reward_signals.py


import pytest
import yaml
import os
import numpy as np
import mlagents.trainers.tests.mock_brain as mb
from mlagents.trainers.ppo.policy import PPOPolicy
from mlagents.trainers.sac.policy import SACPolicy

brain_info = brain_infos[env.external_brain_names[0]]
next_brain_info = env.step()[env.external_brain_names[0]]
# Test evaluate
action = np.ones((len(brain_info.agents), policy.num_branches))
brain_info, next_brain_info
brain_info, action, next_brain_info
)
assert rsig_result.scaled_reward.shape == (NUM_AGENTS,)
assert rsig_result.unscaled_reward.shape == (NUM_AGENTS,)

2
ml-agents/mlagents/trainers/tests/test_rl_trainer.py


mock_policy = mock.Mock()
mock_policy.reward_signals = {}
mock_policy.retrieve_memories.return_value = np.zeros((1, 1))
mock_policy.retrieve_previous_action.return_value = np.zeros((1, 1))
return mock_policy

assert len(brain_info.agents) == 1
assert len(brain_info.visual_observations) == num_vis_obs
assert len(brain_info.vector_observations) == 1
assert len(brain_info.previous_vector_actions) == 1
# Test end episode
trainer.end_episode()

2
ml-agents/mlagents/trainers/tests/test_simple_rl.py


compression_type=COMPRESSION_TYPE_NONE,
)
agent_info = AgentInfoProto(
reward=reward, done=done, observations=[vector_obs_proto]
reward=reward, done=bool(done), observations=[vector_obs_proto]
)
if done:

153
ml-agents/mlagents/trainers/tests/testdcvis.demo


bcvis& -****:VisualFoodCollectorLearning� "P‡�������j�
bcvis& -****:VisualFoodCollectorLearning�
� P‡�������j�
TT� �PNG

IHDRTT� ���IDATx�X�ndE� �D,������� D$|!19?EF�--�@0^��ڡ�oU�z�}�glK��v��8�8�}�ww��?�,�yg�ĉw#���o;�v~�h�~���)��o;�� �c��Mo^;���/p��/p��mߎ};� �@;� ��v۷cߎ�'Ў�7����طc�� ,�د.//G������<:`��U_on�T]��W#'�W���׉�ÎN޵rqq�r��S��:������ms��:9 ���-o��y�䅑W̟�������g~�9��f�?>�������׷��?�?������ֱ.�/�S��v��\]_'K���W���z�������:�!�R�&�M~�>K�ۿ�<H �<www �$��wIډos��\o����3\��N �f�>��yr��ӈG �0��;;���UX���,R8 I�H$G����<�g?9(K�}V�T �K�ʘ�z �˗_eL��n����@A�`���`����#������V5:)��͌EK ������((%�I��7����NNH���[��LB��,��f���@�0D��ّ��%�M�NU����G�~jP�������t�I��!#����Iç��ؗ>� )��T�F4�Y��1Ĥ!%���ن ��0��9� �� $�2�d"���<K�����11ϼc��yQR��Q�T��Z�@� �Vb�]"�u�FN�j7�#�P�(\���&q�D��h+���m%����%�ȪS���%�a����Q��L�EI �$�(�8�`�^�D[dE?�6�ʧ�6A��R)bI��1��{I�+��*�!��E� ���h��-=_xH]��G0\�3�V�f.�cI��gp����3�]���

"� "P‡�������j�
"
�
� P‡�������j�
TT� �PNG

IHDRTT� ���IDATx�X�ndE� �D,������� D$|!19?EF�--�@0^��ڡ�oU�z�}�glK��v��8�8�}�ww��?�,�yg�ĉw#���o;�v~�h�~���)��o;�� �c��Mo^;���/p��/p��mߎ};� �@;� ��v۷cߎ�'Ў�7����طc�� ,�د.//G������<:`��U_on�T]��W#'�W���׉�ÎN޵rqq�r��S��:������ms��:9 ���-o��y�䅑W̟�������g~�9��f�?>�������׷��?�?������ֱ.�/�S��v��\]_'K���W���z�������:�!�R�&�M~�>K�ۿ�<H �<www �$��wIډos��\o����3\��N �f�>��yr��ӈG �0��;;���UX���,R8 I�H$G����<�g?9(K�}V�T �K�ʘ�z �˗_eL��n����@A�`���`����#������V5:)��͌EK ������((%�I��7����NNH���[��LB��,��f���@�0D��ّ��%�M�NU����G�~jP�������t�I��!#����Iç��ؗ>� )��T�F4�Y��1Ĥ!%���ن ��0��9� �� $�2�d"���<K�����11ϼc��yQR��Q�T��Z�@� �Vb�]"�u�FN�j7�#�P�(\���&q�D��h+���m%����%�ȪS���%�a����Q��L�EI �$�(�8�`�^�D[dE?�6�ʧ�6A��R)bI��1��{I�+��*�!��E� ���h��-=_xH]��G0\�3�V�f.�cI��gp����3�]���

"� "P‡�������j�
"
�
� P‡�������j�
TT� �PNG

IHDRTT� ���IDATx�X�ndE� �D,������� D$|!19?EF�--�@0^��ڡ�oU�z�}�glK��v��8�8�}�ww��?�,�yg�ĉw#���o;�v~�h�~���)��o;�� �c��Mo^;���/p��/p��mߎ};� �@;� ��v۷cߎ�'Ў�7����طc�� ,�د.//G������<:`��U_on�T]��W#'�W���׉�ÎN޵rqq�r��S��:������ms��:9 ���-o��y�䅑W̟�������g~�9��f�?>�������׷��?�?������ֱ.�/�S��v��\]_'K���W���z�������:�!�R�&�M~�>K�ۿ�<H �<www �$��wIډos��\o����3\��N �f�>��yr��ӈG �0��;;���UX���,R8 I�H$G����<�g?9(K�}V�T �K�ʘ�z �˗_eL��n����@A�`���`����#������V5:)��͌EK ������((%�I��7����NNH���[��LB��,��f���@�0D��ّ��%�M�NU����G�~jP�������t�I��!#����Iç��ؗ>� )��T�F4�Y��1Ĥ!%���ن ��0��9� �� $�2�d"���<K�����11ϼc��yQR��Q�T��Z�@� �Vb�]"�u�FN�j7�#�P�(\���&q�D��h+���m%����%�ȪS���%�a����Q��L�EI �$�(�8�`�^�D[dE?�6�ʧ�6A��R)bI��1��{I�+��*�!��E� ���h��-=_xH]��G0\�3�V�f.�cI��gp����3�]���

"� "P‡�������j�
"
�
� P‡�������j�
TT� �PNG

IHDRTT� ���IDATx�X�ndE� �D,������� D$|!19?EF�--�@0^��ڡ�oU�z�}�glK��v��8�8�}�ww��?�,�yg�ĉw#���o;�v~�h�~���)��o;�� �c��Mo^;���/p��/p��mߎ};� �@;� ��v۷cߎ�'Ў�7����طc�� ,�د.//G������<:`��U_on�T]��W#'�W���׉�ÎN޵rqq�r��S��:������ms��:9 ���-o��y�䅑W̟�������g~�9��f�?>�������׷��?�?������ֱ.�/�S��v��\]_'K���W���z�������:�!�R�&�M~�>K�ۿ�<H �<www �$��wIډos��\o����3\��N �f�>��yr��ӈG �0��;;���UX���,R8 I�H$G����<�g?9(K�}V�T �K�ʘ�z �˗_eL��n����@A�`���`����#������V5:)��͌EK ������((%�I��7����NNH���[��LB��,��f���@�0D��ّ��%�M�NU����G�~jP�������t�I��!#����Iç��ؗ>� )��T�F4�Y��1Ĥ!%���ن ��0��9� �� $�2�d"���<K�����11ϼc��yQR��Q�T��Z�@� �Vb�]"�u�FN�j7�#�P�(\���&q�D��h+���m%����%�ȪS���%�a����Q��L�EI �$�(�8�`�^�D[dE?�6�ʧ�6A��R)bI��1��{I�+��*�!��E� ���h��-=_xH]��G0\�3�V�f.�cI��gp����3�]���

"� "P‡�������j�
"
�
� P‡�������j�
TT� �PNG

IHDRTT� ���IDATx�X�ndE� �D,������� D$|!19?EF�--�@0^��ڡ�oU�z�}�glK��v��8�8�}�ww��?�,�yg�ĉw#���o;�v~�h�~���)��o;�� �c��Mo^;���/p��/p��mߎ};� �@;� ��v۷cߎ�'Ў�7����طc�� ,�د.//G������<:`��U_on�T]��W#'�W���׉�ÎN޵rqq�r��S��:������ms��:9 ���-o��y�䅑W̟�������g~�9��f�?>�������׷��?�?������ֱ.�/�S��v��\]_'K���W���z�������:�!�R�&�M~�>K�ۿ�<H �<www �$��wIډos��\o����3\��N �f�>��yr��ӈG �0��;;���UX���,R8 I�H$G����<�g?9(K�}V�T �K�ʘ�z �˗_eL��n����@A�`���`����#������V5:)��͌EK ������((%�I��7����NNH���[��LB��,��f���@�0D��ّ��%�M�NU����G�~jP�������t�I��!#����Iç��ؗ>� )��T�F4�Y��1Ĥ!%���ن ��0��9� �� $�2�d"���<K�����11ϼc��yQR��Q�T��Z�@� �Vb�]"�u�FN�j7�#�P�(\���&q�D��h+���m%����%�ȪS���%�a����Q��L�EI �$�(�8�`�^�D[dE?�6�ʧ�6A��R)bI��1��{I�+��*�!��E� ���h��-=_xH]��G0\�3�V�f.�cI��gp����3�]���

"�"@�?P‡�������j�
"
@�?�
�P‡�������j�
TT��PNG

IHDRTT� ���IDATx�Xͮ�D����$W�@�-j T]!$6���'�Ux ��a�W@����X���R����$�mn�1ߙ��s��6�l�u�����o��ط�7��4���J�x�䛺��ʷ+��h۾���(�+߮|g�m�.z{��m߶}g�m�.z{ڷm߶}g�m�.z{ڷm߶}g�m�.z{ڷm߶}g��m׾���������q�������F�&Z����>o@���9�n����|����|���������ۏ��8�����׵ ���򗿿�<K����x����P����`����1��݋4�����+��6��G7�E�H���Y2;N�w������OGx�&i��=��f~��ܣ8�:�� ��{!�:Nn��?=� �/� �� ���?>�%�EP���A�q7~v�?�͵�����X��ߣG��R*�*���KB�/��.]r|�x���ePA� ��"_fK�1X,�%�A�[�'y��7��y��]F��Mje"�%@���lET����X��#r���E�<��<���i��sh�<�=|��wG�9��G�b=<�آ��[j[�|*��ّY��^ ��B�"q¡�����q6���ϔ?ܘ�G�����8 �3 �BhORn���1�̕=���P0q���a ��Ģ#����/��Φ'��ω�"�γ�Lܳ ""Po�`0@�q���+Ec���d�<��\�r����Y��^9�|�o �������hoZd�g0�fx��NOSO��T��0����"v��Y:�CSL]�Y({��ɘ3��W�V��^�����AX>�@Ap6:û ˚/��p4<�@0?Mg�Y��7,����!�A ֟ձb�% Jn�yi�_Q�5��Ѻ*IM���)�C

��\��F����B��2����a��c��� ��5o��݄�3ʓI'e~�I�9VL���8��E�'\�=v�Q�$mﰁu�u�}����&ֵ��0��J��Y8&`�Y���z���<���NF0 Yg����JՙJ�\��]��B
������ ������s���6q�D���Z�i>�[�D0<���E���럞N�z��H2b-�3�?�J �2s�5?v����z�=/���1�P;��D;�.UE��l��1#����#)�v{�M�ʫi@�yrH��^��d ����`�_ψF��[���R{6�~ɛT)E�J�~��\��(�^u����몔�J��ެ��u=b/|y>����˛h� s�D�Ԩـ���G �Ul��Ni���I��@�Ƨ����~k�&Vx��5���G^��^�"ۃ����y�:a5E�dmF2K��M����Ug���-6�uI�z4K��t�F鉘��Ȗ��dv�^��-��-�>��b.�>��`V� �������jR�r<s���ω�D`V��q�Y�ʨ���*�Ì�N#ov�Y
���tT���i���{�~������ޔ�:x�P�a栭��������i��_IEND�B`�j
"�"@�?P‡�������j�
"
@�?�
�P‡�������j�
TT��PNG

IHDRTT� ���IDATx�Xͮ�D����$W�@�-j T]!$6���'�Ux ��a�W@����X���R����$�mn�1ߙ��s��6�l�u�����o��ط�7��4���J�x�䛺��ʷ+��h۾���(�+߮|g�m�.z{��m߶}g�m�.z{ڷm߶}g�m�.z{ڷm߶}g�m�.z{ڷm߶}g��m׾���������q�������F�&Z����>o@���9�n����|����|���������ۏ��8�����׵ ���򗿿�<K����x����P����`����1��݋4�����+��6��G7�E�H���Y2;N�w������OGx�&i��=��f~��ܣ8�:�� ��{!�:Nn��?=� �/� �� ���?>�%�EP���A�q7~v�?�͵�����X��ߣG��R*�*���KB�/��.]r|�x���ePA� ��"_fK�1X,�%�A�[�'y��7��y��]F��Mje"�%@���lET����X��#r���E�<��<���i��sh�<�=|��wG�9��G�b=<�آ��[j[�|*��ّY��^ ��B�"q¡�����q6���ϔ?ܘ�G�����8 �3 �BhORn���1�̕=���P0q���a ��Ģ#����/��Φ'��ω�"�γ�Lܳ ""Po�`0@�q���+Ec���d�<��\�r����Y��^9�|�o �������hoZd�g0�fx��NOSO��T��0����"v��Y:�CSL]�Y({��ɘ3��W�V��^�����AX>�@Ap6:û ˚/��p4<�@0?Mg�Y��7,����!�A ֟ձb�% Jn�yi�_Q�5��Ѻ*IM���)�C

��\��F����B��2����a��c��� ��5o��݄�3ʓI'e~�I�9VL���8��E�'\�=v�Q�$mﰁu�u�}����&ֵ��0��J��Y8&`�Y���z���<���NF0 Yg����JՙJ�\��]��B
������ ������s���6q�D���Z�i>�[�D0<���E���럞N�z��H2b-�3�?�J �2s�5?v����z�=/���1�P;��D;�.UE��l��1#����#)�v{�M�ʫi@�yrH��^��d ����`�_ψF��[���R{6�~ɛT)E�J�~��\��(�^u����몔�J��ެ��u=b/|y>����˛h� s�D�Ԩـ���G �Ul��Ni���I��@�Ƨ����~k�&Vx��5���G^��^�"ۃ����y�:a5E�dmF2K��M����Ug���-6�uI�z4K��t�F鉘��Ȗ��dv�^��-��-�>��b.�>��`V� �������jR�r<s���ω�D`V��q�Y�ʨ���*�Ì�N#ov�Y
���tT���i���{�~������ޔ�:x�P�a栭��������i��_IEND�B`�j
"�"@�?P‡�������j�
"
@�?�
�P‡�������j�
TT��PNG

IHDRTT� ���IDATx�Xͮ�D����$W�@�-j T]!$6���'�Ux ��a�W@����X���R����$�mn�1ߙ��s��6�l�u�����o��ط�7��4���J�x�䛺��ʷ+��h۾���(�+߮|g�m�.z{��m߶}g�m�.z{ڷm߶}g�m�.z{ڷm߶}g�m�.z{ڷm߶}g��m׾���������q�������F�&Z����>o@���9�n����|����|���������ۏ��8�����׵ ���򗿿�<K����x����P����`����1��݋4�����+��6��G7�E�H���Y2;N�w������OGx�&i��=��f~��ܣ8�:�� ��{!�:Nn��?=� �/� �� ���?>�%�EP���A�q7~v�?�͵�����X��ߣG��R*�*���KB�/��.]r|�x���ePA� ��"_fK�1X,�%�A�[�'y��7��y��]F��Mje"�%@���lET����X��#r���E�<��<���i��sh�<�=|��wG�9��G�b=<�آ��[j[�|*��ّY��^ ��B�"q¡�����q6���ϔ?ܘ�G�����8 �3 �BhORn���1�̕=���P0q���a ��Ģ#����/��Φ'��ω�"�γ�Lܳ ""Po�`0@�q���+Ec���d�<��\�r����Y��^9�|�o �������hoZd�g0�fx��NOSO��T��0����"v��Y:�CSL]�Y({��ɘ3��W�V��^�����AX>�@Ap6:û ˚/��p4<�@0?Mg�Y��7,����!�A ֟ձb�% Jn�yi�_Q�5��Ѻ*IM���)�C

��\��F����B��2����a��c��� ��5o��݄�3ʓI'e~�I�9VL���8��E�'\�=v�Q�$mﰁu�u�}����&ֵ��0��J��Y8&`�Y���z���<���NF0 Yg����JՙJ�\��]��B
������ ������s���6q�D���Z�i>�[�D0<���E���럞N�z��H2b-�3�?�J �2s�5?v����z�=/���1�P;��D;�.UE��l��1#����#)�v{�M�ʫi@�yrH��^��d ����`�_ψF��[���R{6�~ɛT)E�J�~��\��(�^u����몔�J��ެ��u=b/|y>����˛h� s�D�Ԩـ���G �Ul��Ni���I��@�Ƨ����~k�&Vx��5���G^��^�"ۃ����y�:a5E�dmF2K��M����Ug���-6�uI�z4K��t�F鉘��Ȗ��dv�^��-��-�>��b.�>��`V� �������jR�r<s���ω�D`V��q�Y�ʨ���*�Ì�N#ov�Y
���tT���i���{�~������ޔ�:x�P�a栭��������i��_IEND�B`�j
"�"@�?P‡�������j�
"
@�?�
�P‡�������j�
TT��PNG

IHDRTT� ���IDATx�Xͮ�D����$W�@�-j T]!$6���'�Ux ��a�W@����X���R����$�mn�1ߙ��s��6�l�u�����o��ط�7��4���J�x�䛺��ʷ+��h۾���(�+߮|g�m�.z{��m߶}g�m�.z{ڷm߶}g�m�.z{ڷm߶}g�m�.z{ڷm߶}g��m׾���������q�������F�&Z����>o@���9�n����|����|���������ۏ��8�����׵ ���򗿿�<K����x����P����`����1��݋4�����+��6��G7�E�H���Y2;N�w������OGx�&i��=��f~��ܣ8�:�� ��{!�:Nn��?=� �/� �� ���?>�%�EP���A�q7~v�?�͵�����X��ߣG��R*�*���KB�/��.]r|�x���ePA� ��"_fK�1X,�%�A�[�'y��7��y��]F��Mje"�%@���lET����X��#r���E�<��<���i��sh�<�=|��wG�9��G�b=<�آ��[j[�|*��ّY��^ ��B�"q¡�����q6���ϔ?ܘ�G�����8 �3 �BhORn���1�̕=���P0q���a ��Ģ#����/��Φ'��ω�"�γ�Lܳ ""Po�`0@�q���+Ec���d�<��\�r����Y��^9�|�o �������hoZd�g0�fx��NOSO��T��0����"v��Y:�CSL]�Y({��ɘ3��W�V��^�����AX>�@Ap6:û ˚/��p4<�@0?Mg�Y��7,����!�A ֟ձb�% Jn�yi�_Q�5��Ѻ*IM���)�C

��\��F����B��2����a��c��� ��5o��݄�3ʓI'e~�I�9VL���8��E�'\�=v�Q�$mﰁu�u�}����&ֵ��0��J��Y8&`�Y���z���<���NF0 Yg����JՙJ�\��]��B
������ ������s���6q�D���Z�i>�[�D0<���E���럞N�z��H2b-�3�?�J �2s�5?v����z�=/���1�P;��D;�.UE��l��1#����#)�v{�M�ʫi@�yrH��^��d ����`�_ψF��[���R{6�~ɛT)E�J�~��\��(�^u����몔�J��ެ��u=b/|y>����˛h� s�D�Ԩـ���G �Ul��Ni���I��@�Ƨ����~k�&Vx��5���G^��^�"ۃ����y�:a5E�dmF2K��M����Ug���-6�uI�z4K��t�F鉘��Ȗ��dv�^��-��-�>��b.�>��`V� �������jR�r<s���ω�D`V��q�Y�ʨ���*�Ì�N#ov�Y
���tT���i���{�~������ޔ�:x�P�a栭��������i��_IEND�B`�j
"�"@�?P‡�������j�
"
@�?�
�P‡�������j�
TT��PNG

IHDRTT� ���IDATx�Xͮ�D����$W�@�-j T]!$6���'�Ux ��a�W@����X���R����$�mn�1ߙ��s��6�l�u�����o��ط�7��4���J�x�䛺��ʷ+��h۾���(�+߮|g�m�.z{��m߶}g�m�.z{ڷm߶}g�m�.z{ڷm߶}g�m�.z{ڷm߶}g��m׾���������q�������F�&Z����>o@���9�n����|����|���������ۏ��8�����׵ ���򗿿�<K����x����P����`����1��݋4�����+��6��G7�E�H���Y2;N�w������OGx�&i��=��f~��ܣ8�:�� ��{!�:Nn��?=� �/� �� ���?>�%�EP���A�q7~v�?�͵�����X��ߣG��R*�*���KB�/��.]r|�x���ePA� ��"_fK�1X,�%�A�[�'y��7��y��]F��Mje"�%@���lET����X��#r���E�<��<���i��sh�<�=|��wG�9��G�b=<�آ��[j[�|*��ّY��^ ��B�"q¡�����q6���ϔ?ܘ�G�����8 �3 �BhORn���1�̕=���P0q���a ��Ģ#����/��Φ'��ω�"�γ�Lܳ ""Po�`0@�q���+Ec���d�<��\�r����Y��^9�|�o �������hoZd�g0�fx��NOSO��T��0����"v��Y:�CSL]�Y({��ɘ3��W�V��^�����AX>�@Ap6:û ˚/��p4<�@0?Mg�Y��7,����!�A ֟ձb�% Jn�yi�_Q�5��Ѻ*IM���)�C

��\��F����B��2����a��c��� ��5o��݄�3ʓI'e~�I�9VL���8��E�'\�=v�Q�$mﰁu�u�}����&ֵ��0��J��Y8&`�Y���z���<���NF0 Yg����JՙJ�\��]��B
������ ������s���6q�D���Z�i>�[�D0<���E���럞N�z��H2b-�3�?�J �2s�5?v����z�=/���1�P;��D;�.UE��l��1#����#)�v{�M�ʫi@�yrH��^��d ����`�_ψF��[���R{6�~ɛT)E�J�~��\��(�^u����몔�J��ެ��u=b/|y>����˛h� s�D�Ԩـ���G �Ul��Ni���I��@�Ƨ����~k�&Vx��5���G^��^�"ۃ����y�:a5E�dmF2K��M����Ug���-6�uI�z4K��t�F鉘��Ȗ��dv�^��-��-�>��b.�>��`V� �������jR�r<s���ω�D`V��q�Y�ʨ���*�Ì�N#ov�Y
���tT���i���{�~������ޔ�:x�P�a栭��������i��_IEND�B`�j
"� "�?�?�?�?P‡�������j�
"
�?�?�?�?�
� P‡�������j�
TT� �PNG

IHDRTT� ���IDATx�X�n\E�IF��� X�����k�� ;~�=_6Y@/ $�x,#�P�����OUw�nj��-n�"�z�:U�n�뉗_|��b��Gsκ�����v�۝��ڱ��M�۝ow~�h�~�7���ڱo�~�h�~�7���۱o�~�h�~�7���۱o�~�h�~�7���۱o�~�x����__}������◿��k��]^^�-�����]�k!�^��ln�����.�Ƿ��/�G��C�ڷ ��JL߄���z/�c��{8�i]G���/�������Ez�z�K_~���G�=��LMQ����?����O�럯7�l^���Tj-�Q~���o��o���v� m��������ꇫ����Pp�.�S�_r��ψ�����b/4���H�?y��L�2fONO(uq~�*�7R?O�)����$�

�"�f�Ш7uo3����`V���V�oxY�v(���e�n;j�fq��)�<�C���>+�m�;���C�C춋��wT���7��i��A�K 삟y�ӹ�bw:���c9ԕ9��=��&\��(o{;e��͝�}�|��(�۪Ц���3�3��܅�v��m�v��T��!���Q��s�.���� ���7�˲K�ڱ�� �vQ����w{;[�iS�hgSU�YD�"��y��� �IEND�B`�j
"� "�?�?�?�?P‡�������j�
"
�?�?�?�?�
� P‡�������j�
TT� �PNG

IHDRTT� ���IDATx�X�n\E�IF��� X�����k�� ;~�=_6Y@/ $�x,#�P�����OUw�nj��-n�"�z�:U�n�뉗_|��b��Gsκ�����v�۝��ڱ��M�۝ow~�h�~�7���ڱo�~�h�~�7���۱o�~�h�~�7���۱o�~�h�~�7���۱o�~�x����__}������◿��k��]^^�-�����]�k!�^��ln�����.�Ƿ��/�G��C�ڷ ��JL߄���z/�c��{8�i]G���/�������Ez�z�K_~���G�=��LMQ����?����O�럯7�l^���Tj-�Q~���o��o���v� m��������ꇫ����Pp�.�S�_r��ψ�����b/4���H�?y��L�2fONO(uq~�*�7R?O�)����$�

�"�f�Ш7uo3����`V���V�oxY�v(���e�n;j�fq��)�<�C���>+�m�;���C�C춋��wT���7��i��A�K 삟y�ӹ�bw:���c9ԕ9��=��&\��(o{;e��͝�}�|��(�۪Ц���3�3��܅�v��m�v��T��!���Q��s�.���� ���7�˲K�ڱ�� �vQ����w{;[�iS�hgSU�YD�"��y��� �IEND�B`�j
"� "�?�?�?�?P‡�������j�
"
�?�?�?�?�
� P‡�������j�
TT� �PNG

IHDRTT� ���IDATx�X�n\E�IF��� X�����k�� ;~�=_6Y@/ $�x,#�P�����OUw�nj��-n�"�z�:U�n�뉗_|��b��Gsκ�����v�۝��ڱ��M�۝ow~�h�~�7���ڱo�~�h�~�7���۱o�~�h�~�7���۱o�~�h�~�7���۱o�~�x����__}������◿��k��]^^�-�����]�k!�^��ln�����.�Ƿ��/�G��C�ڷ ��JL߄���z/�c��{8�i]G���/�������Ez�z�K_~���G�=��LMQ����?����O�럯7�l^���Tj-�Q~���o��o���v� m��������ꇫ����Pp�.�S�_r��ψ�����b/4���H�?y��L�2fONO(uq~�*�7R?O�)����$�

�"�f�Ш7uo3����`V���V�oxY�v(���e�n;j�fq��)�<�C���>+�m�;���C�C춋��wT���7��i��A�K 삟y�ӹ�bw:���c9ԕ9��=��&\��(o{;e��͝�}�|��(�۪Ц���3�3��܅�v��m�v��T��!���Q��s�.���� ���7�˲K�ڱ�� �vQ����w{;[�iS�hgSU�YD�"��y��� �IEND�B`�j
"� "�?�?�?�?P‡�������j�
"
�?�?�?�?�
� P‡�������j�
TT� �PNG

IHDRTT� ���IDATx�X�n\E�IF��� X�����k�� ;~�=_6Y@/ $�x,#�P�����OUw�nj��-n�"�z�:U�n�뉗_|��b��Gsκ�����v�۝��ڱ��M�۝ow~�h�~�7���ڱo�~�h�~�7���۱o�~�h�~�7���۱o�~�h�~�7���۱o�~�x����__}������◿��k��]^^�-�����]�k!�^��ln�����.�Ƿ��/�G��C�ڷ ��JL߄���z/�c��{8�i]G���/�������Ez�z�K_~���G�=��LMQ����?����O�럯7�l^���Tj-�Q~���o��o���v� m��������ꇫ����Pp�.�S�_r��ψ�����b/4���H�?y��L�2fONO(uq~�*�7R?O�)����$�

�"�f�Ш7uo3����`V���V�oxY�v(���e�n;j�fq��)�<�C���>+�m�;���C�C춋��wT���7��i��A�K 삟y�ӹ�bw:���c9ԕ9��=��&\��(o{;e��͝�}�|��(�۪Ц���3�3��܅�v��m�v��T��!���Q��s�.���� ���7�˲K�ڱ�� �vQ����w{;[�iS�hgSU�YD�"��y��� �IEND�B`�j
"� "�?�?�?�?P‡�������j�
"
�?�?�?�?�
� P‡�������j�
TT� �PNG

IHDRTT� ���IDATx�X�n\E�IF��� X�����k�� ;~�=_6Y@/ $�x,#�P�����OUw�nj��-n�"�z�:U�n�뉗_|��b��Gsκ�����v�۝��ڱ��M�۝ow~�h�~�7���ڱo�~�h�~�7���۱o�~�h�~�7���۱o�~�h�~�7���۱o�~�x����__}������◿��k��]^^�-�����]�k!�^��ln�����.�Ƿ��/�G��C�ڷ ��JL߄���z/�c��{8�i]G���/�������Ez�z�K_~���G�=��LMQ����?����O�럯7�l^���Tj-�Q~���o��o���v� m��������ꇫ����Pp�.�S�_r��ψ�����b/4���H�?y��L�2fONO(uq~�*�7R?O�)����$�

�"�f�Ш7uo3����`V���V�oxY�v(���e�n;j�fq��)�<�C���>+�m�;���C�C춋��wT���7��i��A�K 삟y�ӹ�bw:���c9ԕ9��=��&\��(o{;e��͝�}�|��(�۪Ц���3�3��܅�v��m�v��T��!���Q��s�.���� ���7�˲K�ڱ�� �vQ����w{;[�iS�hgSU�YD�"��y��� �IEND�B`�j
"� "@@�?�?P‡�������j�
"
@@�?�?�
� P‡�������j�
TT� �PNG

IHDRTT� ���IDATx�Y1r$7 Ժ�"m��WN�������p��p��Y�8�*�A��93������V��M��pV��/������7{m��=����ϝ�;����~���-ϝ�;����~��>/�y�����


}�M�LU�BK:�R��b�f����59M���?<<ʣn�_�F0?T�b���b���d*P�z�S�o��*�O�*9F�A��G��o���̈�J��Ki43�L�5�(�e��Ҹu�c��\0\�Ǟ����.��h�7�P)ʎ'��:J�0��2���˻���O�K�z�@C�`��5��8��k�#��؇G]:HO�϶����*�)!�z�+�d�r�w��u����n)`�i�Z;(�jv��a���b�Pj��C��=��,��01g��A&s�Lٶ7D.�E[r4&�p��:���j��;�N���}T���g�=\�C,$�@KC��u�s��<�%��ݙg0�nģ7���(ŷ�A���K�"Ȁe)�؇|^�6) �� ��-���Y*�{�/89ϋ��[�=O�m{(����<Y�nu�29���I��$�� R�x���}l�d-��Hb��h���j����Ԑk�:��X�� &ŀ��5`+��;ۓCٍ5�zB��?�TWA$�ů��[L/a>&�<J1s��EQҘ���N�O�t4<=|��`'�T�T1W�H��kr�e`�L���V����U� %/#�vGg8�50�l:�h-�yNr��T�B8����P s� �3v��Z�T�����W�,�s���p�F��o�F ����k�Rv�%�v�1!z^����,��/�b!ʅ��'Qә�bE$z�i��a�F07���;]�2]�Ȩ�<�#>f\�Up�q{p8ZLpX �l���%/��E5/#D���]�cD�"����n�N����pԺ��X %'���򖍅�P�������7vjB��XKW���ܔ�` 5����(�ml18��nG<z������4���1����u)-�,�QS�=ܔj�b7�'�������OW���0�
�0o#8�����1���4? �I�[8�w���cs:!��B���Hf_�*�������<|17�[N��IEND�B`�j
"� "@@�?�?P‡�������j�
"
@@�?�?�
� P‡�������j�
TT� �PNG

IHDRTT� ���IDATx�Y1r$7 Ժ�"m��WN�������p��p��Y�8�*�A��93������V��M��pV��/������7{m��=����ϝ�;����~���-ϝ�;����~��>/�y�����


}�M�LU�BK:�R��b�f����59M���?<<ʣn�_�F0?T�b���b���d*P�z�S�o��*�O�*9F�A��G��o���̈�J��Ki43�L�5�(�e��Ҹu�c��\0\�Ǟ����.��h�7�P)ʎ'��:J�0��2���˻���O�K�z�@C�`��5��8��k�#��؇G]:HO�϶����*�)!�z�+�d�r�w��u����n)`�i�Z;(�jv��a���b�Pj��C��=��,��01g��A&s�Lٶ7D.�E[r4&�p��:���j��;�N���}T���g�=\�C,$�@KC��u�s��<�%��ݙg0�nģ7���(ŷ�A���K�"Ȁe)�؇|^�6) �� ��-���Y*�{�/89ϋ��[�=O�m{(����<Y�nu�29���I��$�� R�x���}l�d-��Hb��h���j����Ԑk�:��X�� &ŀ��5`+��;ۓCٍ5�zB��?�TWA$�ů��[L/a>&�<J1s��EQҘ���N�O�t4<=|��`'�T�T1W�H��kr�e`�L���V����U� %/#�vGg8�50�l:�h-�yNr��T�B8����P s� �3v��Z�T�����W�,�s���p�F��o�F ����k�Rv�%�v�1!z^����,��/�b!ʅ��'Qә�bE$z�i��a�F07���;]�2]�Ȩ�<�#>f\�Up�q{p8ZLpX �l���%/��E5/#D���]�cD�"����n�N����pԺ��X %'���򖍅�P�������7vjB��XKW���ܔ�` 5����(�ml18��nG<z������4���1����u)-�,�QS�=ܔj�b7�'�������OW���0�
�0o#8�����1���4? �I�[8�w���cs:!��B���Hf_�*�������<|17�[N��IEND�B`�j
"� "@@�?�?P‡�������j�
"
@@�?�?�
� P‡�������j�
TT� �PNG

IHDRTT� ���IDATx�Y1r$7 Ժ�"m��WN�������p��p��Y�8�*�A��93������V��M��pV��/������7{m��=����ϝ�;����~���-ϝ�;����~��>/�y�����


}�M�LU�BK:�R��b�f����59M���?<<ʣn�_�F0?T�b���b���d*P�z�S�o��*�O�*9F�A��G��o���̈�J��Ki43�L�5�(�e��Ҹu�c��\0\�Ǟ����.��h�7�P)ʎ'��:J�0��2���˻���O�K�z�@C�`��5��8��k�#��؇G]:HO�϶����*�)!�z�+�d�r�w��u����n)`�i�Z;(�jv��a���b�Pj��C��=��,��01g��A&s�Lٶ7D.�E[r4&�p��:���j��;�N���}T���g�=\�C,$�@KC��u�s��<�%��ݙg0�nģ7���(ŷ�A���K�"Ȁe)�؇|^�6) �� ��-���Y*�{�/89ϋ��[�=O�m{(����<Y�nu�29���I��$�� R�x���}l�d-��Hb��h���j����Ԑk�:��X�� &ŀ��5`+��;ۓCٍ5�zB��?�TWA$�ů��[L/a>&�<J1s��EQҘ���N�O�t4<=|��`'�T�T1W�H��kr�e`�L���V����U� %/#�vGg8�50�l:�h-�yNr��T�B8����P s� �3v��Z�T�����W�,�s���p�F��o�F ����k�Rv�%�v�1!z^����,��/�b!ʅ��'Qә�bE$z�i��a�F07���;]�2]�Ȩ�<�#>f\�Up�q{p8ZLpX �l���%/��E5/#D���]�cD�"����n�N����pԺ��X %'���򖍅�P�������7vjB��XKW���ܔ�` 5����(�ml18��nG<z������4���1����u)-�,�QS�=ܔj�b7�'�������OW���0�
�0o#8�����1���4? �I�[8�w���cs:!��B���Hf_�*�������<|17�[N��IEND�B`�j
"� "@@�?�?P‡�������j�
"
@@�?�?�
� P‡�������j�
TT� �PNG

IHDRTT� ���IDATx�Y1r$7 Ժ�"m��WN�������p��p��Y�8�*�A��93������V��M��pV��/������7{m��=����ϝ�;����~���-ϝ�;����~��>/�y�����


}�M�LU�BK:�R��b�f����59M���?<<ʣn�_�F0?T�b���b���d*P�z�S�o��*�O�*9F�A��G��o���̈�J��Ki43�L�5�(�e��Ҹu�c��\0\�Ǟ����.��h�7�P)ʎ'��:J�0��2���˻���O�K�z�@C�`��5��8��k�#��؇G]:HO�϶����*�)!�z�+�d�r�w��u����n)`�i�Z;(�jv��a���b�Pj��C��=��,��01g��A&s�Lٶ7D.�E[r4&�p��:���j��;�N���}T���g�=\�C,$�@KC��u�s��<�%��ݙg0�nģ7���(ŷ�A���K�"Ȁe)�؇|^�6) �� ��-���Y*�{�/89ϋ��[�=O�m{(����<Y�nu�29���I��$�� R�x���}l�d-��Hb��h���j����Ԑk�:��X�� &ŀ��5`+��;ۓCٍ5�zB��?�TWA$�ů��[L/a>&�<J1s��EQҘ���N�O�t4<=|��`'�T�T1W�H��kr�e`�L���V����U� %/#�vGg8�50�l:�h-�yNr��T�B8����P s� �3v��Z�T�����W�,�s���p�F��o�F ����k�Rv�%�v�1!z^����,��/�b!ʅ��'Qә�bE$z�i��a�F07���;]�2]�Ȩ�<�#>f\�Up�q{p8ZLpX �l���%/��E5/#D���]�cD�"����n�N����pԺ��X %'���򖍅�P�������7vjB��XKW���ܔ�` 5����(�ml18��nG<z������4���1����u)-�,�QS�=ܔj�b7�'�������OW���0�
�0o#8�����1���4? �I�[8�w���cs:!��B���Hf_�*�������<|17�[N��IEND�B`�j
"� "@@�?�?P‡�������j�
"
@@�?�?�
� P‡�������j�
TT� �PNG

IHDRTT� ���IDATx�Y1r$7 Ժ�"m��WN�������p��p��Y�8�*�A��93������V��M��pV��/������7{m��=����ϝ�;����~���-ϝ�;����~��>/�y�����


}�M�LU�BK:�R��b�f����59M���?<<ʣn�_�F0?T�b���b���d*P�z�S�o��*�O�*9F�A��G��o���̈�J��Ki43�L�5�(�e��Ҹu�c��\0\�Ǟ����.��h�7�P)ʎ'��:J�0��2���˻���O�K�z�@C�`��5��8��k�#��؇G]:HO�϶����*�)!�z�+�d�r�w��u����n)`�i�Z;(�jv��a���b�Pj��C��=��,��01g��A&s�Lٶ7D.�E[r4&�p��:���j��;�N���}T���g�=\�C,$�@KC��u�s��<�%��ݙg0�nģ7���(ŷ�A���K�"Ȁe)�؇|^�6) �� ��-���Y*�{�/89ϋ��[�=O�m{(����<Y�nu�29���I��$�� R�x���}l�d-��Hb��h���j����Ԑk�:��X�� &ŀ��5`+��;ۓCٍ5�zB��?�TWA$�ů��[L/a>&�<J1s��EQҘ���N�O�t4<=|��`'�T�T1W�H��kr�e`�L���V����U� %/#�vGg8�50�l:�h-�yNr��T�B8����P s� �3v��Z�T�����W�,�s���p�F��o�F ����k�Rv�%�v�1!z^����,��/�b!ʅ��'Qә�bE$z�i��a�F07���;]�2]�Ȩ�<�#>f\�Up�q{p8ZLpX �l���%/��E5/#D���]�cD�"����n�N����pԺ��X %'���򖍅�P�������7vjB��XKW���ܔ�` 5����(�ml18��nG<z������4���1����u)-�,�QS�=ܔj�b7�'�������OW���0�
�0o#8�����1���4? �I�[8�w���cs:!��B���Hf_�*�������<|17�[N��IEND�B`�j
"� "�?�?@�?P‡�������j�
"
�?�?@�?�
� P‡�������j�
TT� �PNG

IHDRTT� ���IDATx�Y��U݁�T��d���GP�|!99F������]�

E���T8���e�G:���`k\Sh>KCJU��:��,y�!�B��db%BX�,T
!LAZ�!?I2��$7$_x�Ą��I��-;8�`��% ~���ƒ��Fw���yɱu8�$�3�|^�" _9���_��k8J��y#~��I�1#�������m���0}0�Nwa3�/�$O+����<u��m�t
��8z_)i�<���U#݌�#�O�k�1�c췋��wR�4~�ƙR6)�d�삟yǟRy8c9���c���1��5%��D�/�mo���s}Gxh#V���lx��d�X�|F��t#�]�l��0�EKghlJ�?���4iNۅm�^x�����&U�� Ixn:������ږ�Is�e��?��σ���IEND�B`�j
"� "�?�?@�?P‡�������j�
"
�?�?@�?�
� P‡�������j�
TT� �PNG

IHDRTT� ���IDATx�Y��U݁�T��d���GP�|!99F������]�

E���T8���e�G:���`k\Sh>KCJU��:��,y�!�B��db%BX�,T
!LAZ�!?I2��$7$_x�Ą��I��-;8�`��% ~���ƒ��Fw���yɱu8�$�3�|^�" _9���_��k8J��y#~��I�1#�������m���0}0�Nwa3�/�$O+����<u��m�t
��8z_)i�<���U#݌�#�O�k�1�c췋��wR�4~�ƙR6)�d�삟yǟRy8c9���c���1��5%��D�/�mo���s}Gxh#V���lx��d�X�|F��t#�]�l��0�EKghlJ�?���4iNۅm�^x�����&U�� Ixn:������ږ�Is�e��?��σ���IEND�B`�j
"� "�?�?@�?P‡�������j�
"
�?�?@�?�
� P‡�������j�
TT� �PNG

IHDRTT� ���IDATx�Y��U݁�T��d���GP�|!99F������]�

E���T8���e�G:���`k\Sh>KCJU��:��,y�!�B��db%BX�,T
!LAZ�!?I2��$7$_x�Ą��I��-;8�`��% ~���ƒ��Fw���yɱu8�$�3�|^�" _9���_��k8J��y#~��I�1#�������m���0}0�Nwa3�/�$O+����<u��m�t
��8z_)i�<���U#݌�#�O�k�1�c췋��wR�4~�ƙR6)�d�삟yǟRy8c9���c���1��5%��D�/�mo���s}Gxh#V���lx��d�X�|F��t#�]�l��0�EKghlJ�?���4iNۅm�^x�����&U�� Ixn:������ږ�Is�e��?��σ���IEND�B`�j
"� "�?�?@�?P‡�������j�
"
�?�?@�?�
� P‡�������j�
TT� �PNG

IHDRTT� ���IDATx�Y��U݁�T��d���GP�|!99F������]�

E���T8���e�G:���`k\Sh>KCJU��:��,y�!�B��db%BX�,T
!LAZ�!?I2��$7$_x�Ą��I��-;8�`��% ~���ƒ��Fw���yɱu8�$�3�|^�" _9���_��k8J��y#~��I�1#�������m���0}0�Nwa3�/�$O+����<u��m�t
��8z_)i�<���U#݌�#�O�k�1�c췋��wR�4~�ƙR6)�d�삟yǟRy8c9���c���1��5%��D�/�mo���s}Gxh#V���lx��d�X�|F��t#�]�l��0�EKghlJ�?���4iNۅm�^x�����&U�� Ixn:������ږ�Is�e��?��σ���IEND�B`�j
"� "�?�?@�?P‡�������j�
"
�?�?@�?�
� P‡�������j�
TT� �PNG

IHDRTT� ���IDATx�Y��U݁�T��d���GP�|!99F������]�

E���T8���e�G:���`k\Sh>KCJU��:��,y�!�B��db%BX�,T
!LAZ�!?I2��$7$_x�Ą��I��-;8�`��% ~���ƒ��Fw���yɱu8�$�3�|^�" _9���_��k8J��y#~��I�1#�������m���0}0�Nwa3�/�$O+����<u��m�t
��8z_)i�<���U#݌�#�O�k�1�c췋��wR�4~�ƙR6)�d�삟yǟRy8c9���c���1��5%��D�/�mo���s}Gxh#V���lx��d�X�|F��t#�]�l��0�EKghlJ�?���4iNۅm�^x�����&U�� Ixn:������ږ�Is�e��?��σ���IEND�B`�j
"� "�?�?�?P‡�������j�
"
�?�?�?�
� P‡�������j�
"� "�?�?�?P‡�������j�
"
�?�?�?�
� P‡�������j�
"� "�?�?�?P‡�������j�
"
�?�?�?�
� P‡�������j�
"� "�?�?�?P‡�������j�
"
�?�?�?�
� P‡�������j�
"� "�?�?�?P‡�������j�
"
�?�?�?�
� P‡�������j�
"�"@P‡�������j�
"
@�
�P‡�������j�
TT��PNG

IHDRTT� ���IDATx�Z�nE�I��bG�+BA)�&���y�#$x�9'`��H�8ή����P�S�U��3;��ǑfF#w�|����q���Ά�\j�X�X�Pw��q�؁q�����q�ǝ`Ʊএ�8������p���~�q�؁q����m?��8���8������~�c�?�'��I\��������* қ����M�Z$k�TPI�2Z�kQ����^���#�_�n�^q��F?�}�������u6W�����/fEq

8������<���-,�G��������P[��!ѐC��m�(�s�l�A�Z�ٙ'����s^;�lD{rt
�l>�y<���+���~�n��h����ZPB ���h���X��i'�ݸ�^}�a��7n�_�Ώ�7�a��ڽFP�hd$�HLX1!������f�@сs����ӗ7�߄�O�9�x�ލ=���f��Rl���PFFL-E@���X���|2X'(=+��ك��W=�hi����(F�4K�ӈ�����)�L�*#�����l�%~��*~إՈ//E�����Q|Д$LwR�������M���:4!�i)ђ�W��XF��,E@�E(^,��Ym�}]1��%���*��N6��(��o��b�ġR����w&���d�j�35X�Q[���W`B҂
C�v����~$^�Y��J��)�;�(x�#[`k{]��C���i V�4�:���+�[�H!z��[��KaLI>,�U�La��ڄQp_n�����|�p�$��2qBeW���0��M_Ď(Lu�� \/K��A�KYe,9��ҁ$Rk��2ӵ#1�b���M[�����C��UX�� J-5HG�Q�w��l=��C�Kv�E:$�["�b��v 2q�Ł�j�tFJ�c�|h�xb�X�:j���j?�b���#����*��Z�(PT������������I+F�ߴ���� °ځ�tB9����y����&Z��I�ʅK#A��Sa�V:�(U�`(�H ^�Z�����ʀ�v��Xх'v԰v6�wS��HN$U�/��{$�u�� /p�!�uBZ�c�F�j�����z� O<��t�z�6���a`��3�I�gL���^�_��w��Ɖ�v���3"W���r�D:���8�)��a/���� �8B�vƦ�It��) :b�u� Uu��}��}`�Z�o�n�.U�j�ϼqu��/�@��6#�F��x� �K�v���aL3�qR]�I� �„p�w���Y�������#�_c#�ⵕ  |���daG{��M#\�Z���eUZ�e���j��z�S� ϱZ֚\g`��U�Ɉ��8ӋR����:���V]!d�(N#��?��˙$�%JIEND�B`�j
"�"@P‡�������j�
"
@�
�P‡�������j�
TT��PNG

IHDRTT� ���IDATx�Z�nE�I��bG�+BA)�&���y�#$x�9'`��H�8ή����P�S�U��3;��ǑfF#w�|����q���Ά�\j�X�X�Pw��q�؁q�����q�ǝ`Ʊএ�8������p���~�q�؁q����m?��8���8������~�c�?�'��I\��������* қ����M�Z$k�TPI�2Z�kQ����^���#�_�n�^q��F?�}�������u6W�����/fEq

8������<���-,�G��������P[��!ѐC��m�(�s�l�A�Z�ٙ'����s^;�lD{rt
�l>�y<���+���~�n��h����ZPB ���h���X��i'�ݸ�^}�a��7n�_�Ώ�7�a��ڽFP�hd$�HLX1!������f�@сs����ӗ7�߄�O�9�x�ލ=���f��Rl���PFFL-E@���X���|2X'(=+��ك��W=�hi����(F�4K�ӈ�����)�L�*#�����l�%~��*~إՈ//E�����Q|Д$LwR�������M���:4!�i)ђ�W��XF��,E@�E(^,��Ym�}]1��%���*��N6��(��o��b�ġR����w&���d�j�35X�Q[���W`B҂
C�v����~$^�Y��J��)�;�(x�#[`k{]��C���i V�4�:���+�[�H!z��[��KaLI>,�U�La��ڄQp_n�����|�p�$��2qBeW���0��M_Ď(Lu�� \/K��A�KYe,9��ҁ$Rk��2ӵ#1�b���M[�����C��UX�� J-5HG�Q�w��l=��C�Kv�E:$�["�b��v 2q�Ł�j�tFJ�c�|h�xb�X�:j���j?�b���#����*��Z�(PT������������I+F�ߴ���� °ځ�tB9����y����&Z��I�ʅK#A��Sa�V:�(U�`(�H ^�Z�����ʀ�v��Xх'v԰v6�wS��HN$U�/��{$�u�� /p�!�uBZ�c�F�j�����z� O<��t�z�6���a`��3�I�gL���^�_��w��Ɖ�v���3"W���r�D:���8�)��a/���� �8B�vƦ�It��) :b�u� Uu��}��}`�Z�o�n�.U�j�ϼqu��/�@��6#�F��x� �K�v���aL3�qR]�I� �„p�w���Y�������#�_c#�ⵕ  |���daG{��M#\�Z���eUZ�e���j��z�S� ϱZ֚\g`��U�Ɉ��8ӋR����:���V]!d�(N#��?��˙$�%JIEND�B`�j
"�"@P‡�������j�
"
@�
�P‡�������j�
TT��PNG

IHDRTT� ���IDATx�Z�nE�I��bG�+BA)�&���y�#$x�9'`��H�8ή����P�S�U��3;��ǑfF#w�|����q���Ά�\j�X�X�Pw��q�؁q�����q�ǝ`Ʊএ�8������p���~�q�؁q����m?��8���8������~�c�?�'��I\��������* қ����M�Z$k�TPI�2Z�kQ����^���#�_�n�^q��F?�}�������u6W�����/fEq

8������<���-,�G��������P[��!ѐC��m�(�s�l�A�Z�ٙ'����s^;�lD{rt
�l>�y<���+���~�n��h����ZPB ���h���X��i'�ݸ�^}�a��7n�_�Ώ�7�a��ڽFP�hd$�HLX1!������f�@сs����ӗ7�߄�O�9�x�ލ=���f��Rl���PFFL-E@���X���|2X'(=+��ك��W=�hi����(F�4K�ӈ�����)�L�*#�����l�%~��*~إՈ//E�����Q|Д$LwR�������M���:4!�i)ђ�W��XF��,E@�E(^,��Ym�}]1��%���*��N6��(��o��b�ġR����w&���d�j�35X�Q[���W`B҂
C�v����~$^�Y��J��)�;�(x�#[`k{]��C���i V�4�:���+�[�H!z��[��KaLI>,�U�La��ڄQp_n�����|�p�$��2qBeW���0��M_Ď(Lu�� \/K��A�KYe,9��ҁ$Rk��2ӵ#1�b���M[�����C��UX�� J-5HG�Q�w��l=��C�Kv�E:$�["�b��v 2q�Ł�j�tFJ�c�|h�xb�X�:j���j?�b���#����*��Z�(PT������������I+F�ߴ���� °ځ�tB9����y����&Z��I�ʅK#A��Sa�V:�(U�`(�H ^�Z�����ʀ�v��Xх'v԰v6�wS��HN$U�/��{$�u�� /p�!�uBZ�c�F�j�����z� O<��t�z�6���a`��3�I�gL���^�_��w��Ɖ�v���3"W���r�D:���8�)��a/���� �8B�vƦ�It��) :b�u� Uu��}��}`�Z�o�n�.U�j�ϼqu��/�@��6#�F��x� �K�v���aL3�qR]�I� �„p�w���Y�������#�_c#�ⵕ  |���daG{��M#\�Z���eUZ�e���j��z�S� ϱZ֚\g`��U�Ɉ��8ӋR����:���V]!d�(N#��?��˙$�%JIEND�B`�j
"�"@P‡�������j�
"
@�
�P‡�������j�
TT��PNG

IHDRTT� ���IDATx�Z�nE�I��bG�+BA)�&���y�#$x�9'`��H�8ή����P�S�U��3;��ǑfF#w�|����q���Ά�\j�X�X�Pw��q�؁q�����q�ǝ`Ʊএ�8������p���~�q�؁q����m?��8���8������~�c�?�'��I\��������* қ����M�Z$k�TPI�2Z�kQ����^���#�_�n�^q��F?�}�������u6W�����/fEq

8������<���-,�G��������P[��!ѐC��m�(�s�l�A�Z�ٙ'����s^;�lD{rt
�l>�y<���+���~�n��h����ZPB ���h���X��i'�ݸ�^}�a��7n�_�Ώ�7�a��ڽFP�hd$�HLX1!������f�@сs����ӗ7�߄�O�9�x�ލ=���f��Rl���PFFL-E@���X���|2X'(=+��ك��W=�hi����(F�4K�ӈ�����)�L�*#�����l�%~��*~إՈ//E�����Q|Д$LwR�������M���:4!�i)ђ�W��XF��,E@�E(^,��Ym�}]1��%���*��N6��(��o��b�ġR����w&���d�j�35X�Q[���W`B҂
C�v����~$^�Y��J��)�;�(x�#[`k{]��C���i V�4�:���+�[�H!z��[��KaLI>,�U�La��ڄQp_n�����|�p�$��2qBeW���0��M_Ď(Lu�� \/K��A�KYe,9��ҁ$Rk��2ӵ#1�b���M[�����C��UX�� J-5HG�Q�w��l=��C�Kv�E:$�["�b��v 2q�Ł�j�tFJ�c�|h�xb�X�:j���j?�b���#����*��Z�(PT������������I+F�ߴ���� °ځ�tB9����y����&Z��I�ʅK#A��Sa�V:�(U�`(�H ^�Z�����ʀ�v��Xх'v԰v6�wS��HN$U�/��{$�u�� /p�!�uBZ�c�F�j�����z� O<��t�z�6���a`��3�I�gL���^�_��w��Ɖ�v���3"W���r�D:���8�)��a/���� �8B�vƦ�It��) :b�u� Uu��}��}`�Z�o�n�.U�j�ϼqu��/�@��6#�F��x� �K�v���aL3�qR]�I� �„p�w���Y�������#�_c#�ⵕ  |���daG{��M#\�Z���eUZ�e���j��z�S� ϱZ֚\g`��U�Ɉ��8ӋR����:���V]!d�(N#��?��˙$�%JIEND�B`�j
"�"@P‡�������j�
"
@�
�P‡�������j�
TT��PNG

IHDRTT� ���IDATx�Z�nE�I��bG�+BA)�&���y�#$x�9'`��H�8ή����P�S�U��3;��ǑfF#w�|����q���Ά�\j�X�X�Pw��q�؁q�����q�ǝ`Ʊএ�8������p���~�q�؁q����m?��8���8������~�c�?�'��I\��������* қ����M�Z$k�TPI�2Z�kQ����^���#�_�n�^q��F?�}�������u6W�����/fEq

8������<���-,�G��������P[��!ѐC��m�(�s�l�A�Z�ٙ'����s^;�lD{rt
�l>�y<���+���~�n��h����ZPB ���h���X��i'�ݸ�^}�a��7n�_�Ώ�7�a��ڽFP�hd$�HLX1!������f�@сs����ӗ7�߄�O�9�x�ލ=���f��Rl���PFFL-E@���X���|2X'(=+��ك��W=�hi����(F�4K�ӈ�����)�L�*#�����l�%~��*~إՈ//E�����Q|Д$LwR�������M���:4!�i)ђ�W��XF��,E@�E(^,��Ym�}]1��%���*��N6��(��o��b�ġR����w&���d�j�35X�Q[���W`B҂
C�v����~$^�Y��J��)�;�(x�#[`k{]��C���i V�4�:���+�[�H!z��[��KaLI>,�U�La��ڄQp_n�����|�p�$��2qBeW���0��M_Ď(Lu�� \/K��A�KYe,9��ҁ$Rk��2ӵ#1�b���M[�����C��UX�� J-5HG�Q�w��l=��C�Kv�E:$�["�b��v 2q�Ł�j�tFJ�c�|h�xb�X�:j���j?�b���#����*��Z�(PT������������I+F�ߴ���� °ځ�tB9����y����&Z��I�ʅK#A��Sa�V:�(U�`(�H ^�Z�����ʀ�v��Xх'v԰v6�wS��HN$U�/��{$�u�� /p�!�uBZ�c�F�j�����z� O<��t�z�6���a`��3�I�gL���^�_��w��Ɖ�v���3"W���r�D:���8�)��a/���� �8B�vƦ�It��) :b�u� Uu��}��}`�Z�o�n�.U�j�ϼqu��/�@��6#�F��x� �K�v���aL3�qR]�I� �„p�w���Y�������#�_c#�ⵕ  |���daG{��M#\�Z���eUZ�e���j��z�S� ϱZ֚\g`��U�Ɉ��8ӋR����:���V]!d�(N#��?��˙$�%JIEND�B`�j
"�"@P‡�������j�
"
@�
�P‡�������j�
TT��PNG

IHDRTT� ���IDATx�ZK�E�%��ټ �\,ʕK�q��=?q������ʕ�P�8�1+���;�;TuWuU�􌽎c��L��z|_���=�d�ٗ_e]���j��w�|WW�_�~�;8�~�wp�]����+�� �۾���x����}'�o�.z��۾���@��;���i�o�~�wp�������}����3����{<zx���7��$|�ɭ&���-͜����_?�c���eY?���-7�T����v ��m��/�8yx2=<�}���y�߻}�ȊrR��tyZU���j2�\�.o��p�?�e?�}����lA�b�,������<-�C��>}u�Q�T�f�yV��:���r>E?�f�,����&��t���W>}t����QSA�*ۍo�~����q {������q����?<��Gw���tAYg�}&A(g���Y�Aͬ�W͎<�91�3:�S^36j6&�

%�ԑu��>��^U�ʋ�R=��F�z꩔/ԏ�E%�n�"\��Ho ��Uy���-[��Q�RV�a}�1pQŞF�����(,��D� ��7zG�W���+8�O)�΍}qB���'� �Jȓ�������򫎣ի_âȡ�)�jnm2PV�=C�@�r �����o����uO�����]��� �[ �M�Q֠(w��ds���!:�I�A�3ρB��Bu&h:��2�!��qHwA��y�#�(t�Ӟc�j��٪PK#��<���@�� sT�EVohm� �'��{Ȥ�KW�5�Qo�·C�ȇ74�n�x<��3��/�F G�H]x�(U>� ���s��L�`i}�}\N����U~Ðz�Y)iD"I}"y �3������0�j�)���!x6V�d����&�:@ӂ��pnc���t��0!YBX���i����L���p����1~�`��<�y�,|���؇qW����W�N�g1��?=��܏q�I"o?e������}&�m�a"�I��b���H覚��l������f����3$s ��7p&H����j�P��ImWCw��"��$��Y��Y�D��'TԔ�60E>��{p��-�ݒ��K� � o^���.O�h���8;ou�<��}��Ρj0~��o�7`+N��5G_�ƴ�����A6:��Ԧ�V�Aj�.����m���N+��V�袩7�8��5[�
qF�% t^i(Dn�e'�N��՚���f�w!��^/#��wEj��k^{-v��,=�J�]nq�,�s; ��hp�9U���� L��6r�IB�l4X���Y4 �i��������
�)�/��ED$(DLIEND�B`�j
"�"@P‡�������j�
"
@�
�P‡�������j�
TT��PNG

IHDRTT� ���IDATx�ZK�E�%��ټ �\,ʕK�q��=?q������ʕ�P�8�1+���;�;TuWuU�􌽎c��L��z|_���=�d�ٗ_e]���j��w�|WW�_�~�;8�~�wp�]����+�� �۾���x����}'�o�.z��۾���@��;���i�o�~�wp�������}����3����{<zx���7��$|�ɭ&���-͜����_?�c���eY?���-7�T����v ��m��/�8yx2=<�}���y�߻}�ȊrR��tyZU���j2�\�.o��p�?�e?�}����lA�b�,������<-�C��>}u�Q�T�f�yV��:���r>E?�f�,����&��t���W>}t����QSA�*ۍo�~����q {������q����?<��Gw���tAYg�}&A(g���Y�Aͬ�W͎<�91�3:�S^36j6&�

%�ԑu��>��^U�ʋ�R=��F�z꩔/ԏ�E%�n�"\��Ho ��Uy���-[��Q�RV�a}�1pQŞF�����(,��D� ��7zG�W���+8�O)�΍}qB���'� �Jȓ�������򫎣ի_âȡ�)�jnm2PV�=C�@�r �����o����uO�����]��� �[ �M�Q֠(w��ds���!:�I�A�3ρB��Bu&h:��2�!��qHwA��y�#�(t�Ӟc�j��٪PK#��<���@�� sT�EVohm� �'��{Ȥ�KW�5�Qo�·C�ȇ74�n�x<��3��/�F G�H]x�(U>� ���s��L�`i}�}\N����U~Ðz�Y)iD"I}"y �3������0�j�)���!x6V�d����&�:@ӂ��pnc���t��0!YBX���i����L���p����1~�`��<�y�,|���؇qW����W�N�g1��?=��܏q�I"o?e������}&�m�a"�I��b���H覚��l������f����3$s ��7p&H����j�P��ImWCw��"��$��Y��Y�D��'TԔ�60E>��{p��-�ݒ��K� � o^���.O�h���8;ou�<��}��Ρj0~��o�7`+N��5G_�ƴ�����A6:��Ԧ�V�Aj�.����m���N+��V�袩7�8��5[�
qF�% t^i(Dn�e'�N��՚���f�w!��^/#��wEj��k^{-v��,=�J�]nq�,�s; ��hp�9U���� L��6r�IB�l4X���Y4 �i��������
�)�/��ED$(DLIEND�B`�j
"�"@P‡�������j�
"
@�
�P‡�������j�
TT��PNG

IHDRTT� ���IDATx�ZK�E�%��ټ �\,ʕK�q��=?q������ʕ�P�8�1+���;�;TuWuU�􌽎c��L��z|_���=�d�ٗ_e]���j��w�|WW�_�~�;8�~�wp�]����+�� �۾���x����}'�o�.z��۾���@��;���i�o�~�wp�������}����3����{<zx���7��$|�ɭ&���-͜����_?�c���eY?���-7�T����v ��m��/�8yx2=<�}���y�߻}�ȊrR��tyZU���j2�\�.o��p�?�e?�}����lA�b�,������<-�C��>}u�Q�T�f�yV��:���r>E?�f�,����&��t���W>}t����QSA�*ۍo�~����q {������q����?<��Gw���tAYg�}&A(g���Y�Aͬ�W͎<�91�3:�S^36j6&�

%�ԑu��>��^U�ʋ�R=��F�z꩔/ԏ�E%�n�"\��Ho ��Uy���-[��Q�RV�a}�1pQŞF�����(,��D� ��7zG�W���+8�O)�΍}qB���'� �Jȓ�������򫎣ի_âȡ�)�jnm2PV�=C�@�r �����o����uO�����]��� �[ �M�Q֠(w��ds���!:�I�A�3ρB��Bu&h:��2�!��qHwA��y�#�(t�Ӟc�j��٪PK#��<���@�� sT�EVohm� �'��{Ȥ�KW�5�Qo�·C�ȇ74�n�x<��3��/�F G�H]x�(U>� ���s��L�`i}�}\N����U~Ðz�Y)iD"I}"y �3������0�j�)���!x6V�d����&�:@ӂ��pnc���t��0!YBX���i����L���p����1~�`��<�y�,|���؇qW����W�N�g1��?=��܏q�I"o?e������}&�m�a"�I��b���H覚��l������f����3$s ��7p&H����j�P��ImWCw��"��$��Y��Y�D��'TԔ�60E>��{p��-�ݒ��K� � o^���.O�h���8;ou�<��}��Ρj0~��o�7`+N��5G_�ƴ�����A6:��Ԧ�V�Aj�.����m���N+��V�袩7�8��5[�
qF�% t^i(Dn�e'�N��՚���f�w!��^/#��wEj��k^{-v��,=�J�]nq�,�s; ��hp�9U���� L��6r�IB�l4X���Y4 �i��������
�)�/��ED$(DLIEND�B`�j
"
"

50
ml-agents/mlagents/trainers/tf_policy.py


self.brain = brain
self.use_recurrent = trainer_parameters["use_recurrent"]
self.memory_dict: Dict[int, np.ndarray] = {}
self.num_branches = len(self.brain.vector_action_space_size)
self.previous_action_dict: Dict[int, np.array] = {}
if self.use_continuous_act:
self.num_branches = self.brain.vector_action_space_size[0]
self.model_path = trainer_parameters["model_path"]
self.keep_checkpoints = trainer_parameters.get("keep_checkpoints", 5)
self.graph = tf.Graph()

if len(brain_info.agents) == 0:
return ActionInfo([], [], None)
self.remove_memories(
[
agent
for agent, done in zip(brain_info.agents, brain_info.local_done)
if done
]
)
agents_done = [
agent
for agent, done in zip(brain_info.agents, brain_info.local_done)
if done
]
self.remove_memories(agents_done)
self.remove_previous_action(agents_done)
run_out = self.evaluate(brain_info) # pylint: disable=assignment-from-no-return
self.save_memories(brain_info.agents, run_out.get("memory_out"))
return ActionInfo(

:param num_agents: Number of agents.
:return: Numpy array of zeros.
"""
return np.zeros((num_agents, self.m_size))
return np.zeros((num_agents, self.m_size), dtype=np.float)
def save_memories(
self, agent_ids: List[int], memory_matrix: Optional[np.ndarray]

for agent_id in agent_ids:
if agent_id in self.memory_dict:
self.memory_dict.pop(agent_id)
def make_empty_previous_action(self, num_agents):
"""
Creates empty previous action for use with RNNs and discrete control
:param num_agents: Number of agents.
:return: Numpy array of zeros.
"""
return np.zeros((num_agents, self.num_branches), dtype=np.int)
def save_previous_action(
self, agent_ids: List[int], action_matrix: Optional[np.ndarray]
) -> None:
if action_matrix is None:
return
for index, agent_id in enumerate(agent_ids):
self.previous_action_dict[agent_id] = action_matrix[index, :]
def retrieve_previous_action(self, agent_ids: List[int]) -> np.ndarray:
action_matrix = np.zeros((len(agent_ids), self.num_branches), dtype=np.int)
for index, agent_id in enumerate(agent_ids):
if agent_id in self.previous_action_dict:
action_matrix[index, :] = self.previous_action_dict[agent_id]
return action_matrix
def remove_previous_action(self, agent_ids):
for agent_id in agent_ids:
if agent_id in self.previous_action_dict:
self.previous_action_dict.pop(agent_id)
def get_current_step(self):
"""

2
protobuf-definitions/proto/mlagents/envs/communicator_objects/agent_info.proto


reserved 1; // deprecated repeated float stacked_vector_observation = 1;
reserved 2; // deprecated repeated bytes visual_observations = 2;
reserved 3; // deprecated string text_observation = 3;
repeated float stored_vector_actions = 4;
reserved 4; // repeated float stored_vector_actions = 4;
reserved 5; // deprecated string stored_text_actions = 5;
reserved 6; //repeated float memories = 6;
float reward = 7;

219
UnitySDK/Assets/ML-Agents/Scripts/Grpc/CommunicatorObjects/AgentInfoActionPair.cs


// <auto-generated>
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: mlagents/envs/communicator_objects/agent_info_action_pair.proto
// </auto-generated>
#pragma warning disable 1591, 0612, 3021
#region Designer generated code
using pb = global::Google.Protobuf;
using pbc = global::Google.Protobuf.Collections;
using pbr = global::Google.Protobuf.Reflection;
using scg = global::System.Collections.Generic;
namespace MLAgents.CommunicatorObjects {
/// <summary>Holder for reflection information generated from mlagents/envs/communicator_objects/agent_info_action_pair.proto</summary>
public static partial class AgentInfoActionPairReflection {
#region Descriptor
/// <summary>File descriptor for mlagents/envs/communicator_objects/agent_info_action_pair.proto</summary>
public static pbr::FileDescriptor Descriptor {
get { return descriptor; }
}
private static pbr::FileDescriptor descriptor;
static AgentInfoActionPairReflection() {
byte[] descriptorData = global::System.Convert.FromBase64String(
string.Concat(
"Cj9tbGFnZW50cy9lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL2FnZW50X2lu",
"Zm9fYWN0aW9uX3BhaXIucHJvdG8SFGNvbW11bmljYXRvcl9vYmplY3RzGjNt",
"bGFnZW50cy9lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL2FnZW50X2luZm8u",
"cHJvdG8aNW1sYWdlbnRzL2VudnMvY29tbXVuaWNhdG9yX29iamVjdHMvYWdl",
"bnRfYWN0aW9uLnByb3RvIpEBChhBZ2VudEluZm9BY3Rpb25QYWlyUHJvdG8S",
"OAoKYWdlbnRfaW5mbxgBIAEoCzIkLmNvbW11bmljYXRvcl9vYmplY3RzLkFn",
"ZW50SW5mb1Byb3RvEjsKC2FjdGlvbl9pbmZvGAIgASgLMiYuY29tbXVuaWNh",
"dG9yX29iamVjdHMuQWdlbnRBY3Rpb25Qcm90b0IfqgIcTUxBZ2VudHMuQ29t",
"bXVuaWNhdG9yT2JqZWN0c2IGcHJvdG8z"));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { global::MLAgents.CommunicatorObjects.AgentInfoReflection.Descriptor, global::MLAgents.CommunicatorObjects.AgentActionReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
new pbr::GeneratedClrTypeInfo(typeof(global::MLAgents.CommunicatorObjects.AgentInfoActionPairProto), global::MLAgents.CommunicatorObjects.AgentInfoActionPairProto.Parser, new[]{ "AgentInfo", "ActionInfo" }, null, null, null)
}));
}
#endregion
}
#region Messages
public sealed partial class AgentInfoActionPairProto : pb::IMessage<AgentInfoActionPairProto> {
private static readonly pb::MessageParser<AgentInfoActionPairProto> _parser = new pb::MessageParser<AgentInfoActionPairProto>(() => new AgentInfoActionPairProto());
private pb::UnknownFieldSet _unknownFields;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public static pb::MessageParser<AgentInfoActionPairProto> Parser { get { return _parser; } }
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public static pbr::MessageDescriptor Descriptor {
get { return global::MLAgents.CommunicatorObjects.AgentInfoActionPairReflection.Descriptor.MessageTypes[0]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
pbr::MessageDescriptor pb::IMessage.Descriptor {
get { return Descriptor; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public AgentInfoActionPairProto() {
OnConstruction();
}
partial void OnConstruction();
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public AgentInfoActionPairProto(AgentInfoActionPairProto other) : this() {
AgentInfo = other.agentInfo_ != null ? other.AgentInfo.Clone() : null;
ActionInfo = other.actionInfo_ != null ? other.ActionInfo.Clone() : null;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public AgentInfoActionPairProto Clone() {
return new AgentInfoActionPairProto(this);
}
/// <summary>Field number for the "agent_info" field.</summary>
public const int AgentInfoFieldNumber = 1;
private global::MLAgents.CommunicatorObjects.AgentInfoProto agentInfo_;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::MLAgents.CommunicatorObjects.AgentInfoProto AgentInfo {
get { return agentInfo_; }
set {
agentInfo_ = value;
}
}
/// <summary>Field number for the "action_info" field.</summary>
public const int ActionInfoFieldNumber = 2;
private global::MLAgents.CommunicatorObjects.AgentActionProto actionInfo_;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::MLAgents.CommunicatorObjects.AgentActionProto ActionInfo {
get { return actionInfo_; }
set {
actionInfo_ = value;
}
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override bool Equals(object other) {
return Equals(other as AgentInfoActionPairProto);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public bool Equals(AgentInfoActionPairProto other) {
if (ReferenceEquals(other, null)) {
return false;
}
if (ReferenceEquals(other, this)) {
return true;
}
if (!object.Equals(AgentInfo, other.AgentInfo)) return false;
if (!object.Equals(ActionInfo, other.ActionInfo)) return false;
return Equals(_unknownFields, other._unknownFields);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override int GetHashCode() {
int hash = 1;
if (agentInfo_ != null) hash ^= AgentInfo.GetHashCode();
if (actionInfo_ != null) hash ^= ActionInfo.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}
return hash;
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override string ToString() {
return pb::JsonFormatter.ToDiagnosticString(this);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public void WriteTo(pb::CodedOutputStream output) {
if (agentInfo_ != null) {
output.WriteRawTag(10);
output.WriteMessage(AgentInfo);
}
if (actionInfo_ != null) {
output.WriteRawTag(18);
output.WriteMessage(ActionInfo);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int CalculateSize() {
int size = 0;
if (agentInfo_ != null) {
size += 1 + pb::CodedOutputStream.ComputeMessageSize(AgentInfo);
}
if (actionInfo_ != null) {
size += 1 + pb::CodedOutputStream.ComputeMessageSize(ActionInfo);
}
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}
return size;
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public void MergeFrom(AgentInfoActionPairProto other) {
if (other == null) {
return;
}
if (other.agentInfo_ != null) {
if (agentInfo_ == null) {
agentInfo_ = new global::MLAgents.CommunicatorObjects.AgentInfoProto();
}
AgentInfo.MergeFrom(other.AgentInfo);
}
if (other.actionInfo_ != null) {
if (actionInfo_ == null) {
actionInfo_ = new global::MLAgents.CommunicatorObjects.AgentActionProto();
}
ActionInfo.MergeFrom(other.ActionInfo);
}
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public void MergeFrom(pb::CodedInputStream input) {
uint tag;
while ((tag = input.ReadTag()) != 0) {
switch(tag) {
default:
_unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
break;
case 10: {
if (agentInfo_ == null) {
agentInfo_ = new global::MLAgents.CommunicatorObjects.AgentInfoProto();
}
input.ReadMessage(agentInfo_);
break;
}
case 18: {
if (actionInfo_ == null) {
actionInfo_ = new global::MLAgents.CommunicatorObjects.AgentActionProto();
}
input.ReadMessage(actionInfo_);
break;
}
}
}
}
}
#endregion
}
#endregion Designer generated code

11
UnitySDK/Assets/ML-Agents/Scripts/Grpc/CommunicatorObjects/AgentInfoActionPair.cs.meta


fileFormatVersion: 2
guid: 29577366657494c678558b0643abcb30
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

83
ml-agents-envs/mlagents/envs/communicator_objects/agent_info_action_pair_pb2.py


# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: mlagents/envs/communicator_objects/agent_info_action_pair.proto
import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
from mlagents.envs.communicator_objects import agent_info_pb2 as mlagents_dot_envs_dot_communicator__objects_dot_agent__info__pb2
from mlagents.envs.communicator_objects import agent_action_pb2 as mlagents_dot_envs_dot_communicator__objects_dot_agent__action__pb2
DESCRIPTOR = _descriptor.FileDescriptor(
name='mlagents/envs/communicator_objects/agent_info_action_pair.proto',
package='communicator_objects',
syntax='proto3',
serialized_pb=_b('\n?mlagents/envs/communicator_objects/agent_info_action_pair.proto\x12\x14\x63ommunicator_objects\x1a\x33mlagents/envs/communicator_objects/agent_info.proto\x1a\x35mlagents/envs/communicator_objects/agent_action.proto\"\x91\x01\n\x18\x41gentInfoActionPairProto\x12\x38\n\nagent_info\x18\x01 \x01(\x0b\x32$.communicator_objects.AgentInfoProto\x12;\n\x0b\x61\x63tion_info\x18\x02 \x01(\x0b\x32&.communicator_objects.AgentActionProtoB\x1f\xaa\x02\x1cMLAgents.CommunicatorObjectsb\x06proto3')
,
dependencies=[mlagents_dot_envs_dot_communicator__objects_dot_agent__info__pb2.DESCRIPTOR,mlagents_dot_envs_dot_communicator__objects_dot_agent__action__pb2.DESCRIPTOR,])
_AGENTINFOACTIONPAIRPROTO = _descriptor.Descriptor(
name='AgentInfoActionPairProto',
full_name='communicator_objects.AgentInfoActionPairProto',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='agent_info', full_name='communicator_objects.AgentInfoActionPairProto.agent_info', index=0,
number=1, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='action_info', full_name='communicator_objects.AgentInfoActionPairProto.action_info', index=1,
number=2, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=198,
serialized_end=343,
)
_AGENTINFOACTIONPAIRPROTO.fields_by_name['agent_info'].message_type = mlagents_dot_envs_dot_communicator__objects_dot_agent__info__pb2._AGENTINFOPROTO
_AGENTINFOACTIONPAIRPROTO.fields_by_name['action_info'].message_type = mlagents_dot_envs_dot_communicator__objects_dot_agent__action__pb2._AGENTACTIONPROTO
DESCRIPTOR.message_types_by_name['AgentInfoActionPairProto'] = _AGENTINFOACTIONPAIRPROTO
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
AgentInfoActionPairProto = _reflection.GeneratedProtocolMessageType('AgentInfoActionPairProto', (_message.Message,), dict(
DESCRIPTOR = _AGENTINFOACTIONPAIRPROTO,
__module__ = 'mlagents.envs.communicator_objects.agent_info_action_pair_pb2'
# @@protoc_insertion_point(class_scope:communicator_objects.AgentInfoActionPairProto)
))
_sym_db.RegisterMessage(AgentInfoActionPairProto)
DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\252\002\034MLAgents.CommunicatorObjects'))
# @@protoc_insertion_point(module_scope)

57
ml-agents-envs/mlagents/envs/communicator_objects/agent_info_action_pair_pb2.pyi


# @generated by generate_proto_mypy_stubs.py. Do not edit!
import sys
from google.protobuf.descriptor import (
Descriptor as google___protobuf___descriptor___Descriptor,
)
from google.protobuf.message import (
Message as google___protobuf___message___Message,
)
from mlagents.envs.communicator_objects.agent_action_pb2 import (
AgentActionProto as mlagents___envs___communicator_objects___agent_action_pb2___AgentActionProto,
)
from mlagents.envs.communicator_objects.agent_info_pb2 import (
AgentInfoProto as mlagents___envs___communicator_objects___agent_info_pb2___AgentInfoProto,
)
from typing import (
Optional as typing___Optional,
)
from typing_extensions import (
Literal as typing_extensions___Literal,
)
builtin___bool = bool
builtin___bytes = bytes
builtin___float = float
builtin___int = int
class AgentInfoActionPairProto(google___protobuf___message___Message):
DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
@property
def agent_info(self) -> mlagents___envs___communicator_objects___agent_info_pb2___AgentInfoProto: ...
@property
def action_info(self) -> mlagents___envs___communicator_objects___agent_action_pb2___AgentActionProto: ...
def __init__(self,
*,
agent_info : typing___Optional[mlagents___envs___communicator_objects___agent_info_pb2___AgentInfoProto] = None,
action_info : typing___Optional[mlagents___envs___communicator_objects___agent_action_pb2___AgentActionProto] = None,
) -> None: ...
@classmethod
def FromString(cls, s: builtin___bytes) -> AgentInfoActionPairProto: ...
def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
if sys.version_info >= (3,):
def HasField(self, field_name: typing_extensions___Literal[u"action_info",u"agent_info"]) -> builtin___bool: ...
def ClearField(self, field_name: typing_extensions___Literal[u"action_info",u"agent_info"]) -> None: ...
else:
def HasField(self, field_name: typing_extensions___Literal[u"action_info",b"action_info",u"agent_info",b"agent_info"]) -> builtin___bool: ...
def ClearField(self, field_name: typing_extensions___Literal[u"action_info",b"action_info",u"agent_info",b"agent_info"]) -> None: ...

130
ml-agents/mlagents/trainers/tests/test_demo_dir/test4.demo


test4 -��@ 0:3DBallB
4P���������j'
""
lW=��<�~ ��@Pi~�
G
9=���=P���������j'
""
N�f<z*�<�~ ��;|@Pi~��"{�
�����v=G
9=���=P���������j'
""
�p�<���;�~ �0r@Pi~��"��
�E6>�uQ�G
9=���=P���������j'
""
x"����=�~ ��a@Pi~�Z<�
{���P@?G
9=���=P���������j'
""
�}���=E �X]P@Ha{�&�=���=�?
v6=���>G
9=���=P���������j'
""
^���=�=
��ZT@�'f�"�=�5�T7?
�w�=÷ >G
9=���=P���������j'
""
"Ǐ���=���sO@��S�"�=kH��T7?
�p6���G
9=���=P���������j'
""
���<���<|V�UED@`}A�"�=���T7?
�?��4�G
9=���=P���������j'
""
yN���K�<��a�B@x[-�M�= ��L?
�������G
9=���=P���������j'
""
����^�=u���ڜD@������=T����PV?
�Ys���P>G
9=���=P���������j'
""
���<H��<����n@@Xh����=>х��PV?
X�?y�-�G
9=���=P���������j'
""
��m=&Ϸ�u���<@@پ�O�<� þ��W?
ul�>$9�G
9=���=P���������j'
""
•�=�a㻳���"=@0����,��8a���vM?
�^>q|5>G
9=���=P���������j'
""
"}'=�4 �r��H4=@����^�H�H3=NC?
5�Ծ!b��G
9=���=P���������j'
""
R:=��Ҽ���XT=@��C��k��!;i9?
��Y=��>G
9=���=P���������j'
""
}#�u�"������?@@9��}-���I[=��*?
q;�O�#�G
9=���=P���������j'
""
��e�P4o����^A@〽������= ?
{� ���Z�G
9=���=P���������j'
""
���(YH� ��0D@�H���x����=��?
�YȾ��=G
9=���=P���������j'
""
5'� ����!���C@��=\T�s?��� �>
��b=�[>G
9=���=P���������j'
""
�L&��:��{n%�[$F@�#�=-R���}=qB�>
/뷽�`��G
9=���=P���������j'
""
���jDټ0&��I@���=*�f����<\�>
��꾀q�>G
9=���=P���������j'
""
u����-���%��J@@�>�
e=*�P�?�>
K�>��);>G
9=���=P���������j'
""
��g�
$R�j1$�LEF@��.>�
e=�{�?�>
/£>ky��G
9=���=P���������j'
""
�'�2 !�Њ �OD@@$M>��,>皜�eH�>
��8>�?=G
9=���=P���������j'
""
�t����y��_B@ j>�b\>[������>
H�M>�c�<test4 -��@

130
ml-agents/mlagents/trainers/tests/test_demo_dir/test5.demo


test4 -��@ 0:3DBallB
4P���������j'
""
lW=��<�~ ��@Pi~�
G
9=���=P���������j'
""
N�f<z*�<�~ ��;|@Pi~��"{�
�����v=G
9=���=P���������j'
""
�p�<���;�~ �0r@Pi~��"��
�E6>�uQ�G
9=���=P���������j'
""
x"����=�~ ��a@Pi~�Z<�
{���P@?G
9=���=P���������j'
""
�}���=E �X]P@Ha{�&�=���=�?
v6=���>G
9=���=P���������j'
""
^���=�=
��ZT@�'f�"�=�5�T7?
�w�=÷ >G
9=���=P���������j'
""
"Ǐ���=���sO@��S�"�=kH��T7?
�p6���G
9=���=P���������j'
""
���<���<|V�UED@`}A�"�=���T7?
�?��4�G
9=���=P���������j'
""
yN���K�<��a�B@x[-�M�= ��L?
�������G
9=���=P���������j'
""
����^�=u���ڜD@������=T����PV?
�Ys���P>G
9=���=P���������j'
""
���<H��<����n@@Xh����=>х��PV?
X�?y�-�G
9=���=P���������j'
""
��m=&Ϸ�u���<@@پ�O�<� þ��W?
ul�>$9�G
9=���=P���������j'
""
•�=�a㻳���"=@0����,��8a���vM?
�^>q|5>G
9=���=P���������j'
""
"}'=�4 �r��H4=@����^�H�H3=NC?
5�Ծ!b��G
9=���=P���������j'
""
R:=��Ҽ���XT=@��C��k��!;i9?
��Y=��>G
9=���=P���������j'
""
}#�u�"������?@@9��}-���I[=��*?
q;�O�#�G
9=���=P���������j'
""
��e�P4o����^A@〽������= ?
{� ���Z�G
9=���=P���������j'
""
���(YH� ��0D@�H���x����=��?
�YȾ��=G
9=���=P���������j'
""
5'� ����!���C@��=\T�s?��� �>
��b=�[>G
9=���=P���������j'
""
�L&��:��{n%�[$F@�#�=-R���}=qB�>
/뷽�`��G
9=���=P���������j'
""
���jDټ0&��I@���=*�f����<\�>
��꾀q�>G
9=���=P���������j'
""
u����-���%��J@@�>�
e=*�P�?�>
K�>��);>G
9=���=P���������j'
""
��g�
$R�j1$�LEF@��.>�
e=�{�?�>
/£>ky��G
9=���=P���������j'
""
�'�2 !�Њ �OD@@$M>��,>皜�eH�>
��8>�?=G
9=���=P���������j'
""
�t����y��_B@ j>�b\>[������>
H�M>�c�<test4 -��@

130
ml-agents/mlagents/trainers/tests/test_demo_dir/test6.demo


test4 -��@ 0:3DBallB
4P���������j'
""
lW=��<�~ ��@Pi~�
G
9=���=P���������j'
""
N�f<z*�<�~ ��;|@Pi~��"{�
�����v=G
9=���=P���������j'
""
�p�<���;�~ �0r@Pi~��"��
�E6>�uQ�G
9=���=P���������j'
""
x"����=�~ ��a@Pi~�Z<�
{���P@?G
9=���=P���������j'
""
�}���=E �X]P@Ha{�&�=���=�?
v6=���>G
9=���=P���������j'
""
^���=�=
��ZT@�'f�"�=�5�T7?
�w�=÷ >G
9=���=P���������j'
""
"Ǐ���=���sO@��S�"�=kH��T7?
�p6���G
9=���=P���������j'
""
���<���<|V�UED@`}A�"�=���T7?
�?��4�G
9=���=P���������j'
""
yN���K�<��a�B@x[-�M�= ��L?
�������G
9=���=P���������j'
""
����^�=u���ڜD@������=T����PV?
�Ys���P>G
9=���=P���������j'
""
���<H��<����n@@Xh����=>х��PV?
X�?y�-�G
9=���=P���������j'
""
��m=&Ϸ�u���<@@پ�O�<� þ��W?
ul�>$9�G
9=���=P���������j'
""
•�=�a㻳���"=@0����,��8a���vM?
�^>q|5>G
9=���=P���������j'
""
"}'=�4 �r��H4=@����^�H�H3=NC?
5�Ծ!b��G
9=���=P���������j'
""
R:=��Ҽ���XT=@��C��k��!;i9?
��Y=��>G
9=���=P���������j'
""
}#�u�"������?@@9��}-���I[=��*?
q;�O�#�G
9=���=P���������j'
""
��e�P4o����^A@〽������= ?
{� ���Z�G
9=���=P���������j'
""
���(YH� ��0D@�H���x����=��?
�YȾ��=G
9=���=P���������j'
""
5'� ����!���C@��=\T�s?��� �>
��b=�[>G
9=���=P���������j'
""
�L&��:��{n%�[$F@�#�=-R���}=qB�>
/뷽�`��G
9=���=P���������j'
""
���jDټ0&��I@���=*�f����<\�>
��꾀q�>G
9=���=P���������j'
""
u����-���%��J@@�>�
e=*�P�?�>
K�>��);>G
9=���=P���������j'
""
��g�
$R�j1$�LEF@��.>�
e=�{�?�>
/£>ky��G
9=���=P���������j'
""
�'�2 !�Њ �OD@@$M>��,>皜�eH�>
��8>�?=G
9=���=P���������j'
""
�t����y��_B@ j>�b\>[������>
H�M>�c�<test4 -��@

12
protobuf-definitions/proto/mlagents/envs/communicator_objects/agent_info_action_pair.proto


syntax = "proto3";
import "mlagents/envs/communicator_objects/agent_info.proto";
import "mlagents/envs/communicator_objects/agent_action.proto";
option csharp_namespace = "MLAgents.CommunicatorObjects";
package communicator_objects;
message AgentInfoActionPairProto {
AgentInfoProto agent_info = 1;
AgentActionProto action_info = 2;
}

176
ml-agents/mlagents/trainers/tests/test_demo_dir/test.demo


Test9 -��@**0: Ball3DBrain`
�k?����<� ���@HZ��"P���������j'
""
�k?����<� ���@HZ��e
�k?����<� ���;|@HZ���"{�"=���=P���������j'
""
�k?����<� ���;|@HZ���"{�e
�k?����<� ��0r@HZ���"��"=���=P���������j'
""
�k?����<� ��0r@HZ���"��e
�k?����<� ���a@HZ��Z<�"=���=P���������j'
""
�k?����<� ���a@HZ��Z<�e
�k?����<� ���BK@HZ���"{�"=���=P���������j'
""
�k?����<� ���BK@HZ���"{�e
�k?����<� ��|a.@HZ������"=���=P���������j'
""
�k?����<� ��|a.@HZ������e
�k?����<� ���8 @HZ��Z��"=���=P���������j'
""
�k?����<� ���8 @HZ��Z��e
�k?����<� �����?HZ��r���"=���=P���������j'
""
�k?����<� �����?HZ��r���e
�k?����<� ��0FH?HZ���"��"=���=P���������j'
""
�k?����<� ��0FH?HZ���"��e
�k?����<�뵾�+?D#���>����7-�>"=���=P���������j'
""
�k?����<�뵾�+?D#���>����7-�>e
�k?����<`��P�*?�
����">ש��`Ъ>"=���=P���������j'
""
�k?����<`��P�*?�
����">ש��`Ъ>e
�k?����<@w��� *?����A�3>b���_L�>"=���=P���������j'
""
�k?����<@w��� *?����A�3>b���_L�>e
�k?����< ���0s)?8����ID>
hƼ���>"=���=P���������j'
""
�k?����< ���0s)?8����ID>
hƼ���>e
�k?����<����`�(?�!����T>H׼�R�>"=���=P���������j'
""
�k?����<����`�(?�!����T>H׼�R�>e
�k?����<���� (?�I����e>.9�����>"=���=P���������j'
""
�k?����<���� (?�I����e>.9�����>e
�k?����<@u�PV'?�v��Rv>����U$?"=���=P���������j'
""
�k?����<@u�PV'?�v��Rv>����U$?e
�k?����<�r[��&?��h��>]��x� ?"=���=P���������j'
""
�k?����<�r[��&?��h��>]��x� ?e
�k?����<�%@�@�%?hBZ�8׋>�Y �g�?"=���=P���������j'
""
�k?����<�%@�@�%?hBZ�8׋>�Y �g�?e
�k?����<@.#��$?�K�A(�>����Y?"=���=P���������j'
""
�k?����<@.#��$?�K�A(�>����Y?e
�k?����<��P�#?P;�`��>�0��$?"=���=P���������j'
""
�k?����<��P�#?P;�`��>�0��$?e
�k?����<��Ƚ0�"?�*��Τ>m�&�3�,?"=���=P���������j'
""
�k?����<��Ƚ0�"?�*��Τ>m�&�3�,?e
�k?����<������!?HF� '�>� /�T�5?"=���=P���������j'
""
�k?����<������!?HF� '�>� /�T�5?e
�k?����<L��p� ?�Rr�>�g7��A>?"=���=P���������j'
""
�k?����<L��p� ?�Rr�>�g7��A>?e
�k?����< �;�b?���6˽>(�?�\G?"=���=P���������j'
""
�k?����< �;�b?���6˽>(�?�\G?e
�k?����<R6=�'?�?���>`6H�/�O?"=���=P���������j'
""
�k?����<R6=�'?�?���>`6H�/�O?e
�k?����<�d�=��? ����l�><�P��rX?"=���=P���������j'
""
�k?����<�d�=��? ����l�><�P��rX?e
�k?����<y>��?�H����> Y��a?"=���=P���������j'
""
�k?����<y>��?�H����> Y��a?e
�k?����<�i,>P&?�ٽ �>3~a��i?"=���=P���������j'
""
�k?����<�i,>P&?�ٽ �>3~a��i?e
�k?����<@Z>��?HN��K�>��i�ӆr?"=���=P���������j'
""
�k?����<@Z>��?HN��K�>��i�ӆr?e
�k?����<���>p7?�p�=���>�Rr��K{?"=���=P���������j'
""
�k?����<���>p7?�p�=���>�Rr��K{?e
�k?����<��>��?`�<>��>��z��?"=���=P���������j'
""
�k?����<��>��?`�<>��>��z��?e
�k?����<`d�>�?�s�>�!?����CZ�?"=���=P���������j'
""
�k?����<`d�>�?�s�>�!?����CZ�?e
�k?����<���>@l?@=�>�G?B�����?"=���=P���������j'
""
�k?����<���>@l?@=�>�G?B�����?e
�k?����<y�>P�?b?�m?�扽� �?"=���=P���������j'
""
�k?����<y�>P�?b?�m?�扽� �?e
�k?����<��?�?�?]� ?����f�?"=���=P���������j'
""
�k?����<��?�?�?]� ?����f�?e
�k?����<@�?@( ?��<?��?�I�����?"=���=P���������j'
""
�k?����<@�?@( ?��<?��?�I�����?e
�k?����<�� ?L ?�c[?��?�x��<�?"=���=P���������j'
""
�k?����<�� ?L ?�c[?��?�x��<�?e
�k?����<��/?�b ?�!{?e?6���zp�?"=���=P���������j'
""
�k?����<��/?�b ?�!{?e?6���zp�?e
�k?����<@W??�k?�ލ?�&?[ߞ�hȤ?"=���=P���������j'
""
�k?����<@W??�k?�ލ?�&?[ߞ�hȤ?e
�k?����<NO?0g?��?�J!?m �� �?"=���=P���������j'
""
�k?����<NO?0g?��?�J!?m �� �?e
�k?����<��_?pU?hȯ?�n%?�=��Nw�?"=���=P���������j'
""
�k?����<��_?pU?hȯ?�n%?�=��Nw�?e
�k?����<�yp?P6?�c�?=�)?�f��Eα?"=���=P���������j'
""
�k?����<�yp?P6?�c�?=�)?�f��Eα?e
�k?����<׀?��>ln�?t�-?]����$�?"=���=P���������j'
""
�k?����<׀?��>ln�?t�-?]����$�?e
�k?����<X��?���>��?W�1?�ó�A{�?"=���=P���������j'
""
�k?����<X��?���>��?W�1?�ó�A{�?e
�k?����<���?@�>���?��5?����BѾ?"=���=P���������j'
""
�k?����<���?@�>���?��5?����BѾ?e
�k?����<���?�g�>@1:?�%���&�?"=���=P���������j'
""
�k?����<���?�g�>@1:?�%���&�?e
�k?����<�Q�?���>_�@*?>?�L��T|�?"=���=P���������j'
""
�k?����<�Q�?���>_�@*?>?�L��T|�?e
�k?����<���? ��>@�`B?A�Ľf��?"=���=P���������j'
""
�k?����<���? ��>@�`B?A�Ľf��?e
�k?����<�˸?]�>hd$@�AF?*{��2�?"=���=P���������j'
""
�k?����<�˸?]�>hd$@�AF?*{��2�?e
�k?����<���? ��>��.@C?6�K�r-�?"=���=P���������j'
""
�k?����<���? ��>��.@C?6�K�r-�?e
�k?����<XN�? U�>P\9@9A?��ڿC��?"=���=P���������j'
""
�k?����<XN�? U�>P\9@9A?��ڿC��?g
yM�����=4g=�@,��?"=��@P���������j'
""
yM�����=4g=�@,��?e
yM�����=4g=�;|@,��?�"{�"=���=P���������j'
""
yM�����=4g=�;|@,��?�"{�e
yM�����=4g=0r@,��?�"��"=���=P���������j'
""
yM�����=4g=0r@,��?�"��e
yM�����=4g=�a@,��?Z<�"=���=P���������j'
""
yM�����=4g=�a@,��?Z<�e
yM�����=4g=�BK@,��?�"{�"=���=P���������j'
""
yM�����=4g=�BK@,��?�"{�e
yM�����=4g=|a.@,��?����"=���=P���������j'
""
yM�����=4g=|a.@,��?����

176
ml-agents/mlagents/trainers/tests/test_demo_dir/test2.demo


Test9 -��@**0: Ball3DBrain`
�k?����<� ���@HZ��"P���������j'
""
�k?����<� ���@HZ��e
�k?����<� ���;|@HZ���"{�"=���=P���������j'
""
�k?����<� ���;|@HZ���"{�e
�k?����<� ��0r@HZ���"��"=���=P���������j'
""
�k?����<� ��0r@HZ���"��e
�k?����<� ���a@HZ��Z<�"=���=P���������j'
""
�k?����<� ���a@HZ��Z<�e
�k?����<� ���BK@HZ���"{�"=���=P���������j'
""
�k?����<� ���BK@HZ���"{�e
�k?����<� ��|a.@HZ������"=���=P���������j'
""
�k?����<� ��|a.@HZ������e
�k?����<� ���8 @HZ��Z��"=���=P���������j'
""
�k?����<� ���8 @HZ��Z��e
�k?����<� �����?HZ��r���"=���=P���������j'
""
�k?����<� �����?HZ��r���e
�k?����<� ��0FH?HZ���"��"=���=P���������j'
""
�k?����<� ��0FH?HZ���"��e
�k?����<�뵾�+?D#���>����7-�>"=���=P���������j'
""
�k?����<�뵾�+?D#���>����7-�>e
�k?����<`��P�*?�
����">ש��`Ъ>"=���=P���������j'
""
�k?����<`��P�*?�
����">ש��`Ъ>e
�k?����<@w��� *?����A�3>b���_L�>"=���=P���������j'
""
�k?����<@w��� *?����A�3>b���_L�>e
�k?����< ���0s)?8����ID>
hƼ���>"=���=P���������j'
""
�k?����< ���0s)?8����ID>
hƼ���>e
�k?����<����`�(?�!����T>H׼�R�>"=���=P���������j'
""
�k?����<����`�(?�!����T>H׼�R�>e
�k?����<���� (?�I����e>.9�����>"=���=P���������j'
""
�k?����<���� (?�I����e>.9�����>e
�k?����<@u�PV'?�v��Rv>����U$?"=���=P���������j'
""
�k?����<@u�PV'?�v��Rv>����U$?e
�k?����<�r[��&?��h��>]��x� ?"=���=P���������j'
""
�k?����<�r[��&?��h��>]��x� ?e
�k?����<�%@�@�%?hBZ�8׋>�Y �g�?"=���=P���������j'
""
�k?����<�%@�@�%?hBZ�8׋>�Y �g�?e
�k?����<@.#��$?�K�A(�>����Y?"=���=P���������j'
""
�k?����<@.#��$?�K�A(�>����Y?e
�k?����<��P�#?P;�`��>�0��$?"=���=P���������j'
""
�k?����<��P�#?P;�`��>�0��$?e
�k?����<��Ƚ0�"?�*��Τ>m�&�3�,?"=���=P���������j'
""
�k?����<��Ƚ0�"?�*��Τ>m�&�3�,?e
�k?����<������!?HF� '�>� /�T�5?"=���=P���������j'
""
�k?����<������!?HF� '�>� /�T�5?e
�k?����<L��p� ?�Rr�>�g7��A>?"=���=P���������j'
""
�k?����<L��p� ?�Rr�>�g7��A>?e
�k?����< �;�b?���6˽>(�?�\G?"=���=P���������j'
""
�k?����< �;�b?���6˽>(�?�\G?e
�k?����<R6=�'?�?���>`6H�/�O?"=���=P���������j'
""
�k?����<R6=�'?�?���>`6H�/�O?e
�k?����<�d�=��? ����l�><�P��rX?"=���=P���������j'
""
�k?����<�d�=��? ����l�><�P��rX?e
�k?����<y>��?�H����> Y��a?"=���=P���������j'
""
�k?����<y>��?�H����> Y��a?e
�k?����<�i,>P&?�ٽ �>3~a��i?"=���=P���������j'
""
�k?����<�i,>P&?�ٽ �>3~a��i?e
�k?����<@Z>��?HN��K�>��i�ӆr?"=���=P���������j'
""
�k?����<@Z>��?HN��K�>��i�ӆr?e
�k?����<���>p7?�p�=���>�Rr��K{?"=���=P���������j'
""
�k?����<���>p7?�p�=���>�Rr��K{?e
�k?����<��>��?`�<>��>��z��?"=���=P���������j'
""
�k?����<��>��?`�<>��>��z��?e
�k?����<`d�>�?�s�>�!?����CZ�?"=���=P���������j'
""
�k?����<`d�>�?�s�>�!?����CZ�?e
�k?����<���>@l?@=�>�G?B�����?"=���=P���������j'
""
�k?����<���>@l?@=�>�G?B�����?e
�k?����<y�>P�?b?�m?�扽� �?"=���=P���������j'
""
�k?����<y�>P�?b?�m?�扽� �?e
�k?����<��?�?�?]� ?����f�?"=���=P���������j'
""
�k?����<��?�?�?]� ?����f�?e
�k?����<@�?@( ?��<?��?�I�����?"=���=P���������j'
""
�k?����<@�?@( ?��<?��?�I�����?e
�k?����<�� ?L ?�c[?��?�x��<�?"=���=P���������j'
""
�k?����<�� ?L ?�c[?��?�x��<�?e
�k?����<��/?�b ?�!{?e?6���zp�?"=���=P���������j'
""
�k?����<��/?�b ?�!{?e?6���zp�?e
�k?����<@W??�k?�ލ?�&?[ߞ�hȤ?"=���=P���������j'
""
�k?����<@W??�k?�ލ?�&?[ߞ�hȤ?e
�k?����<NO?0g?��?�J!?m �� �?"=���=P���������j'
""
�k?����<NO?0g?��?�J!?m �� �?e
�k?����<��_?pU?hȯ?�n%?�=��Nw�?"=���=P���������j'
""
�k?����<��_?pU?hȯ?�n%?�=��Nw�?e
�k?����<�yp?P6?�c�?=�)?�f��Eα?"=���=P���������j'
""
�k?����<�yp?P6?�c�?=�)?�f��Eα?e
�k?����<׀?��>ln�?t�-?]����$�?"=���=P���������j'
""
�k?����<׀?��>ln�?t�-?]����$�?e
�k?����<X��?���>��?W�1?�ó�A{�?"=���=P���������j'
""
�k?����<X��?���>��?W�1?�ó�A{�?e
�k?����<���?@�>���?��5?����BѾ?"=���=P���������j'
""
�k?����<���?@�>���?��5?����BѾ?e
�k?����<���?�g�>@1:?�%���&�?"=���=P���������j'
""
�k?����<���?�g�>@1:?�%���&�?e
�k?����<�Q�?���>_�@*?>?�L��T|�?"=���=P���������j'
""
�k?����<�Q�?���>_�@*?>?�L��T|�?e
�k?����<���? ��>@�`B?A�Ľf��?"=���=P���������j'
""
�k?����<���? ��>@�`B?A�Ľf��?e
�k?����<�˸?]�>hd$@�AF?*{��2�?"=���=P���������j'
""
�k?����<�˸?]�>hd$@�AF?*{��2�?e
�k?����<���? ��>��.@C?6�K�r-�?"=���=P���������j'
""
�k?����<���? ��>��.@C?6�K�r-�?e
�k?����<XN�? U�>P\9@9A?��ڿC��?"=���=P���������j'
""
�k?����<XN�? U�>P\9@9A?��ڿC��?g
yM�����=4g=�@,��?"=��@P���������j'
""
yM�����=4g=�@,��?e
yM�����=4g=�;|@,��?�"{�"=���=P���������j'
""
yM�����=4g=�;|@,��?�"{�e
yM�����=4g=0r@,��?�"��"=���=P���������j'
""
yM�����=4g=0r@,��?�"��e
yM�����=4g=�a@,��?Z<�"=���=P���������j'
""
yM�����=4g=�a@,��?Z<�e
yM�����=4g=�BK@,��?�"{�"=���=P���������j'
""
yM�����=4g=�BK@,��?�"{�e
yM�����=4g=|a.@,��?����"=���=P���������j'
""
yM�����=4g=|a.@,��?����

176
ml-agents/mlagents/trainers/tests/test_demo_dir/test3.demo


Test9 -��@**0: Ball3DBrain`
�k?����<� ���@HZ��"P���������j'
""
�k?����<� ���@HZ��e
�k?����<� ���;|@HZ���"{�"=���=P���������j'
""
�k?����<� ���;|@HZ���"{�e
�k?����<� ��0r@HZ���"��"=���=P���������j'
""
�k?����<� ��0r@HZ���"��e
�k?����<� ���a@HZ��Z<�"=���=P���������j'
""
�k?����<� ���a@HZ��Z<�e
�k?����<� ���BK@HZ���"{�"=���=P���������j'
""
�k?����<� ���BK@HZ���"{�e
�k?����<� ��|a.@HZ������"=���=P���������j'
""
�k?����<� ��|a.@HZ������e
�k?����<� ���8 @HZ��Z��"=���=P���������j'
""
�k?����<� ���8 @HZ��Z��e
�k?����<� �����?HZ��r���"=���=P���������j'
""
�k?����<� �����?HZ��r���e
�k?����<� ��0FH?HZ���"��"=���=P���������j'
""
�k?����<� ��0FH?HZ���"��e
�k?����<�뵾�+?D#���>����7-�>"=���=P���������j'
""
�k?����<�뵾�+?D#���>����7-�>e
�k?����<`��P�*?�
����">ש��`Ъ>"=���=P���������j'
""
�k?����<`��P�*?�
����">ש��`Ъ>e
�k?����<@w��� *?����A�3>b���_L�>"=���=P���������j'
""
�k?����<@w��� *?����A�3>b���_L�>e
�k?����< ���0s)?8����ID>
hƼ���>"=���=P���������j'
""
�k?����< ���0s)?8����ID>
hƼ���>e
�k?����<����`�(?�!����T>H׼�R�>"=���=P���������j'
""
�k?����<����`�(?�!����T>H׼�R�>e
�k?����<���� (?�I����e>.9�����>"=���=P���������j'
""
�k?����<���� (?�I����e>.9�����>e
�k?����<@u�PV'?�v��Rv>����U$?"=���=P���������j'
""
�k?����<@u�PV'?�v��Rv>����U$?e
�k?����<�r[��&?��h��>]��x� ?"=���=P���������j'
""
�k?����<�r[��&?��h��>]��x� ?e
�k?����<�%@�@�%?hBZ�8׋>�Y �g�?"=���=P���������j'
""
�k?����<�%@�@�%?hBZ�8׋>�Y �g�?e
�k?����<@.#��$?�K�A(�>����Y?"=���=P���������j'
""
�k?����<@.#��$?�K�A(�>����Y?e
�k?����<��P�#?P;�`��>�0��$?"=���=P���������j'
""
�k?����<��P�#?P;�`��>�0��$?e
�k?����<��Ƚ0�"?�*��Τ>m�&�3�,?"=���=P���������j'
""
�k?����<��Ƚ0�"?�*��Τ>m�&�3�,?e
�k?����<������!?HF� '�>� /�T�5?"=���=P���������j'
""
�k?����<������!?HF� '�>� /�T�5?e
�k?����<L��p� ?�Rr�>�g7��A>?"=���=P���������j'
""
�k?����<L��p� ?�Rr�>�g7��A>?e
�k?����< �;�b?���6˽>(�?�\G?"=���=P���������j'
""
�k?����< �;�b?���6˽>(�?�\G?e
�k?����<R6=�'?�?���>`6H�/�O?"=���=P���������j'
""
�k?����<R6=�'?�?���>`6H�/�O?e
�k?����<�d�=��? ����l�><�P��rX?"=���=P���������j'
""
�k?����<�d�=��? ����l�><�P��rX?e
�k?����<y>��?�H����> Y��a?"=���=P���������j'
""
�k?����<y>��?�H����> Y��a?e
�k?����<�i,>P&?�ٽ �>3~a��i?"=���=P���������j'
""
�k?����<�i,>P&?�ٽ �>3~a��i?e
�k?����<@Z>��?HN��K�>��i�ӆr?"=���=P���������j'
""
�k?����<@Z>��?HN��K�>��i�ӆr?e
�k?����<���>p7?�p�=���>�Rr��K{?"=���=P���������j'
""
�k?����<���>p7?�p�=���>�Rr��K{?e
�k?����<��>��?`�<>��>��z��?"=���=P���������j'
""
�k?����<��>��?`�<>��>��z��?e
�k?����<`d�>�?�s�>�!?����CZ�?"=���=P���������j'
""
�k?����<`d�>�?�s�>�!?����CZ�?e
�k?����<���>@l?@=�>�G?B�����?"=���=P���������j'
""
�k?����<���>@l?@=�>�G?B�����?e
�k?����<y�>P�?b?�m?�扽� �?"=���=P���������j'
""
�k?����<y�>P�?b?�m?�扽� �?e
�k?����<��?�?�?]� ?����f�?"=���=P���������j'
""
�k?����<��?�?�?]� ?����f�?e
�k?����<@�?@( ?��<?��?�I�����?"=���=P���������j'
""
�k?����<@�?@( ?��<?��?�I�����?e
�k?����<�� ?L ?�c[?��?�x��<�?"=���=P���������j'
""
�k?����<�� ?L ?�c[?��?�x��<�?e
�k?����<��/?�b ?�!{?e?6���zp�?"=���=P���������j'
""
�k?����<��/?�b ?�!{?e?6���zp�?e
�k?����<@W??�k?�ލ?�&?[ߞ�hȤ?"=���=P���������j'
""
�k?����<@W??�k?�ލ?�&?[ߞ�hȤ?e
�k?����<NO?0g?��?�J!?m �� �?"=���=P���������j'
""
�k?����<NO?0g?��?�J!?m �� �?e
�k?����<��_?pU?hȯ?�n%?�=��Nw�?"=���=P���������j'
""
�k?����<��_?pU?hȯ?�n%?�=��Nw�?e
�k?����<�yp?P6?�c�?=�)?�f��Eα?"=���=P���������j'
""
�k?����<�yp?P6?�c�?=�)?�f��Eα?e
�k?����<׀?��>ln�?t�-?]����$�?"=���=P���������j'
""
�k?����<׀?��>ln�?t�-?]����$�?e
�k?����<X��?���>��?W�1?�ó�A{�?"=���=P���������j'
""
�k?����<X��?���>��?W�1?�ó�A{�?e
�k?����<���?@�>���?��5?����BѾ?"=���=P���������j'
""
�k?����<���?@�>���?��5?����BѾ?e
�k?����<���?�g�>@1:?�%���&�?"=���=P���������j'
""
�k?����<���?�g�>@1:?�%���&�?e
�k?����<�Q�?���>_�@*?>?�L��T|�?"=���=P���������j'
""
�k?����<�Q�?���>_�@*?>?�L��T|�?e
�k?����<���? ��>@�`B?A�Ľf��?"=���=P���������j'
""
�k?����<���? ��>@�`B?A�Ľf��?e
�k?����<�˸?]�>hd$@�AF?*{��2�?"=���=P���������j'
""
�k?����<�˸?]�>hd$@�AF?*{��2�?e
�k?����<���? ��>��.@C?6�K�r-�?"=���=P���������j'
""
�k?����<���? ��>��.@C?6�K�r-�?e
�k?����<XN�? U�>P\9@9A?��ڿC��?"=���=P���������j'
""
�k?����<XN�? U�>P\9@9A?��ڿC��?g
yM�����=4g=�@,��?"=��@P���������j'
""
yM�����=4g=�@,��?e
yM�����=4g=�;|@,��?�"{�"=���=P���������j'
""
yM�����=4g=�;|@,��?�"{�e
yM�����=4g=0r@,��?�"��"=���=P���������j'
""
yM�����=4g=0r@,��?�"��e
yM�����=4g=�a@,��?Z<�"=���=P���������j'
""
yM�����=4g=�a@,��?Z<�e
yM�����=4g=�BK@,��?�"{�"=���=P���������j'
""
yM�����=4g=�BK@,��?�"{�e
yM�����=4g=|a.@,��?����"=���=P���������j'
""
yM�����=4g=|a.@,��?����

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

正在加载...
取消
保存