프로그래밍 2016. 9. 9. 18:33
728x90
퍼지 (Fuzzy) 프로그래밍 - 1

 

 

간만에 프로그래밍 이론에 필을 받아서, 책을 보고서 정리해 보았다

요즈음 이러한 것과는 다른 작업들을 하고 있으니,

프로그래머로서의 기질이 발동한 것일까?

 

정리하는 김에, 추후 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,

가중치가 클수록 정확도가 높다)

 

퍼지에서는 여러개의 결과값이 도출될수 있기 때문에,

최종적으로 하나의 값만을 도출해 내고 싶다면,

위와 같이 가중치를 구해서, 가장 큰 가중치를 가진 값범위에 매칭된 결과값을

취할수 있다.

 

다음장에서는

위의 설명을 구현한, 소스코드를 살펴 보자.

 

 

728x90
posted by BK dddDang
: