reinforcement-learning-kr / Unity_ML_Agents

Unity ML-agents Project Repository of RLKorea
81 stars 49 forks source link

SetActionMask 함수 질문이요 #13

Closed woongdam closed 3 years ago

woongdam commented 3 years ago

안녕하세요 책읽고 있는 학생입니다.

다름이 아니라 SetActionMask 함수는 Tensorflow 환경에서 적용이 안되나요?

지금 다른 강화학습 환경을 만들고 있는데 SetActionMask를 지정해서. "어느 범위 이상이면 그행동을 하지 마라"를 지정하고 있는 상황입니다. 답변 부탁드립니다.

Kyushik commented 3 years ago

안녕하세요! 책 구매해주셔서 감사드립니다! :) 음.. 일단 질문 주신 내용에 대해서 조금 더 정확하게 파악을 해야할 것 같습니다! 일단 SetActionMask 함수가 Tensorflow 환경에서 적용이 되지 않는지 질문해주셨는데 SetActionMask의 경우 Unity에서 사용하는 함수로 알고 있고 Tensorflow 환경의 경우 파이썬에서 구현한 코드라 둘간의 어떤 관계를 문의하시는 것인지 잘 이해가 되지 않습니다. 혹시 구현하고자 하는 환경이랑 상황을 조금 더 자세히 설명해주실 수 있으실까요?? 관련 코드나 내용을 첨부해주셔도 좋을 것 같습니다. 감사합니다!

woongdam commented 3 years ago

네 답변 감사합니다.

image

현재 쓰리디로 gridworld 환경을 셋팅하고 있는데..

Unity에서 SetActionMask를 사용하여

var positionX = (int)transform.position.x ; var positionY = (int)transform.position.y; var positionZ = (int)transform.position.z ; var maxPosition = 9; var minPosition = 0;

    if (positionX == minPosition)
    {
        SetActionMask(Left);
    }

    if (positionX == maxPosition)
    {
        SetActionMask(Right);
    }

    if (positionY == minPosition)
    {
        SetActionMask(Down);
    }

    if (positionY == maxPosition)
    {
        SetActionMask(Up);
    }

    if (positionZ == maxPosition)
    {
        SetActionMask(Forward);
    }

    if (positionZ == minPosition)
    {
        SetActionMask(Backward);
    }

이런 코드를 통해 Tensorflow에서 액션을 정할때 조건에 충족되면 해당 액션을 피하려고 하고 있습니다.

하지만 저런 조건에 충족하여도 Tensorflow에서는 해당 액션을 취합니다.

이 부분이 해결이 안되서 고생하고 있습니다. 조언 좀 부탁드립니다.

참고로 : 위의 지붕도 있지만 render을 안해놓은거 뿐입니다.