안녕하세요! 매번 영상 잘보고 있어요! 영상을 보면서 생각되는 아이디어와 학습 방향을 조금 공유해보려고 해요. 다른 분들이 말하는 것처럼 미니맵을 활용해서 전체적인 길을 찾는 게 가장 유효할 것으로 보여요. 다만 유닛들의 위치 때문에 마치 노이즈가 낀 것처럼 나타나는 문제가 있어서 노이즈를 제거하는게 좋아보여요. 노이즈 제거에는 여러 방법이 있겠지만, 크게 세 가지 방법을 떠올려 봤어요. - 1. 연속 이미지 평균값: 첫번째 방법은 가장 간단하게 미니맵을 지속적으로 찍은 후 픽셀값의 평균을 내는 방식이에요. 구현은 가장 간단하지만, 예상되는 문제점은 미니맵의 픽셀 값의 신뢰도가 떨어진다는 점이에요. 또 높은 신뢰도를 가진 픽셀을 얻으려면 미니맵을 여러장 찍어야 하니 그만큼 옵피 AI 초기 준비 시간이 늘어나겠죠. 2. 연속 이미지 최빈값: 두번째 방법은 첫 번째 방법에서 최빈 픽셀로 나타내는 거예요. 문제점은 미니맵을 얼마나 많이 캡쳐해야 할 지 단정 짓지 못한다는 점이에요. 충분히 많은 미니맵 캡처본이 없으면 잘못된 결과가 나올 수 있어요. 3. 유닛 픽셀 제거: 세번째 방법은 픽셀값의 신뢰도를 최상으로 유지하는 방법이에요. 다만 이 방식은 미니맵의 유닛 표시가 안티앨리어싱이 적용되지 않는다는 가정 하에 동작해요. 유닛을 나타내는 픽셀 값은 알고 있으므로, 이를 다음 캡쳐본 픽셀로 치환하는 방식이예요. 계속해서 치환하다보면 더 이상 치환할 픽셀이 없게 되고, 결국 온전한 미니맵을 얻을 수 있어요. - 개인적으로 3번이 가장 좋은 방법으로 보이며, 만일 안티앨리어싱이나, 다른 문제로 유닛의 픽셀 값이 고정되어 있지 않다면 2번 방법을 추천드려요. (여기에 임계비율 조건을 넣는다면 거의 확실히 작동할거예요) 여기에 이전처럼 길찾기 알고리즘을 적용할 수도 있고, 자신의 위치를 추가한 미니맵 이미지 인식 AI로 목표 방향을 예측하도록 할 수도 있겠네요. 다음으로, 실제로 플레이할 AI(이하 AI)를 학습하는 방법에 대해서도 생각해 봤어요. 개인적으로는 가상환경에서 일차적으로 학습 후, 스타에서 추가 학습하는 방식이 가장 좋을 것 같아요. 이렇게 하면 가상환경의 이점을 활용하면서 동시에, 가상환경의 문제점도 해결할 수 있어요. AI는 이동할 방향 정보만 예측하도록 하고, 입력은 주변 유닛 정보가 담긴 연속 이미지와 목표 방향(사인, 코사인으로 분해한 값)이예요. 보상 함수는 다음과 같이 생각해 봤어요. * 사망시 -50 * 생존시 매 프래임 당 +5 * 생존시 프래임 당 + max(-0.1, cos(θ)), θ는 목표 방향과 예측 방향의 사이각 학습 순서는 다음과 같이 생각해 봤어요. - 1. 가상환경에서 이동과 피하기 학습 우선은 가장 기본적인 생존과 목표 방향으로 이동부터 학습해야 한다고 생각해요. 이 부분은 가장 핵심적인 부분이기도 하고 학습에 가장 오랜 시간이 걸릴 것으로 예상되기 때문에, 가상환경에서 시뮬레이션 방식으로 학습하는게 좋을 것 같아요. 그러면 필요에 따라 가속/감속도 가능하고 여러 AI를 동시에 학습하는 것도 가능하니 잘 학습된 AI를 뽑을 수 있을 거예요. 또한, 유전 알고리즘을 적용하는 것도 좋은 접근이 될 것 같아요. 생존하는 AI가 많아지면 누적 보상 함수를 점수로 환산해 상위 n% AI를 복제하는 방식으로 경쟁하게 만든다면 더욱 고도화된 AI가 나올 수도 있겠네요. 추가로 강가(벽)는 움직이지 않는 유닛(옵저버)와 동일하다고 생각해서 특별히 학습하진 않아도 될 것 같아요. 아니면 학습 과정에서 움직이지 않는 유닛을 가두리 벽으로 만들어 가둔다면 더 자연스럽게 제약 조건을 학습하게 할 수도 있겠네요. 2. 스타에서 실전 학습 스타에서 유닛의 회전 이동이나 시뮬레이션에서 묘사하기 힘든 기타 특성을 학습해야 해요. 이전 보다 환경적인 제약으로 학습에는 시간이 오래 걸리겠지만, 기본적으로 어느정도 학습된 상태이기에 보다 빠르게 적응할거예요. - 마지막으로, 화면 이동에 대한 거예요. 현재 부대 지정을 통한 화면 이동 시 화면이 부들부들 거리는 문제가 있는데, 이 경우 AI가 유닛의 가감속을 재대로 인지하지 못할 것 같아요. 그래서 다른 방법으로 화면을 이동할 필요가 있어 보여요 다만 먼저 말씀드리면, 이미 이미지 인식에서 유닛의 위치(경계)가 변하기 때문에 화면 보정의 효과가 미미할 수도 있어요. 그래서 모든 과정이 끝나고 가장 마지막으로 적용해보면 좋을 것 같아요. - 1. 키보드 이동 키보드 이동에 가속이 없다면 유효할 것으로 보여요. 스커지가 일정 화면 내에 있도록 화면을 키보드로 이동하는 방식이에요. 키보드를 누른 시간을 바탕으로 보정하는 방식이예요. 2. 키보드 & 이미지 인식 키보드 이동에 가속이 있다면, 이미지 인식을 통해 보정하는 방법이예요. 추가적인 이미지 인식 AI를 도입해도 되지만, AI 입력을 캡쳐 원본에 가까운 이미지를 입력받고 화면 이동을 위한 키보드 출력도 낼 수 있도록 학습해보는 것도 괜찮을 것 같아요. 이 경우 AI를 처음부터 다시 학습해야하는 치명적인 문제가 있어요. 하지만 실제 유저 플레이에 가장 유사한 방식이라고 생각해서, 기존 방법이 성공한다면 새롭게 시도해 보시는 것도 좋을 것 같다고 생각해요. 3. 미니맵 클릭 이동 미니맵에서 스커지 위치가 변하면 스커지를 클릭하여 화면을 이동하는 방식이에요. 보다 안정적인 접근법이지만, 사용자의 입력과 다소 동떨어진 방식이여서 취지와는 다를 수 있어요. - 저도 모르게 몰입해서 쓰다 보니 고봉밥이네요ㅠㅠ 매번 흥미로운 영상 만들어 주신 덕분에 시간 날 때마다 챙겨보고 있어요! 다음 영상도 기다리며 꼭 성공하길 응원할게요!
@MuJiRaengI9 күн бұрын
와.. 정말 좋은 의견 주셔서 너무 감사합니다 ㅜㅜ 지금 독감이 심하게 걸린 상태라 연구를 진행하지 못하고 있는 상태인데, 댓글 달아주신걸 읽어보니 빨리 나아서 연구해보고싶어졌습니다 ㅋㅋㅋ 다시한번 진심으로 감사드립니다!!!
@김치남-l1j9 күн бұрын
정성 가득이네요
@sereania621912 күн бұрын
하나의 행동에 여러 가치관을 부여할 방법은 없을까요? 가능한 한 사람이 생각하는 것 처럼 내용을 부여할 수 있음 좋겠다 생각이 드는데... 저는 이젠 지식이 딸려서 뭘 덧붙이기 힘드네요 ㅋㅋㅋ
@sereania621912 күн бұрын
큰 의미에서 방향성을 결정하는 ai : 맵 구성을 보니 지금은 좌측으로 진행해야한다. (예전 코인먹기같은 느낌) 작은 의미에서 방향성을 결정하는 ai : 옵저버를 피해야한다. idle : 큰 방향성대로 간다. 요런느낌? 어떨까 싶네요.
@김연세-j4n12 күн бұрын
강화학습의 내용을 관통하고 계시네요. 이 영상은 뭘로 학습한건지 모르겠지만 AI 중에 게임류들은 강화학습을 통해 진행하는 경우가 많던데, 보통 가치망이라는 것을 학습시키거든요. 바둑으로 치면 집수 = 많을수록 높은 가치, 다른 점수게임으로 치면 점수 = 많을 수록 높은 가치, 그래서 최종적으로 가치가 높은 쪽으로 행동하게 끔.
@MuJiRaengI12 күн бұрын
좋은 의견 감사합니다! 일단 큰 의미에서 방향을 결정하는 AI를 하나 사용중이고 작은 의미에서 방향을 결정하는건 아직은 AI를 사용하고 있지 않습니다!! 나중에 강화학습을 사용할 수 있으면 좋긴 할 것 같은데, 어떻게 될 지는 잘 모르겠네요 ㅜㅜ
@Tenma_Gabriel_White9 күн бұрын
이걸 보니 스타1 BW AI들이 생각나네요 크라시오 나 tsc나 몬스터나 스타더스트 같은 AI들
@MuJiRaengI8 күн бұрын
맞아요!! 저도 대학교 다닐때만 해도 그런 AI만드는게 꿈이었는데 지금은... 밀리는 생각보다 엄청 어렵더라고요
@sato-q5w13 күн бұрын
미니맵으로 분석하게 하는게 합리적인거 같은데요?
@MuJiRaengI12 күн бұрын
저도 처음에는 몰랐는데 말씀해주신걸 생각해보니 미니맵으로 분석하는게 좋을 것 같네요! 좋은 의견 주셔서 감사합니다!
@lIIllIIlllIIIllIIllIlllIIIllII13 күн бұрын
길 인식에 비전이 적절할지 모르겠네요 차라리 미니맵 기반으로 미리 길 자체를 준다거나 하면 괜찮지 않을까요 (스타크래프트를 안해서 잘 모릅니다만...)
@MuJiRaengI12 күн бұрын
좋은 의견 감사합니다! 미니맵을 활용하는 방법도 고민해보도록 하겠습니다!!
@youdieee13 күн бұрын
생각해보니 미니맵으로 옵저버 보고 미니맵으로 피하고 미니맵으로 경로를 보는 것도 상관없을려나
@MuJiRaengI12 күн бұрын
좋은 의견 감사합니다! 그런데 미니맵으로 피하는 것 까지 하기에는 어려울 것 같긴 한데 미니맵으로 경로를 보는 것은 어쩌면 좋을 수 도 있을 것 같아요!
@jss653112 күн бұрын
뭘로 어떻게 학습을 시키는건가요??
@MuJiRaengI10 күн бұрын
스커지의 움직일 방향을 정하는 건 게임 화면을 보고 위, 아래, 오른쪽, 왼쪽중 하나를 선택하도록 학습을 시켰습니다. 그리고 AI를 통해 방향을 알아냈으면 움직이는 건 알고리즘으로 움직이게 했습니다! 예를 들어 AI가 '오른쪽으로 움직여라 ' 라고 하면 알고리즘이 스커지의 우측에 옵저버가 있는 지 없는 지를 확인하고 없으면 스커지를 움직이도록 구현했습니다!
@jss653110 күн бұрын
@@MuJiRaengI 어떤 툴이나 기술을 사용했는지도 알수있을까요? 웹은 조금 하는데 이쪽에는 전혀 문외한이라 궁금합니다
@MuJiRaengI10 күн бұрын
@@jss6531 동영상에서 나온 프로그램은 제가 직접 구현한 프로그램입니다! 딱히 기능이 있는 건 아니고 게임 화면 위치를 지정해주는 역할을 하는게 주요 기능입니다! 이 프로그램UI는 pyside6 라이브러리를 사용해서 만들었습니다! AI관련 라이브러리는 pytorch를 사용했습니다! classification모델은 현재 ResNet18을 사용해서 게임 화면을 입력으로 받으면 위, 아래, 오른쪽, 왼쪽 4개 중 하나로 분류하는 기능을 가지고 있습니다! 혹시 더 궁금한게 있으시면 답변달아드리겠습니다! 그런데 댓글에 댓글을 달면 저한테 알람이 뜨지 않아서 새롭게 댓글을 달아주시면 제가 좀 더 빨리 확인할 수 있습니다!!(댓글은 알람이 뜨는데 댓글의 댓글은 알림이 안뜨네요 ㅜ)
@jss653110 күн бұрын
@@MuJiRaengI 친절한 답변 감사합니다. 영상 재밌게 봤어요ㅎㅎ
@메타타-t3w12 күн бұрын
학습을 강화학습으로 진행하나요??
@메타타-t3w12 күн бұрын
보상함수를 잘 조절 하면 좋을거 같아요!
@MuJiRaengI12 күн бұрын
감사합니다! 아직 강화학습은 사용하고 있지 않습니다!
@알씨3907 күн бұрын
영상 보니까 옵저버가 ai네요
@MuJiRaengI7 күн бұрын
ㅋㅋㅋ 생각보다 옵저버가 똑똑하더라고요 ㅜㅜ
@-START-7773 күн бұрын
ㅎㅎ ai 아직 멀었구나 🤪🤪
@MuJiRaengI3 күн бұрын
아마도 ai는 잘못이 없고 저한테 잘못이 있는 것 같습니다 ㅜㅜㅜ
@lazy600712 күн бұрын
노란색을 피해서 이동해야 한다는 명령을 넣은 게 어째서 ai인가요? 딥,머신러닝 기능도 없고 그냥 하드코딩 아닌가요?
@MuJiRaengI12 күн бұрын
지금은 노란색을 피해서 이동해야 한다는 명령은 알고리즘(하드코딩)으로 하고 있는데, 스커지가 이동할 때 방향을 위, 아래, 오른쪽, 왼쪽 중에 어디로 이동해야 하는건지는 지금 AI가 예측하고 있습니다! 참고로 나중에 강가를 인식한다거나, 옵저버의 이동 경로를 예측한다거나 하는 부분은 AI를 사용할 예정입니다!
@lazy600712 күн бұрын
@@MuJiRaengI 스커지가 어디로 이동해야 할지 정하는 것도 그냥 거리와 위치에 따른 하드코딩 함수로도 가능한거 아닌가요? 정확히 어떤식으로 ai가 예측한다는거죠?
@MuJiRaengI12 күн бұрын
@@lazy6007 음.. 어떤게 궁금하신건지 제가 제대로 이해를 하지 못해서 원하시는 설명을 잘 드릴 수 있을 지 모르겠네요! 1. 하드 코딩으로도 할 수 있는건데 AI를 굳이 왜 쓰는지가 궁금하신 거라면 미니맵에서 스커지의 초록색 점 위치를 보고 하드 코딩으로 구분을 할 수도 있을 것 같긴 합니다. 그런데 이 동영상을 만들 때 까지는 이 생각을 하지 못했었습니다. 그냥 단순히 현재 게임 화면을 보고도 위, 아래, 오른쪽, 왼쪽 Classification모델이 잘 구분할 줄 알았는데, 막상 동영상을 만들면서 확인해보니 생각보다 비슷한 부분이 있어서 'AI가 햇갈릴 수 있겠다' 라는걸 느꼈습니다! 다른 시청자분들께서도 말씀해주신 미니맵을 보고 스커지의 대략적인 위치를 알아내서 어느 방향으로 움직여야 하는 지를 알아내자 라는 아이디어는 댓글을 보고 생각이 들었습니다! 만약 처음부터 하드코딩으로 미니맵을 보고 스커지가 움직여야 하는 방향을 예측하게 하자 라는 생각을 했었다면 이 부분은 AI를 사용하지 않을 수 도 있었을 것 같습니다! 2. AI를 어디다 왜 쓴건지 정확히 이해가 안되시는 거라면 지금은 알고리즘(하드코딩)으로 오른쪽으로 이동해야 하는 경우라면, 스커지의 우측에 옵저버가 있는 지 없는 지 확인을 합니다. 없을 경우 계속 우측으로 이동하라고 합니다. 만약 옵저버가 있을 경우, 해당 옵저버가 스커지 기준으로 아래쪽에 더 가깝게 있는 지, 위 쪽에 더 가깝게 있는 지 인식하여 멀리 있는 쪽으로 돌아갑니다. 즉, 알고리즘은 오른쪽으로 이동해야 하는 경우에는 왼쪽, 위, 아래에 옵저버가 있든 없든 상관을 하지 않습니다. 이렇게 알고리즘은 스커지가 어느 방향으로 움직여야 하는 지를 알아야 해당 방향을 기준으로 옵저버의 위치를 인식하고 스커지에게 이동명령을 내리게 됩니다. 그래서 이런 방향 정보를 얻기 위해 AI를 사용했습니다. 2-1. 만약 방향 정보 없이 모든 방향에 옵저버를 인식해서 피해가면 되지 않을까? 라고 생각하신다면 물론 가능할 수 도 있습니다. 그런데 옵저버를 피해다니기는 하지만 클리어 위치까지 이동하는데는 매우 오랜 시간이 걸릴 것 입니다. 왜냐하면 방향을 알려주지 않으면 랜덤으로 움직여서 옵저버 피하기를 클리어한다는 말과 비슷하니까요 (개인적으론 클리어를 할 수 있는지도 잘 모르겠습니다.) '옵저버 피하기' 만 한다면 모든 방향에 옵저버를 인식해서 피해다니게 알고리즘으로만 가능 할 수 도 있겠으나, 옵저버를 피해다니면서 클리어를 하는 것도 목표로 두고 있기 때문에, 스커지가 어느 방향으로 이동을 해야 하는지의 정보가 필요하다고 판단했습니다! 이게 궁금하신 내용이었는지 잘 모르겠네요! 또 궁금하신 내용이 있으면 댓글 달아주세요!