reinforcement-learning-kr / Unity_ML_Agents_2.0

Repository for implementing Unity ML-Agents 2.0
75 stars 31 forks source link

waypoint 문제 #65

Open Accountance opened 12 months ago

Accountance commented 12 months ago

waypoint를 28개로 늘리고 KartAgent 오브젝트의 collider에도 waypoint 1~28 까지 다 집어넣었고

KartAgent.cs 코드도

if (way_point_passing_count >= 28) // 웨이포인트가 28이 되면 { way_point_passing_count = 0; m_EndEpisode = true; // 에피소드 초기화 }

로 수정 했는데 웨이포인트를 16개 정도 지날무렵 자꾸 에피소드가 초기화 되더라구요. 그래서 max step을 늘려놨는데도 똑같아서 어떻게 해결해야할지 모르겠습니다.

Accountance commented 12 months ago

또 웨이포인트가 많을수록 훈련이 잘 되나요?

Accountance commented 12 months ago

waypoint를 28개로 늘리고 KartAgent 오브젝트의 collider에도 waypoint 1~28 까지 다 집어넣었고

KartAgent.cs 코드도

if (way_point_passing_count >= 28) // 웨이포인트가 28이 되면 { way_point_passing_count = 0; m_EndEpisode = true; // 에피소드 초기화 }

로 수정 했는데 웨이포인트를 16개 정도 지날무렵 자꾸 에피소드가 초기화 되더라구요. 그래서 max step을 늘려놨는데도 똑같아서 어떻게 해결해야할지 모르겠습니다.

UnityEngine.Debug.Log(way_point_passing_count);

명령어를 써서 봐보니

Waypoint_1은 통과해도 0이고 Waypoint_2~4는 통과하면 1씩 오르고 Waypoint_5는 갑자기 한 번에 5가 오르고 어떤건 3이 오르고... 이런식으로 서로 다르게 오르더라구요.

제 생각에는 지나갈 때 충돌 판정이 1번이 아니고 5번 나는 것 같은데요.

void FindCheckpointIndex(GameObject obj, out int index) { for (int i = 0; i < Colliders.Length; i++) { if (Colliders[i].gameObject == obj) { index = i; UnityEngine.Debug.Log("웨이포인트 : " + way_point_passing_count); way_point_passing_count++; // 웨이포인트 카운팅

                if (way_point_passing_count >= 100) // 웨이포인트가 13이 되면 
                {
                    way_point_passing_count = 0;
                    m_EndEpisode = true; // 에피소드 초기화
                }

                return;
            }
        }
        index = -1;
    }

그런데 분명 way_point_passing_count 값이 ++이라 지나가는 순간 충돌 판정이 5번 난게 아니면 설명이 안 되더라구요. 그런데 더 황당한건 5번 오르는 waypoint 오브젝트는 충돌 시 1만 오르는 waypoint 오브젝트를 복사 붙여넣기 해서 그대로 가져다 놓은거 라는겁니다.

왜 이럴까요?

Kyushik commented 12 months ago

또 웨이포인트가 많을수록 훈련이 잘 되나요?

웨이 포인트가 많은 경우 아무래도 중간 목표 지점이 많아지는거니까 학습에 대한 난이도는 낮아질 것으로 생각됩니다!

Kyushik commented 12 months ago

waypoint를 28개로 늘리고 KartAgent 오브젝트의 collider에도 waypoint 1~28 까지 다 집어넣었고 KartAgent.cs 코드도 if (way_point_passing_count >= 28) // 웨이포인트가 28이 되면 { way_point_passing_count = 0; m_EndEpisode = true; // 에피소드 초기화 } 로 수정 했는데 웨이포인트를 16개 정도 지날무렵 자꾸 에피소드가 초기화 되더라구요. 그래서 max step을 늘려놨는데도 똑같아서 어떻게 해결해야할지 모르겠습니다.

UnityEngine.Debug.Log(way_point_passing_count);

명령어를 써서 봐보니

Waypoint_1은 통과해도 0이고 Waypoint_2~4는 통과하면 1씩 오르고 Waypoint_5는 갑자기 한 번에 5가 오르고 어떤건 3이 오르고... 이런식으로 서로 다르게 오르더라구요.

제 생각에는 지나갈 때 충돌 판정이 1번이 아니고 5번 나는 것 같은데요.

void FindCheckpointIndex(GameObject obj, out int index) { for (int i = 0; i < Colliders.Length; i++) { if (Colliders[i].gameObject == obj) { index = i; UnityEngine.Debug.Log("웨이포인트 : " + way_point_passing_count); way_point_passing_count++; // 웨이포인트 카운팅

                if (way_point_passing_count >= 100) // 웨이포인트가 13이 되면 
                {
                    way_point_passing_count = 0;
                    m_EndEpisode = true; // 에피소드 초기화
                }

                return;
            }
        }
        index = -1;
    }

그런데 분명 way_point_passing_count 값이 ++이라 지나가는 순간 충돌 판정이 5번 난게 아니면 설명이 안 되더라구요. 그런데 더 황당한건 5번 오르는 waypoint 오브젝트는 충돌 시 1만 오르는 waypoint 오브젝트를 복사 붙여넣기 해서 그대로 가져다 놓은거 라는겁니다.

왜 이럴까요?

요건.. 좀 신기하네요.. 제가 알기로는 충돌하는 경우 set active를 False로 해서 해당 waypoint 객체를 없애는걸로 알고있는데요. 이상하네요.. 이에 대한 해결 방법은 연속적으로 여러 충돌 신호가 잡히는 경우 한번만 카운트를 올려주는 방식으로 좀 억지로 해결할수는 있을 것 같습니다.