Game AI

퍼지 로직(Fuzzy Logic) - 1

tsyang 2022. 10. 2. 01:48

개요


만약 어떤 캐릭터가 '건강함'과 '아픔' 상태를 가질 수 있다고 하자. 기존의 로직에서는 캐릭터는 건강하거나 아프거나 둘 중 하나만 표현할 수 있지만 그 사이를 표현할 수는 없다. 퍼지 로직(Fuzzy Logic)은 이러한 '점진적 상태'를 표현하기 위해 사용할 수 있다. 

 

다만 대부분의 경우에서 퍼지 로직보다 확률 기반의 로직을 사용하는 것이 더 낫다. 왜냐면 퍼지 로직을 기반으로한 AI는 결국 상대방에게 다 털릴 수 있기 때문이다. (행동이 결정적이기 때문에 패턴이 파훼될 수 있다)

 

그럼에도 퍼지 로직은 "경계 상태일 때는 천천히 걸어라"같은 간단한 동작을 구현하기 쉽기 때문에 이러한 부분에서는 대중적이다.

 

 

 

퍼지 집합(Fuzzy Sets)


전통적인 로직에서는 "Predicate"(술어, 참/거짓을 리턴하는 어떤 개념이라고 보면 됨)라는 개념을 썻다. 퍼지 로직은 여기에 값을 추가하여 개념을 확장한다. 

 

예를 들어 캐릭터는 0.9만큼 배고프거나 0.5만큼 다친 상태가 될 수 있다. 이런 개념들을 퍼지 집합(fuzzy set)이라고 부르고 그 값을 소속도(degrees of membership)라고 부른다. 당연하게도, 소속도가 0이거나 1이라면 전통적인 로직이라고 볼 수 있다.

 

 

 

여러 집합의 소속도

전통적인 로직에서는 상호 배제적인 값들이 존재했지만 퍼지 로직에서는 그렇지 않다. 상호 배제적인 값들은 퍼지 로직에서 합이 1인 소속도를 지닌다. 

 

예를 들어, '부상' 상태와 '건강' 상태라는 상호 배제적인 상태는 퍼지로직에서는 0.7만큼 건강하고 0.3만큼 부상입은 상태로 표현이 가능하다.

 

만약 n가지 값들이 서로 상호 배제적이라면 n가지 상태의 값들의 합이 1이면 된다.

 

그러나 이런 상호배제 방식을 강제하는 구현을 잘 쓰지는 않는다. 대신 추후에 나올 퍼지화(Fuzzification)을 사용한다.

 

 

 

퍼지화 (Fuzzification)


퍼지 로직은 퍼지 집합과 이 집합들의 소속도를 이용한다. 따라서 우리가 사용하는 실수나 enum 데이터를 바꿔줘야 하는데 이 과정을 퍼지화(fuzzification)이라고 한다. 당연히 그 반대는 역퍼지화(defuzzification)이다.

 

집합으로 표현하자면

 

일반적인 데이터의 집합 $U$가 있고 어떤 퍼지 집합 $A$가 있다면,  집합 $A$의 값을 $U$에 속한 값으로 바꿔주는 소속 함수(membership function) $ \mu_A : U \rightarrow [0, 1]$ 로 표편할 수 있다. 즉, $x \in U$라면 $\mu_A (x)$는 퍼지 집합$A$에 대한 $x$의 소속도를 의미한다.

 

 

그렇다면 퍼지화의 종류는 무엇이 있을까?

 

 

실수 퍼지화(Numeric Fuzzification)

실수를 소속도로 바꾸는 것으로 가장 흔히 사용되는 기술이다. 캐릭터의 '체력'같은 값을 '건강' 이나 '부상'의 소속도로 바꾸는 것이 여기에 포함된다. 

 

이런 변환은 소속함수(membership function)에 의해 일어난다. 

 

소속 함수(Membership Function)

 

집합으로 표현하면 $A = {(x, \mu_A (x)) | x \in U}$ 이다.

 

 

유한 집합(enum)의  퍼지화

{bronze, silver , gold,  platinum, diamond} 같은 열거형 데이터들은 미리 데이터와 그에 대응하는 소속도에 대한 map을 만들어 두면 된다. 

 

집합으로 표현하면 $A = \{(x, \mu_A (x)) | x \in U\}$ 에서 $U$가 유한 집합인 경우이다.

 

예를 들어 $U = \{bronze, silver, gold, platinum, diamond\}$ 일 때,

 

'게임 실력' 퍼지 집합A 에 대해서 다음과 같이 표현이 가능하다.

$$A = \{(bronze, 0), (silver, 0.2), (gold, 0.3), (platinum, 0.6), (diamond, 1)\}$$

 


더 읽으면 좋은 것 : 

Buckley Eslami. An Introduction to Fuzzy Logic and Fuzzy Sets

Timothy j. Ross : Fuzzy Logic with Engineering Application. Wiley-Blackwell, 4th-edition, 2016

 


참고 : Ian Millington, AI for GAMES 3rd edition, CRC press, [Chapter 5.5]