분류 전체보기 190

엔진 지원 시스템

시스템 클래스 생성 게임에서 사용되는 각종 매니저와 같은 싱글톤 혹은 정적 클래스들은 어떻게 생성하고 파괴해야 할까? 이런 클래스들을 생성/파괴할 때는 클래스들끼리의 의존성을 고려해야 한다. 유일한 클래스를 생성하는 메서드를 정의한 다음 의존성에 맞게 호출. //class RenderManager //... static RenderManager& get() { static RenderManager sSingleton; return sSingleton; } RenderManager() { VideoManager::get(); TextureManager::get(); //... } //... 그러나 위와 같은 방법은 아래와 같은 단점이 있다. 파괴 순서를 제어할 수 없어 파괴 과정에서 의존성이 훼손될 수 있..

게임엔진/일반 2024.02.11

인공 신경망

기초 인공 신경망의 핵심은 한 네트워크에 있는 인공 뉴런들이 다른 인공 뉴런의 부분 집합과 상호작용 하는 것이다. mulit layer perceptron(MLP)은 인공 신경망 아키텍쳐 중 하나인데, perceptron은 인공 신경망에서 사용되는 인공 뉴런을 뜻한다. MLP는 이전 레이어의 모든 노드로부터 인풋을 받아 다음 레이어에 있는 모든 노드에 아웃풋을 전달한다. 이런 네트워크를 feedfoward 네트워크라 부른다. 프로그래머로부터 입력을 받는 레이어를 input layer로, 그리고 네트워크를 통해 쓸만한 정보를 출력하는 레이어를 output layer라 부른다. feedfoward 네트워크 내부의 레이어들끼리 루프가 있을 수 있는데 이런 경우 recurrent network라 부르며, 매우 ..

Game AI 2024.02.04

(간단) 분할 상환(amortized) 분석 (+확률적 분석)

개요 알고리즘이나 자료 구조의 성능을 볼 때 amortized analysis란 단어를 많이 보게 된다. 이걸 한국어로 번역하면 분할 상환 분석이라는 생소한 단어가 나와 헷갈리는데, 간단히 말하면... 성능을 분석함에 있어서 "N개의 시퀀스를 수행할 때의 평균 시간을 측정했다." 라는 의미이다. 왜 이러냐? dynamic array를 한번 생각해보자. dynamic array는 capacity가 꽉 찬 상태에서 add가 일어날 경우, 흔히 doubling 이라 불리우는 비싼 연산을 수행한다. 따라서 dynamic array의 Add 연산의 시간 복잡도는 얼마인가? 라고 묻는다면 대부분의 경우에는 O(1)이겠지만 doubling이 일어날 때는 O(n) (n은 현재 array에 있는 요소의 갯수)이라고 할 ..

알고리즘/일반 2024.01.28

가비지 없이 foreach 사용하기

