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. 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을 콜 해야 함
2022. 02. 15. 22:16
안녕하세요! 혹시 작성하셨던 Agent 스크립트와 인스펙터에 설정 정보들 공유 가능하실까요?