ML-Agents에서 onActionReceived()와 Heuristic()이 작동하지 않는다..

2021. 6. 23. 11:22·IT/ML-Agents

 

https://www.youtube.com/watch?v=Js0rBbx3-3E&t=870s

 

 영상을 따라 퐁 에이전트를 실습하고 있는 중인데, 환경 제작까지는 별 문제가 없었다. ML-Agents release 버전이 달라 조금 머리 아프긴 했지만, 공식 API 문서를 보면서 어떻게 해결됐다. 문제는 Heuristic 모드와 Action에 생겼다.

 

 키보드 A와 D로 입력을 받아 조작할 수 있도록 Heuristic()을 설정했는데, 전혀 작동하지 않는다... 게임을 시작하면 애초에 onActionReceived()에 설정한 Episode를 리셋하는 조건조차 실행되지 않고, 공은 저 멀리 날아갔다. 대체 뭐가 문제일까...

 

디버그를 해도 onEpisodeBegin()까지는 정상실행되고, 나머지는 실행조차 되지 않는다.. 이럴 때가 제일 답답하다. 원인도 모르겠고, 해결방법도 모르겠다...

public override void OnActionReceived(ActionBuffers actionBuffers) {
        Debug.Log("onAction" + i++);
        enemy.transform.position = new Vector3(ball.transform.position.x, enemy.transform.position.y, enemy.transform.position.z);

        if (ball.transform.position.z <= -14.0f)
        {
            AddReward(-1.0f);
            EndEpisode();
        }
        else if (ball.transform.position.z >= 5.5f)
        {
            AddReward(1.0f);
            EndEpisode();
        }

        ball_vel_z = RbBall.velocity.z;

        if (ball_vel_z > 0 && ball_vel_z_old < 0)
            AddReward(0.5f);

        ball_vel_z_old = ball_vel_z;

        MoveAgent(actionBuffers.DiscreteActions);
    }

    public void MoveAgent(ActionSegment<int> discreteActionsOut)
    {
        var act = discreteActionsOut[0];

        switch (act)
        {
            case Stay:
                break;
            case Up:
                agent.transform.position = agent.transform.position + 0.3f * Vector3.left;
                break;
            case Down:
                agent.transform.position = agent.transform.position + 0.3f * Vector3.right;
                break;
        }
    }

    // 새로운 에피소드 시작
    public override void OnEpisodeBegin() {
        Debug.Log("onBegin" + i++);
        ball.transform.position = ResetPosBall;
        agent.transform.position = ResetPosAgent;
        enemy.transform.position = ResetPosEnemy;

        RbBall.velocity = Vector3.zero;
        ball.transform.rotation = Quaternion.identity;
        RbAgent.velocity = Vector3.zero;
        RbAgent.angularVelocity = Vector3.zero;
        RbEnemy.velocity = Vector3.zero;
        RbEnemy.angularVelocity = Vector3.zero;

        float rand_num = Random.Range(-1.0f, 1.0f);

        if (rand_num < -0.5f)
        {
            velocity = new Vector3(Random.Range(min_ball_speed, max_ball_speed), 0, Random.Range(min_ball_speed, max_ball_speed));
        }
        else if (rand_num < 0.0f)
        {
            velocity = new Vector3(Random.Range(min_ball_speed, max_ball_speed), 0, Random.Range(-max_ball_speed, -min_ball_speed));
        }
        else if (rand_num < 0.5f)
        {
            velocity = new Vector3(Random.Range(-max_ball_speed, -min_ball_speed), 0, Random.Range(min_ball_speed, max_ball_speed));
        }
        else
        {
            velocity = new Vector3(Random.Range(-max_ball_speed, -min_ball_speed), 0, Random.Range(-max_ball_speed, -min_ball_speed));
        }

        RbBall.AddForce(velocity);
    }

    // 직접 조작
    public override void Heuristic(in ActionBuffers actionsOut) {
        Debug.Log("onHeuristic" + i++);
        var discreteActionsOut = actionsOut.DiscreteActions;
        discreteActionsOut.Clear();
        discreteActionsOut[0] = 0;

        if (Input.GetKey(KeyCode.A))
            discreteActionsOut[0] = 1;

        if (Input.GetKey(KeyCode.D))
            discreteActionsOut[0] = 2;
    }

'IT > ML-Agents' 카테고리의 다른 글

빌어먹을 에러..  (0) 2021.06.17
강화학습에 대한 갑작스런 번뜩임  (0) 2021.06.16
Unity에서 ML-Agents package Error  (0) 2021.06.11
'IT/ML-Agents' 카테고리의 다른 글
  • 빌어먹을 에러..
  • 강화학습에 대한 갑작스런 번뜩임
  • Unity에서 ML-Agents package Error
KimCookieYa
KimCookieYa
무엇이 나를 살아있게 만드는가
  • KimCookieYa
    쿠키의 주저리
    KimCookieYa
  • 전체
    오늘
    어제
    • 분류 전체보기 (574) N
      • 혼잣말 (88) N
      • TIL (2)
      • 커리어 (24)
        • Sendy (21)
        • 외부활동 기록 (2)
      • 프로젝트 (186)
        • 티스토리 API (5)
        • 코드프레소 체험단 (89)
        • Web3 (3)
        • Pint OS (16)
        • 나만무 (14)
        • 대회 (6)
        • 정글 FE 스터디 (16)
        • MailBadara (12)
        • github.io (1)
        • 인공지능 동아리, AID (5)
        • 졸업과제 (18)
        • OSSCA 2024 (1)
      • 크래프톤 정글 2기 (80)
      • IT (168) N
        • 코딩 (4)
        • CS (18)
        • 에러 (5)
        • 블록체인 (23)
        • Front-End (39) N
        • 알고리즘&자료구조 정리 (3)
        • 코딩테스트 (3)
        • BOJ 문제정리 (41)
        • WILT (12)
        • ML-Agents (4)
        • 강화학습 (1)
        • Android (0)
        • LLM (2)
      • 전공 (1)
        • 머신러닝 (1)
      • 자기계발 (20)
        • 빡공단X베어유 (2)
        • 독서 (15)
  • 블로그 메뉴

    • 홈
    • 방명록
    • Github
    • Velog
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그래머스
    JavaScript
    react
    나만무
    pintos
    핀토스
    MailBadara
    딥러닝
    NEAR Protocol
    니어프로토콜
    RNN
    리액트
    크래프톤정글
    해커톤
    OS
    사이드프로젝트
    자바스크립트
    Flutter
    글리치해커톤
    numpy
    알고리즘
    머신러닝
    블록체인
    파이썬
    docker
    부산대
    코드프레소
    Pint OS
    졸업과제
    센디
  • hELLO· Designed By정상우.v4.10.3
KimCookieYa
ML-Agents에서 onActionReceived()와 Heuristic()이 작동하지 않는다..
상단으로

티스토리툴바