에이전트의 학습에 관련된 파라미터
학습의 결과로 나올 모델의 이름
환경의 수치적 관측 관련 설정
Space size를 통해 관측의 크기 설정 (ex. x, y, z좌표라면 3)
Stacked Vector를 통해 관측의 누적 횟수 결정 (ex. 바로 이전 스텝의 위치와 현재의 위치를 고려한다면 2)
에이전트의 행동 관련 설정
이산적 행동인지 연속적 행동인지 (ex. x, y축으로 회전이 가능하다면 continuous action 2)
이산적 행동에서 branches size도 설정
학습의 결과를 확인하기 위해 학습된 모델을 적용
에이전트 행동 방
에이전트간 공유할 정책 index
여러 에이전트를 하나의 정책으로 학습 가능
하위 센서 사용 여부
Observation 외에 추가로 관찰할 속성 추가
한 에피소드 당 최대 스텝 수
Agent 스크립트 내의 public 변수
환경이 실행될 때 호출되는 초기화 함수
public override void Initialize()
{
m_BallRb = ball.GetComponent<Rigidbody>();
m_ResetParams = Academy.Instance.EnvironmentParameters;
SetResetParameters();
}
Agent에게 Vector Observation 정보를 전달하는 함수
public override void CollectObservations(VectorSensor sensor)
{
if (useVecObs)
{
sensor.AddObservation(gameObject.transform.rotation.z);
...
}
}
Agent가 결정한 행동을 전달, 보상 업데이트, 에피소드 종료
public override void OnActionReceived(ActionBuffers actionBuffers)
{
var actionZ = 2f * Mathf.Clamp(actionBuffers.ContinuousActions[0], -1f, 1f);
...
if ((gameObject.transform.rotation.z < 0.25f && actionZ > 0f) ||
(gameObject.transform.rotation.z > -0.25f && actionZ < 0f))
{
gameObject.transform.Rotate(new Vector3(0,0,1), actionZ);
} # 행동을 전달
...
if ((ball.trnasform.position.y - gameObject.transform.position.y) < -2f ||
Mathf.Abs(ball.transform.position.x - gameObject.transform.position.x) > 3f ||
Mathf.Abs(ball.transform.position.z - gameObject.transform.position.z) > 3f)
{ # 공이 떨어질 경우,
SetReward(-1f); # -1의 패널티를 받는다
EndEpisode(); # 에피소드 마무리
}
else
{
SetReward(0.1f); # 보상 업데이트
}
}
각 에피소드가 시작될 때 호출되는 함수
public override voide OnEpisodeBegin()
{
gameObject.transform.rotation = new Quaternion(0f, 0f, 0f, 0f);
...
SetResetparameters();
}
개발자가 직접 명령을 내리는 휴리스틱 모드에서 사용
주로 테스트용 또는 모방 학습에 사용
public override void Heuristic(in ActionBuffers actionsOut)
{
var continuousActionsOut = actionsOut.ContinuousActions;
continuousActionsOut[0] = -Input.GetAxis('Horizontal');
continuousActionsOut[1] = Input.GetAxis('Vertical');
}
Agent의 행동을 정책에게 요청하는 component
정책 결정 시간
정책 결정 사이에 동일한 행동을 반복하게 할 지, 멈춰있게 할지 결정
해당 컴포넌트는 학습이 완료된 후 모델의 유효성을 검사하기 위해 내부적으로 사용되는 클래스
필수는 아님.