https://www.immersivelimit.com/tutorials/reinforcement-learning-penguins-part-1-unity-ml-agents
----
먼저 펭귄 리소스를 다운 받아준다.
이메일 적으면 다운을 받을 수 있다.
---
https://www.youtube.com/watch?v=axF_nHHchFQ
https://www.youtube.com/watch?v=6xsqTH0qi5w
유투브 영상도 있음
----
시작하기
새로운 유니티 프로젝트를 (펭귄) 만들어준다.
패키지 매니저에서 ML Agents 를 인스톨해준다.
----
Git 허브에 프로젝트를 사용하면 2.0.1 ML-agent인데
기본 프로젝트에서는
1.0.7이다. 그래서 깃허브의 프로젝트를가져와서 해야하는지, 바로 1.0.7에서도 되는지 테스트를 먼저 해본다.
1.0.7 버전은
Actuators; 가 안들어가기 때문에
액션 버퍼가 안된다.
---> 따라서 Git 허브에서 만든 것을 프로젝트로 사용하여서
2.0.1 버전을 사용해야한다.
기존에 했던 Project를 사용해준다.
만약 없으면 이걸로 유니티 허브에서 애드 해주면 된다.
또는
어셋에
ML - Agents만 있어도 된다.
드래그해도 안된다.
-------
그래서 기존처럼 쓴 Project에서 만들어야한다.
하나 더 테스트
새로 만든 프로젝트에
이 두개의 파일은 외부에서 쓰는 것들을 설정 해주는 파일이다.
2.0.1 버전의 패키지스 - 락에 저 부분을 추가 해볼것이다.
새로 프로젝트를 만들어주고,
2.0.0 폴더의 두 개 의 파일을 새로 만든 패키지스 폴더에 붙여넣기를 해준다.
----> 에러가 뜬다. 이 방법도 안 될 듯 !
-----
https://github.com/Unity-Technologies/ml-agents/blob/main/docs/Installation.md
패키지 매니저 Add package from disk로 깔면 새로운 프로젝트에서도 될듯
이러면 2.0.0 를 사용할 수 있 다 .
----
펭귄 어셋을 넣어주고,
메쉬 -> 모델링 끌어다 넣어주고 - 이름을 카멜식으로 바꾸줘고 - 프리팹으로 만들어준다.
PenguinArea 프리팹 제외하고 지워준다.
- PenguinArea
- PenguinAgent
- Fish
스크립터를 만들어준다.
--추천 예제
https://learn.unity.com/course/ml-agents-hummingbirds
---
스크립터를 만들고 나서
예전버전에는
펭귄 아카데미가 필요했는데 이제는 필요하지 않는다. (아카데미는 싱글턴이었음)
펭귄 에어리어 만들기
펭귄 에어리어는 물고기 펭귄 물 등등이 있다.
먼제 에어리어 스크립터를 열어서 수정해준다.
스타트랑 업데이트를 지워준다.
'
using MLAgents; // 이거 안됨 using Unity.MLAgents; 로 해야함.
using TMPro; //텍스트 메쉬를 사용하기 위해서 사용 // 텍스트를 3d 메쉬로 보여준다.
를 달아준다.
[ ] 은 툴 팁으로서, 이걸 뚫으면 밖에 퍼블릭으로 뚫리는 곳에 설명이 생긴다.
---
마우스 올리면 툴 팀 내용이 보인다.
--
주석할때 /// 세 개를 치면
서머리가 뜬다.
서머리를 쓰면 다른 사람들한테 변수를 알려줄 수있다.
리셋 에어리어 메서드 만들어준다.
특정 물고기를 없애는 메서드과 남아있는 물고기
RemoveSpecificFish 는 엄마가 먹은 걸 없애주는 메서드
랜덤 포지션을 선택해주는 기능
--
모든 물고기를 지우는 메서드
펭귄을 위치시키는것, 아까 우리가 만든 랜덤포지션에서 360도로 만들어주는 것
팽귄이 생성될때 ChooseRandomPosition에 값을 넣어서 렌덤하게 나오게하는것
애기 펭귄 위치도 대체 하게 해준다.
---
물고기 만들기
4(숫자) , 5 (스피드) 였음. 위에서 넣어준 값
--
스타트 에서 리셋 에어리어 하겠음
업데이트는 리워드 텍스트를
-- 즉 에어리어에서 피쉬 만들고, 펭귄들 위치 정해주고, 이런걸 해준다.
---
펭귄 에이전트 .cs로 가기
스피드, 도는 속도, 하트 프리팹(애기한테 줄때) , 먹은걸 주는 프리팹 (애기한테 줄때)
리지드 바디,
new private 는 변수 재정의, 부모의 리지드 아님 내 리지드를 쓴다는 것
isFull은 물고기가 다 찼는지
초기화 단계
액션 버퍼 부분
float forwardAmount = actionBuffers.DiscreteActions[0]; // 딱딱 떨어지는 Discrete // 컨티뉴어티 - 이어지는 값
Discrete 상태로 0은 찾아야하는 1은 다 찬 상태
이건 어느쪽으로 돌지 정하는 것
액션 부분과 리워드 부분을 잘 찾아봐야한다.
지금은 액션의 0 과 1 의 따라서 상태를 나누고,
리워드는 5,000 스텝 마다 감점을 주고있다.
여기서 하는 건, 이동하고, 회전하고, 보상하고 (- 보상)
--
휴리스틱은 사람이 직접 움직이기위해서
테스트 할때나 사람 모방 훈련할때
키보드를 통해서 강제적으로 넣고있음
에피소드가 시작 될때, 초기화를 시켜준다.
--
옵저베이션 관찰 단계
이 값을 관측을 하겠다는 것, 파이썬 API로 보내 겟다는 것, (나중에 이걸 비헤이어에 넣어줘야하는 값이다.
이걸 꼭 맞춰서 잘 넣어야한다.)
사이클 참고하기
콜리젼, 태그로 찾는 것이다. // 콜라이더가 붙어 있어서, 부딪치면 찾게 한다.
피쉬봐 베이비를 충돌 체크를 하겠다.
피쉬에 닿으면 EatFish 넣고,
베이비에 닿으면 Regurgitate 물고기를 토해낸다.
피쉬를 먹는 메서드
피쉬를 토내해는
-----
물고기.cs
속도, 랜덤속도, 등등
스윔 메서드
----
여기까지
https://www.immersivelimit.com/tutorials/reinforcement-learning-penguins-part-2-unity-ml-agents
----
애기 프리팹 만들기
물고기 프리팹
엄마펭귄
------
스크립터 붙여주면, 이렇게되는데
스페이스 사이즈는 옵져버에서 계산한 값을
액션은 설정해준 액션[0] , 그거 넣어주는 거 0 1 2 잡아준거.
스텝은 5000
○ 레이를 쏜다
레이를 쏠수있다. Detece 태그를 설정
잊미말고 Decision 리퀘스트 달아주기
세 개 프리팹안에서 잡아서 메쉬 랜더러 지우고, 메쉬 콜라이더 붙여주기
이후 쭉 따라하고,
config에 yaml 파일 만들어서, cmd 에서 명령어 입력해주시기
---
'Unity > AI인공지능' 카테고리의 다른 글
0518_ML-Agent 기초씬 만들기 (트레이너 이용하기(파이선)) (0) | 2021.05.18 |
---|---|
0517_ ML-Agent 간단한 씬 해보기 (0) | 2021.05.17 |
0517 _ 인공지능이란? (0) | 2021.05.17 |