인프런 커뮤니티 질문&답변

조성일님의 프로필 이미지

작성한 질문수

유니티 머신러닝 에이전트 완전정복 (기초편)

DQN 모델 + 에피소드 종료 후 obs 의 값이 null

22.02.14 13:51 작성

·

232

2

안녕하세요.

인프런에서 제공하는 DQN 강좌를 보고, 

https://github.com/Unity-Technologies/ml-agents/blob/release_19_docs/docs/Learning-Environment-Create-New.md 에서 제공하는 

환경을 만든 뒤에  DQN agent로 학습하려고 돌렸는데, 

에피소드가 끝난 뒤에 get_steps 로 리턴받은 decisionstep 의 obs 값이 null로 들어가면서 오동작을 하게 되더라구요.

C# 스크립트가 문제 있는지 unity가 제공하는 ppo 모델로 확인 했을 땐, 문제가 없었습니다. 

어떤 부분을 놓쳤는지 잘 모르겠습니다. 

 

 

 

답변 2

1

조성일님의 프로필 이미지
조성일
질문자

2022. 02. 14. 15:47

    public override void Initialize()

    {

        RequestDecision();

    }

모델을 만들어서 학습하는 경우는 별도로 호출해줘야 하는 것 같습니다.

정규열님의 프로필 이미지
정규열
지식공유자

2022. 02. 15. 22:16

안녕하세요! 혹시 작성하셨던 Agent 스크립트와 인스펙터에 설정 정보들 공유 가능하실까요?

조성일님의 프로필 이미지
조성일
질문자

2022. 02. 16. 10:07

답변 고맙습니다.

파이썬 코드도 고치고, C# 에이전트 소스도 고치다 보니까 원본이 남아있지 않습니다. 

만약에 추론한 게 맞다 면 저 함수를 호출하지 않았을 때 또 발생할 터니까요.

그 때 프로젝트도 같이 올려서 공유하도록 하겠습니다.

 

그리고 앞으로 질문할 때는 프로젝트도 올리면서 질문하겠습니다. 

 

 

0

조성일님의 프로필 이미지
조성일
질문자

2022. 03. 03. 10:54

이번에 유니티로 틱택토 환경을 만들어서

pytorch로 DQN 모델을 만들어서 학습 할 때는

C#코드에서 RequestDecision(); 코드 호출없이 잘 되네요.

아무래도 env.step() 이 콜을 해서  환경을 업데이트 했어야 했는데

그걸 하지 않지 않았던 게 문제 였던 것 같습니다.

액션을 하고, 에피소드가 끝났을 때 환경을 업데이트를 해주지 않았고

env.get_step(behavior_name)을 콜 했을 때

obs 값이 null 이더라고요. 그 때 눈치 챘습니다. 

그래서 그 문제를 c#코드에서 RequestDecsion()을 호출함으로써

env를 업데이트 한게 아니었나 싶어요.

 

env에서 set_action()을 한다고 해서 다음 스텝으로 진행 한다고 착각을 했었고

예제 코드를 보니까 set_action을 하면 step 콜 하더라고요.

 

결론 : set_action을 하면 업데이트를 위해 step을 콜 해야 함