MA-POCA(이하poca)알고리즘 설명 링크 두개
특징을 요약하자면
협력적 행동에 특화된 학습방법이다.
에이전트들을 그룹으로 묶은 후(BehaviourName이 같아야함 즉 같은모델이어야 함)
그룹보상과 개인보상을 나누어 주면서 학습을 시키는것이다.
같은 Behaviour를 가지면서 다중에이전트가 협력해야하는 프로젝트에 쓰면된다.
중간에 에이전트가 죽거나 다른 기획상의 이유로 비활성화 시켜도 그룹보상으로 팀이 승리하는 법을 학습한다고 한다.
유니티 예제프로젝트의 예제씬들을 보면
자기자신은 패널티를받아도 팀이 승리하는길을 택하는 AI의 모습을 확인할수 있었다.
(DungeonEscape예제)
다만, 코드를 좀 수정해야한다.
먼저 에이전트 그룹으로 쓸 변수를 선언해준다
이 변수는 에이전트들을 끄고 켜고 초기화해주고를 담당하는 스크립트에 선언하는것이 좋다.
Awake()같은곳에서 초기화해준다.
에이전트를 켤때(에피소드가 시작될때) 그룹의 RegisterAgent() 함수로 agent를 그룹에 등록시켜준다.
이 과정은 에피소드가 새로 시작할때마다 해줘야하는것 같다.
보상 및 패널티를 줄때 그룹의 AddGroupReward() 함수로 그룹보상을 줄 수 있다.
기존 AddReward()함수도 쓸수있고 AddReward()함수로 보상을주면 같은 Behaviour를 쓰지만 해당 에이전트에게만 보상이 들어간다고 한다.
이것으로 보상에 기여하지 않은 에이전트가 같은Behaviour라서 보상을 받는 문제를 제외시킬수 있을것으로 보인다.
에피소드가 실패 or 성공으로 끝이나면 이 함수로 에피소드를 끝내면 되고
시간초과 같은 이유로 에피소드를 끝낼때는 이 함수를 호출하라고 한다.
이제 학습을 시켜보면 기존 보상 그래프 말고도
그룹보상그래프가 3번째에 생기는것을 확인할수 있다.
※yaml파일의 하이퍼 파라미터는 똑같이 사용할수있고
trainer_type만 poca로 바꿔주면 된다.