[실용적 예제로 본 게임 인공지능 프로그램하기] 7-2. 퍼지 논리 활용
이번 포스트에서는 퍼지 논리가 게임에 어떻게 활용되는지에 대해 다룰 것 입니다.
퍼지언어변수
퍼지언어변수(fuzzy linguistic variable, FLV)란 어떤 개념이나 영역을 질적으로 표현하기 위해서 한 개나 그 이상의 퍼지 집합을 합하는 것입니다.
다음과 같은 집합이 있을 때,
DISTANCE = { very near, near, medium, far, very far }
다음과 같은 그래프로 나타낼 수 있습니다.
여기서 그래프의 모양은 게임 기획자와 프로그래머가 머리를 맞대고 정해야 하는 것 입니다. 저자는 이 과정이 중요한 과정이라고 말합니다.
퍼지 규칙
퍼지 규칙은 선행자(antecedent)와 후항(consequent)로 구성됩니다.
사용 예는 다음과 같습니다.
IF target_isFarAway AND target_isNormal THEN Chase_Target_Fast
여기서 후항은 Chase_Target인데, 후항의 소속정도(DOM)은 후항이 발화하는 정도를 정의합니다. 퍼지 추론은 전형적으로 많은 이러한 규칙으로 구성되고, 규칙의 수는 문제영역에서 요구하는 FLV의 수와 그 FLV가 포함하는 멤버십 집합의 수에 비례합니다.
퍼지 시스템이 규칙집합에서 계산될때마다 발화된 후항들을 결합시키고, 그 결과를 역퍼지와(Defuzzify)하여 전통적인 값을 도출하게 됩니다.
이 규칙이 "추적 상태를 위한 규칙집합 디자인"에 쓰이는 것이라면 주황색 글자 부분은 target의 위치와 상태를 나타내게 되며 파란색 글자 부분은 선행자의 결과에 따른 후속 행동이라고 보면 되겠습니다. 규칙의 개수는 디자인에 따라 다르며 매우 많을수도, 매우 적을수도 있을 것 입니다.
각각의 규칙 집합들이 있을 때(방어구 상태를 나타내는 규칙집합, 무기 상태를 나타내는 규칙집합, 상대와의 거리를 나타내는 규칙집합 ...), 프로그래머는 각각의 상태를 상수 형태로 받게 될 것입니다. 이때 각각의 집합의 FLV 그래프에서 그 상수에 대응되는 "선행자"를 얻게 됩니다.이 선행자에 맞는 규칙을 찾을 것이고, 찾은 규칙들의 후항을(즉, 추론 결과를) 하나의 단일 퍼지 복합으로 결합시켜야 합니다.
단일 퍼지 복합으로의 결합
Target 의 거리와 Ammo의 상태에 따른 규칙들에, 어떤 상황에서 얻은 상수(ex. distance_to_target = 200, ammo status = 8)를 대입한 결과 다음과 같은 표의 값을 얻었다고 한다면,
Target_Close
|
Target_Medium
|
Target_Far
| |
Ammo_Low
|
Undesirable
0
|
Desirable
0.2
|
UnDesirable
0.2
|
Ammo_Okay
|
Undesirable
0
|
VeryDesirable
0.67
|
UnDesirable
0.33
|
Ammo_Loads
|
Undesirable
0
|
VeryDesirable
0
|
Desirable
0
|
베이지색 칸은 발화한 규칙을 나타냅니다.
즉 다음과 같은 표는 상수(ex. distance_to_target = 200, ammo status = 8) 값을 모든 규칙에 적용시킨 추론 결과를 리스트 합니다.
후항
|
신뢰도
|
Undesirable
|
0.33
|
Desirable
|
0.2
|
VeryDesirable
|
0.67
|
우리는 다음과 같은 소속함수를 미리 가지고 있습니다.
빨간색 선은 신뢰도에 따라 소속함수를 절단한 것을 나타냅니다.
각각의 그래프를 빨간 선에 맞게 절단하면 다음과 같은 그래프를 얻을 수 있습니다.
이것이 단일 퍼지 복합으로 결합시키는 것 입니다.
역퍼지화
역퍼지화는 퍼지화의 역 입니다.
즉 어떤 퍼지 집합을 하나의 전통적인 값으로 변환시키는 과정을 말합니다. 이를 위한 많은 방법이 있는데, 가장 보편적인 방법은 다음과 같습니다.
- 최대값 평균(MOM)
- 중심점
- 최대값들 평균(MaxAv)
1. 최대값 평균
이 방법은 가장 높은 신뢰도를 갖는 결과값들의 평균을 계산합니다. 위 단일 퍼지 복합 그래프에서는 VeryDesirble이 가장 높은 신뢰도를 가졌으며 최소 0.66에서 1.00의 값을 가졌습니다. 이때 x축은 66~100 사이이고 평균은 (66+100)/2 = 83 입니다.
이 방법이 갖는 문제점은 결과에서 가장 높은것에 동등한 신뢰도를 갖지않는 집합을 고려하지 않는다는 것 입니다.(undesirable, desirable 집합이 그렇습니다.)
2. 중심점
중심점 방법은 가장 정확하지만 계산하기 가장 복잡합니다.
이것은 결과집합의 질량중심을 결정함으로써 작동합니다.
퍼지복합의 중심점은 그 복합을 s개의 샘플점에서 자른 다음 각 샘플점에서 DOM의 전체에 대한 기여도의 합을 구한다음, 샘플들의 DOM합으로 나눈 것 입니다.
위 수식에서 vi 는각 샘플점에서의 값이며 u(vi)는 그 값의 FLV에서의 소속 정도를 나타냅니다. 계산을 위해 샘플점을 더 많이 나눌수록 결과는 더 정확해집니다.(하지만 10~20개면 충분하다고 합니다).
위 단일 퍼지 복합 그래프에서 중심점을 구하는 도표는 다음과 같습니다.
값
|
Undesirable
|
Desirable
|
VeryDesirable
|
합
|
10
|
0.33
|
0
|
0
|
0.33
|
20
|
0.33
|
0
|
0
|
0.33
|
30
|
0.33
|
0.2
|
0
|
0.53
|
40
|
0.33
|
0.2
|
0
|
0.53
|
50
|
0
|
0.2
|
0
|
0.2
|
60
|
0
|
0.2
|
0.4
|
0.6
|
70
|
0
|
0.2
|
0.67
|
0.87
|
80
|
0
|
0
|
0.67
|
0.67
|
90
|
0
|
0
|
0.67
|
0.67
|
100
|
0
|
0
|
0.67
|
0.67
|
분자를 계산하면
10 * 0.33 + 20 * 0.33 + ... + 90 * 0.67 + 100 * 0.67 = 334.8
분모를 계산하면
0.33 + 0.33 + 0.53 + ... + 0.67 = 5.4
분자를 분모로 나누면 값이 주어집니다.
바람직함 = 334.8 / 5.4 =62
이 방법에서의 바람직함은 62 입니다.
최대값들 평균(MaxAv)
어떤 퍼지 집합의 최댓값 또는 대표값(representative value)은 그 집합에서 멤버십 값이 1 입니다. 삼각형 집합에서는 그저 단순히 중간에 있는 값이고, 다른 모양에서는 집합의 시작과 끝에있는 값들의 평균 입니다.
이 최대값들 평균 역퍼지화 방법은 각 후항의 대표값을 그것의 신뢰도로 조정하고 다음과 같이 평균을 취합니다.
바람직함 = ∑ 대표값 x 신뢰도 / ∑ 신뢰도
결과 복합을 구성하는 대표값이 아래 표에 요약되어 있습니다.
설정
|
대표값
|
신뢰도
|
Undesirable
|
12.5
|
0.33
|
Desirable
|
50
|
0.2
|
VeryDesirable
|
87.5
|
0.67
|
이 값들을 등식에 대입하면
바람직함 = 12.5*0.33 + 50*0.2 + 87.5*0.67 / 0.33 + 0.2 + 0.67 = 72.75 / 1.2 = 60.625
즉, 60.625의 바람직함을 갖습니다.
이 방법은 정교하지만 계산비용이 높은 중심점 방법으로 계산된 중심점 방법으로 계산된 값과 가까운 값을 도출하므로 각자의 게임에 맞는 상황에 따라 어떤 방법을 선택할지 선택하면 되겠습니다.
지금까지 상수(ex. distance_to_target = 200, ammo status = 8) 값이 주어졌을 때, 퍼지집합으로, 추론으로, 그리고 다시 어떤 무기를 사용할지(가령, 화염방사기)에 대한 바람직함을 나타내는 값을 얻어내는 과정을 살펴 보았습니다.
이 과정을 화염방사기 뿐 아니라 모든 무기들에 대해 반복한다면(레일건, 샷건, 기관총 등) 가장 높은 바람직함을 가진 무기가 있을것이고, 그 무기를 선택하면 되겠습니다.
이상으로 포스팅을 마치겠습니다.
댓글
댓글 쓰기