간만에 프로그래밍 이론에 필을 받아서, 책을 보고서 정리해 보았다
요즈음 이러한 것과는 다른 작업들을 하고 있으니,
프로그래머로서의 기질이 발동한 것일까?
정리하는 김에, 추후 AI 에 사용하려고 클래스화를 해두고,
'실습예제로 쉽게 설명한 인공지능 게임 프로그래밍 - 저자 신용우'
를 참고로 하였다
퍼지를 간단하게 설명해 보자면( 나의 이해한도 안에서 )
보통의 엄격한 값범위 체크에서 나올수 있는 하나의 결과물을
- if( a < b )
- 등의 값체크 방식을 떠올리면 되겠다,
느슨한 값범위의 지정으로, 여러개의 결과물을 도출해 낼수 있는 방법이라고 말할수 있다,
- fuzzy 라는 단어의 뜻 자체가 두리뭉실한 경계를 뜻한다
좀더 디테일하게 설명해 보자면,
int a = 1 대신,
int a = 0 ~ 2 라고 표현을 하는 것이다,
물론 프로그램언어 안에서는 0~2 와 같은 식으로 값을 지정하는 문법이 없으니,
int a[2] = { 0, 2 };
이런식으로, 배열을 이용해서 값범위를 지정해 줄수 있다.
만약, 시드값 x 를 인수로 넣었을때 x 가 해당하는 범위에 대한 결과값을
구하고 싶다고 하자
int a[2][2] = { 0, 2,
1, 3 };
x = 2 라고 할때,
x 는 a[0][0] ~ a[0][1] 값범위에도 해당하고
x 는 a[1][0] ~ a[1][1] 값범위에도 해당한다,
따라서 두개의 결과를 얻을수 있다.
미리,
a[0][0] ~ a[0][1] 값범위에 특정한 값 A 를 매칭시켜 놓고,
a[1][0] ~ a[1][1] 값범위에 특정한 값 B 를 매칭시켜 놓았다면,
x 라는 시드값에 해당하는 값 A와 값 B 를 얻을수 있는 것이다
또한,
영역에 대한 가중치를 구해볼수 있는데,
a[0][0] ~ a[0][1] 값범위에서는 0 ~ 2 -> 1 이 중심값
a[1][0] ~ a[1][1] 값범위에서는 1 ~ 3 -> 2 가 중심값
중심값에 대한 거리로서 가중치 (0 ~ 1) 를 구해본다면,
x 가 2일때
a[0][0] ~ a[0][1], 0 ~ 2 안에서는 중심값에 대해서 가중치 0
a[1][0] ~ a[1][1], 1 ~ 3 안에서는 중심값에 대해서 가중치 1
과 같이 생각해 볼수 있다
(중심에 가까울수록 가중치가 크고, 최대 1,
가중치가 클수록 정확도가 높다)
퍼지에서는 여러개의 결과값이 도출될수 있기 때문에,
최종적으로 하나의 값만을 도출해 내고 싶다면,
위와 같이 가중치를 구해서, 가장 큰 가중치를 가진 값범위에 매칭된 결과값을
취할수 있다.
다음장에서는
위의 설명을 구현한, 소스코드를 살펴 보자.
'프로그래밍' 카테고리의 다른 글
환경매핑 - 실시간 큐브맵 만들기, 풀씬 복사 (0) | 2016.10.07 |
---|---|
퍼지 (Fuzzy) 프로그래밍 - 2 (0) | 2016.09.09 |
오브젝트 바닥 충돌 처리 (3) | 2016.04.18 |
흑백 쉐이더, 그레이 쉐이더 (0) | 2016.03.30 |
obb 충돌 구현 2 (0) | 2016.02.18 |