[실용적 예제로 본 게임 인공지능 프로그램하기] 7-1. 퍼지 논리 개요
"사람들은 모호한 언어 규칙을 사용해서 단순하게, 그리고 정화하게 기술을 전달할 수 있는 놀라운 능력을 가지고 있다."
- 두 조각의 빵을 중간 두께로 자른다.
- 번철의 열을 높게 올린다.
- 빵조각 표면이 금갈색이 될 때까지 굽는다.
- 빵조각을 뒤집고 치즈를 듬뿍 올린다.
- 치즈의 위쪽이 약한 갈색이 될 때까지 굽는다.
- 번철에서 꺼내어 소량의 검은 후추를 뿌린 후 먹는다.
굵게 표시된 단어들은 모두 모호한 언어용어 이지만 사람들은 모두 이 지침을 따를 것 입니다.
컴퓨터 게임을 위한 AI를 디자인 할 때 비슷한 방법으로 컴퓨터와 연락할 수 있는 것, 즉 사람 영역에 있는 전문지식을 빠르고 단순하게 디지털 영역으로 대응시키는 것은 대단하지 않은가? ... (본문 중 발췌)
퍼지 논리란?
위의 글처럼, 사람들은 모호한 단어를 자연스럽게 해석합니다. 하지만 컴퓨터는 기본적으로 그렇게 할 수 없습니다. 모호한 단어는 지극히 독자 주관적으로 해석이 되는 것이기에 그렇습니다. 만약 골프공을 퍼팅할 때, 공이 홀에서 멀 때, 가까울 때 등 퍼팅하는 방법은 다를것 입니다. 0~5m를 가까울 때, 5m~ 를 멀 때라고 가정한다면, 4.99m는 가까울 때 일까요, 아니면 멀 때일까요? 보통 사람이라면 4.99m쯤 되면 멀 때라고 가정하고 퍼팅을 할 것입니다.이를 정도의 문제(matter of degree) 라고 합니다.
우리는 이산(discrete) 구간으로 컴퓨터를 해석하기 때문에 컴퓨터는 4.99m는 가까울 때라고 할 것입니다. 멀 때, 가까울 때 이런 개념은 이산 구간에서는 불가능 하지만, 퍼지논리에 의하면 퍼지화(fuzzification)이라는 과정에 의해 가능해 집니다. 퍼지화된 값을 사용하면 컴퓨터는 언어규칙을 해석할 수 있고 퍼지로 남는 결과를 생산하거나, 역 퍼지화 과정을 통해 분명한 상수값을 전달할 수도 있습니다.
언어규칙을 해석하는 것은 퍼지논리의 다양한 응용중 하나일 뿐이며, 게임 인공지능은 언어규칙을 해석하는 것을 많이 사용합니다. 퍼지논리는 패턴 인식, 관계 데이터베이스, 데이터분석을 포함한 많은 분야에서 사용됩니다. 특히 가정에서 중앙난방을 조절하거나 비디오카메라에서 영상을 안정화 시키는데에서 사용된다고 합니다.
전통적인 집합
전통적인 집합은 우리가 학교에서 배워왔던 이산적인 집합을 의미합니다.
이 때, 전체집합 U에 속해있는 모든 원소의 영역을 UOD(Universe of discourse)라고 부릅니다. 어떤 수의, 어떤 집합에 대한 소속 정도(degree of membership, DOM) 는 참이거나 거짓, 1 또는 0 입니다. 한 원소는 두개 이상의 집합에 속해있을 수도 있습니다. 그 원소는 집합 A와 B에대해 DOM은 모두 1입니다.
퍼지 집합
위에 설명한 집합은 정도의 문제가 발생할 수 있습니다.(골프공의 거리) 이 부분이 바로 전통적인 집합이 실패하는 부분입니다.
하나의 퍼지 집합은 소속함수(membership function)으로 정의됩니다. 이 함수는 모든 모양이 가능하지만 전형적으로 삼각형이거나 사다리꼴 입니다.
아래 그림은 IQ를 나타내는 언어용어 Dumb = {70~89}, Average(90~100}, Clever{110~129}를 나타내는 삼각형 소속 함수로 구성된 퍼지 집합 입니다. 어떤 사람이 115의 IQ를 지녔다면 0.75의 정도로 Clever라고 판단될 것입니다.
이 Clever함수의 퍼지집합은 다음과 같이 나타낼 수 있습니다.
Clever(this_agent) = Fclever(115) = 0.75
퍼지 집합 연산자
퍼지집합의 교집합, 합집합, 여집합은 전통적 집합에서처럼 가능합니다.
교집합 AND는 다음과 같이 사용합니다.
수식은 다음과 같습니다.
FAverage&Clever(x) = min{FAverage(x), FClever(x)}
합집합은 AND는 다음과 같이 사용합니다.
수식은 다음과 같습니다.
FAverage | Clever(x) = max{FAverage(x), FClever(x)}
경계
경계(hedge)는 퍼지집합의 의미를 변경시키기 위해서 사용할 수 있는 단항 연산자 입니다. 보편적으로 사용되는 두 개의 경계는 Very와 Fairly 입니다.
퍼지집합에 대해 Very는 다음과 같이 변경시킵니다.(제곱시킵니다.)
Fvery(A) = (FA(x))²
퍼지집합에 대해 Fairly는 다음과 같이 변경시킵니다.(제곱근을 취합니다.)
Ffairly(A) = sqrt(FA(x))
그래픽을 통해 보면 더 잘 알수 있습니다.
이번 포스트에서는 퍼지 논리의 개요와 기본 연산에 대해 알아보았습니다.
다음 포스트에는 퍼지논리가 실제로 어떻게 게임에 적용되는지에 대해 알아보도록 하겠습니다.
댓글
댓글 쓰기