Unity 机器学习代理工具包 (ML-Agents) 是一个开源项目,它使游戏和模拟能够作为训练智能代理的环境。
您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 

99 行
2.5 KiB

using System;
using Unity.MLAgents.Actuators;
using UnityEngine;
namespace Unity.MLAgentsExamples
{
/// <summary>
/// A simple example of a ActuatorComponent.
/// This should be added to the same GameObject as the BasicController
/// </summary>
public class BasicActuatorComponent : ActuatorComponent
{
public BasicController basicController;
ActionSpec m_ActionSpec = ActionSpec.MakeDiscrete(3);
/// <summary>
/// Creates a BasicActuator.
/// </summary>
/// <returns></returns>
public override IActuator[] CreateActuators()
{
return new IActuator[] { new BasicActuator(basicController) };
}
public override ActionSpec ActionSpec
{
get { return m_ActionSpec; }
}
}
/// <summary>
/// Simple actuator that converts the action into a {-1, 0, 1} direction
/// </summary>
public class BasicActuator : IActuator, IHeuristicProvider
{
public BasicController basicController;
ActionSpec m_ActionSpec;
public BasicActuator(BasicController controller)
{
basicController = controller;
m_ActionSpec = ActionSpec.MakeDiscrete(3);
}
public ActionSpec ActionSpec
{
get { return m_ActionSpec; }
}
/// <inheritdoc/>
public String Name
{
get { return "Basic"; }
}
public void ResetData()
{
}
public void OnActionReceived(ActionBuffers actionBuffers)
{
var movement = actionBuffers.DiscreteActions[0];
var direction = 0;
switch (movement)
{
case 1:
direction = -1;
break;
case 2:
direction = 1;
break;
}
basicController.MoveDirection(direction);
}
public void Heuristic(in ActionBuffers actionBuffersOut)
{
var direction = Input.GetAxis("Horizontal");
var discreteActions = actionBuffersOut.DiscreteActions;
if (Mathf.Approximately(direction, 0.0f))
{
discreteActions[0] = 0;
return;
}
var sign = Math.Sign(direction);
discreteActions[0] = sign < 0 ? 1 : 2;
}
public void WriteDiscreteActionMask(IDiscreteActionMask actionMask)
{
}
}
}