浏览代码

[Fix] If the brain is inactive, an error will be thrown if an agent t… (#412)

* [Fix] If the brain is inactive, an error will be thrown if an agent tries to request a decision from it

* [Typo] Included feedback from comments
/develop-generalizationTraining-TrainerController
GitHub 7 年前
当前提交
6b5fa5ee
共有 1 个文件被更改,包括 28 次插入7 次删除
  1. 35
      unity-environment/Assets/ML-Agents/Scripts/Brain.cs

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


*/
public class Brain : MonoBehaviour
{
private bool isInitialized = false;
private Dictionary<Agent, AgentInfo> agentInfos =
new Dictionary<Agent, AgentInfo>(1024);

CoreBrains = new ScriptableObject[numCoreBrains];
foreach (BrainType bt in System.Enum.GetValues(typeof(BrainType)))
{
CoreBrains[(int)bt] =
CoreBrains[(int)bt] =
ScriptableObject.CreateInstance(
"CoreBrain" + bt.ToString());
}

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

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

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

{
if (CoreBrains[(int)bt] == null)
{
CoreBrains[(int)bt] =
CoreBrains[(int)bt] =
CoreBrains[(int)bt] =
CoreBrains[(int)bt] =
ScriptableObject.Instantiate(CoreBrains[(int)bt]);
}
}

UpdateCoreBrains();
coreBrain.InitializeCoreBrain(communicator);
aca.BrainDecideAction += DecideAction;
isInitialized = true;
agentInfos.Add(agent, info);
// If the brain is not active or not properly initialized, an error is
// thrown.
if (!gameObject.activeSelf)
{
throw new UnityAgentsException(
string.Format("Agent {0} tried to request an action " +
"from brain {1} but it is not active.",
agent.gameObject.name, gameObject.name));
}
else if (!isInitialized)
{
throw new UnityAgentsException(
string.Format("Agent {0} tried to request an action " +
"from brain {1} but it was not initialized.",
agent.gameObject.name, gameObject.name));
}
else
{
agentInfos.Add(agent, info);
}
}

正在加载...
取消
保存