문제foreach문은 syntax sugar이다. 내부적으로 해당 타입의 Enumerator를 받아 루프를 수행한다. public class SomeGenericClass : IEnumerable{    public class SomeEnum : IEnumerator    {        public SomeEnum()        {            Console.WriteLine("Created");        }                public bool MoveNext()        {            return false;        }        public void Reset()        {            throw new NotImplementedExcepti..

언어/C# 2024.01.21

Dynamic 타입

Dynamic 리플렉션이나 다른 구성요소와 통신하는 일을 더 쉽게할 수 있도록 C# 컴파일러는 표현식의 타입을 dynamic으로 선언할 수 있게 했다. 만약 코드에서 dynamic으로 표시된 표현식이나 멤버를 호출하는 코드를 작성하면, 컴파일러는 페이로드(Payload)라 불리는 특별한 IL 코드를 생성한다. 실행 시점에서 페이로드 코드는 객체의 실제 타입을 기반으로 정확한 연산을 찾아 실행하는 일을 한다. public class Cat { public void Speak() { Console.WriteLine("Meow"); } } public class Dog { public void Speak() { Console.WriteLine("Woof"); } } public class Rock { } //..

언어/C# 2024.01.14

강화학습_Q-Learning #2

2023.12.19 - [Game AI] - 강화학습_Q-Learning #1 강화학습 튜닝 이전 글에서 Q러닝의 공식은 다음과 같다고 했다. $$Q(s,a) = (1-{\alpha})Q(s,a)+{\alpha}(r+{\gamma}max(Q(s',a'))$$ 여기서의 ${\alpha}$와 ${\gamma}$에 더하여, 임의의 상태를 가질 확률 ${\nu}$(뉴)와 임의의 행동을 취할 확률 ${\rho}$(로)를 인자로 더 추가할 수 있다. 알파 : 학습율 학습율은 현재 데이터가 저장된 Q-Value에 얼마나 영향을 미칠지를 결정한다. [0, 1]값을 갖는다. 0이면 학습이 아예 되지 않는다. 0.3정도로 시작해볼 수 있다. 그러나 피드백의 편차가 클 때에는 이 값이 더 낮아지는게 좋다. 반면에, 학습 반..

Game AI 2024.01.07

강화학습_Q-Learning #1

개요 강화학습이란 경험에 기초하여 학습하는 기법들을 칭한다. 강화학습은 일반적으로 3가지 요소를 지닌다 탐색 전략 : 게임 중 다양한 행동을 시도함 강화 함수 : 취한 행동을 평가함. 학습 규칙 : 위 두 가지를 연결함. 강화학습은 신경망으로 할 수 있지만 게임에서는 Q-Learning을 쓰는 것이 좋은 시작점이 될 수 있다. Q-Learning은 구현이 쉽고 게임이 아닌 산업에서 많이 쓰여졌으며 이론에 대한 깊은 이해 없이도 사용할 수 있다. Q-Learning Q-Learning은 취할 수 있는 액션들을 탐색하며 관련된 정보들을 저장하고 업데이트한다 Q러닝은 게임 세계를 State machine으로 다룬다. 알고리즘은 항상 어떤 상태를 가지며, 상태는 캐릭터의 환경이나 내부 정보들을 기록한다. 당연하..

Game AI 2023.12.19

Decision Tree Learning - (3) incremental way

2023.12.03 - [Game AI] - Decision Tree Learning (2) Decision Tree Learning (2) 2023.11.26 - [Game AI] - Decision Tree Learning - 1 Decision Tree Learning - 1 2021.10.21 - [Game AI] - 의사 결정 - Decision Tree 의사 결정 - Decision Tree Decision Tree Decision Tree는 Decision Making 구현법 중 하나이다. 빠르고, 쉽게 tsyang.tistory.com Incremental Learning 지금까지는 온전한 데이터들이 들어오면 그걸로 Decision Tree를 만들어 냈다. 그러나 새로운 데이터들이 들어온다..

Game AI 2023.12.09

Decision Tree Learning (2)

2023.11.26 - [Game AI] - Decision Tree Learning - 1 Decision Tree Learning - 1 2021.10.21 - [Game AI] - 의사 결정 - Decision Tree 의사 결정 - Decision Tree Decision Tree Decision Tree는 Decision Making 구현법 중 하나이다. 빠르고, 쉽게 구현 가능하고 이해하기 쉽다는 장점을 가지고 있다. 위 트 tsyang.tistory.com ID는 연속적인 속성에서 동작할 수 없고 속성의 값들이 많을 경우에도 활용이 어렵다. 따라서 속성의 값들은 몇 개(주로 2개)의 이산적인 카테고리로 나뉘어져야 한다. Single Split 연속적인 값들은 역치(threshold) 를 정하..

Game AI 2023.12.03

Decision Tree Learning - 1

2021.10.21 - [Game AI] - 의사 결정 - Decision Tree 의사 결정 - Decision Tree Decision Tree Decision Tree는 Decision Making 구현법 중 하나이다. 빠르고, 쉽게 구현 가능하고 이해하기 쉽다는 장점을 가지고 있다. 위 트리에서 Leaf 노드는 실행할 액션(output)이 된다. input이 어떻게 들 tsyang.tistory.com 개요 Decision Tree는 효율적인 학습 대상이다. Strong Supervision(결과가 맞았는지 틀렸는지 피드백)을 통해 만들어진 행동들로 동적 생성이 가능하다. ID3 게임 AI에서 Decision Tree 학습에는 일반적으로 ID3라는 걸 쓴다. 산업적으로는 C4, C4.5, C5같은..

Game AI 2023.11.26