레플리
글 수 108

퍼지논리를 사용한 속도제어 구현

조회 수 4028 추천 수 0 2016.03.25 02:48:24


K-1.jpg

 

소스코드 및 실행 : 첨부파일

 

 

 

'애매함'을 다루는 퍼지 논리(Fuzzy Logic)

 

기존의 논리는 '참/거짓' 또는 '온/오프", "예/아니오", "부정/긍정"이라는 이분법적인 개념에 기반한다. 하지만 퍼지 논리는 그러한 이분법적인 개념이 아닌 "애매함"을 기반으로 한다. "어느정도"라던가 "얼마나" 같은 말로써 수식되는 것들에 대한 논리인 것이다.

 

예를 들어서 퍼지 논리는 기존의 논리에서는 다룰 수 없는, "상당히 큰", "매우 작은", "중간 정도", "엄청난" 같은 말들로 수식될 수 있는 양 또는 자료를 수학적으로 다룰 수 있게 한다.

 

퍼지 논리를 게임 AI에 적용할 수 있는 가능성은 무궁무진하다. 예를 들어서 NPC의 감정을 흉내내는 데 퍼지 논리를 사용할 수도 있다. 게임의 NPC가 단순히 "화났음",과 "화나지 않았음"이라는 이분법적인 감정을 가지는 것이 아니라, "짜증남", "약간 거슬림", "매우 화남" 같은 애매한 감정을 가질 수 있다면 기존의 "모 아니면 도" 방식의 논리를 사용한 감정 시스템보다 훨씬 더 인간적인 행동을 보일 수 있을 것이다.

 

 

 

퍼지 논리의 개요

 

퍼지 논리의 작동 방식을 설명하려면 기존의 논리가 어떻게 작동하는지부터 되짚어봐야 될 것이다. 기존 논리학은 "깐깐한 집합(crisp set)"을 대상으로 한다. 깐깐한 집합이란 주어진 요소가 집합에 속하거나 속하지 않는 단 두가지 상태만을 가지는 집합을 말한다.

 

예를 들어 5에서 10사이의 모든 실수들을 원소로 하는 M이라는 깐깐한 집합을 생각해 보자. 이는 임의의 실수가 집합 M의 원소이거나 원소가 아니라는 두 가지 상태 중 하나만을 가진다. 즉, 주어진 실수가 5와 10사이에 있으면 집합 M의 특성함수는 1(참)을 돌려주며, 그렇지 않으면 0(거짓)을 돌려준다.

 

깐깐한 집합은 흑백 논리에 대해서는 완벽하게 작동하지만, 실세계에서는 흑백논리를 적용할 수 없는 상황이 더 많다. 예를 들어서 모든 키 큰 사람들의 집합을 만든다고 하자. 180센티를 '크다'라고 결정했다면, 키 큰 사람들의 집합은 "키가 180센티 이상인 사람들의 집합"이라고 정의할 수 있다. 하지만 179센티인 사람인 경우 대부분 키가 크다고 생각하겠지만 여기서 정한 키 큰 사람들의 집합에는 속하지 않는다.

 

이처럼 깐깐한 집합으로는 "대충 이 정도"라는 말로써 집합을 규정할 수 없다. 반면 퍼지 집합에서는 그러한 것이 가능하다. 퍼지 집합에서는 "집합에 속한다"와 "집합에 속하지 않는다" 사이의 분리를 유연하게 만들 수 있다.

 

퍼지 집합의 특성함수는 오직 0 또는 1만을 돌려주는 것이 아니라 0과 1사이의 임의의 실수값을 돌려준다. 이는 집합에 어느정도 속하는가를(소속도) 의미한다. 예를 들어 키 큰 사람들의 퍼지 집합에서 특성함수의 값이 0이면 "크지 않다", 1은 "크다", 0.5는 "어느 정도 크다", 0.01은 "아주 조금 크다"를 의미하게 된다.

 

figure1.jpg

 

 

 

퍼지 논리의 응용 - 퍼지 제어(Fuzzy Control)

 

퍼지 논리를 응용할 수 있는 분야는 다양하지만 그 중 가장 대표적으로 퍼지 제어를 들 수 있다.

 

예를 들어 교통의 흐름에 퍼지 논리를 적용한다고 하자. 도시 경영 시뮬레이션 게임을 만드는데, 작은 차들이 도시 안에서 실감나게 움직이게 하고 싶다. 도로를 따라 늘어선 차들이 마치 진짜 사람이 운전 하고 있는 것처럼 가속하거나 감속하도록 만들어야 한다. 즉 어떤 차도 앞 차의 뒤를 받지 말아야 하며, 각 차들은 앞 차와 적당한 거리를 유지할 수 있어야 한다.

 

이러한 교통흐름 제어를 퍼지 논리로 모델링 하는 것은 다음과 같다.

 

첫 번째로 , 퍼지 논리에서 고려해야할 언어 변수(linguistic variable)을 설정한다. 여기서는 두 차 사이의 "거리"와 두 차 사이의 "거리변화", 두 가지 변수면 충분하다.

 

두 번째로, 실제 도로 상의 차들을 자세히 관찰한 결과로 앞에서 정한 언어 변수 사이의 규칙을 결정한다.

 

figure2.jpg

 

세 번째로, 거리와 거리변화를 설명하는 데 사용하는 모든 용어들로부터(언어 변수) 실제 수치적인 계산을 위해 사용하는 퍼지 집합들을 만들어 낸다. 여기서는 "거리", "거리변화" 그리고 그에 따른 차의 "행동"에 대해 각각 다섯 개의 퍼지 집합들을 만든다.

 

figure3.jpg
figure4.jpgfigure5.jpg

 

이제 이렇게 만든 퍼지 시스템을 이용해서 어떻게 차의 속도제어를 수행하는지 살펴보자. 특정 시점에서의 어느 한 차의 앞차와의 거리가 1.3, 앞 차와의 거리변화가 0.25라고 하자. 이때 이에 속하는 "거리"와 "거리변화" 집합의 소속도를 구하면 다음과 같이 각각 두 개의 집합에 속함을 알 수 있다.

 

figure7.jpg

figure8.jpg

 

위의 그래프처럼 거리값이 1.3일 때는 "작음"에 0.75, "완벽"에 0.1이 속하고, 거리변화값이 0.25일 때는 "안정"에 0.6, "증가"에 0.3의 소속도를 갖는 것을 알 수 있다.

 

현재 거리와 거리변화에 값에 속하는 집합들의 규칙을 미리 설정해 놓은 퍼지규칙에서 찾아보면 다음과 같이 모두 4개의 규칙들이 가능하다. 각 규칙들의 참인 정도는 두 퍼지 집합의 AND연산을 적용해서 양쪽 모두를 만족할 수 있는 가장 큰 값으로 결정한다. 예를 들어 거리가 작고(0.75) 거리변화가 증가(0.3)이라면 0.75 AND 0.3 = 0.3이 규칙의 참 정도가 된다.

 

figure6.jpg

 

이제 마지막으로, 이렇게 얻은 결과로부터 하나의 최종적인 값을 얻어야 하는데 이러한 방법을 역퍼지화(defuzzification method)라고 한다. 역퍼지화 방법에는 여러 가지가 있는데 여기서는 단순하게 가장 참 정도가 높은 규칙을 선택하였다.

 

역퍼지화 결과로 나온 최종 규칙은 "거리가 작고 거리변화가 안정"이고 퍼지규칙에서 이에 따른 행동은 "감속"임을 알 수 있다. 여기에 참 정도가 0.6이므로 현재 차의 속도는 speed -= (speed/2)*(0.6)으로 계산할 수 있다.

 

이러한 과정을 모든 차들에 대해 적용하면 도로를 일렬로 달리는 차들이 매우 현실적인 방식으로 적절히 속도를 변화시키는 모습을 볼 수 있을 것이다.

 

 

 

[참고자료]

    - Game Programming Gems 1권, p.416 ~ p.428
    - 인공지능 개념 및 응용, 도용태, 사이텍미디어, p.97 ~ p.123

List of Articles
제목 글쓴이 날짜 조회 수
초지능이 우리의 신이 된다면? 깊은바다 2020-08-12 203
인공지능 시대의 재테크 방법 깊은바다 2020-06-15 360
딥마인드, 알파고 영화 무료로 공개 깊은바다 2020-03-16 725
튜링테스트와 중국어 방의 역설 깊은바다 2020-01-28 363
산업혁명 시대처럼 새로운 일자리가 생겨날 수 있을까 깊은바다 2020-01-13 198
인공지능 설계 순서 깊은바다 2020-01-12 1511
요슈아 벤지오, 딥러닝에 인과관계가 필요 깊은바다 2019-12-31 451
딥러닝의 3대 선구자, 요슈아 벤지오 인터뷰 깊은바다 2019-12-23 613
인공지능 발달해도 의식 가진 컴퓨터 못 만든다 file 깊은바다 2019-11-13 338
초지능을 막을 수 있는 방법 - 스튜어트 러셀 깊은바다 2019-10-11 341
얀 르쿤과 요슈아 벤지오, 초지능에 대한 설전 깊은바다 2019-10-07 731
인공지능 관련 테드(TED) 강연 목록 file 깊은바다 2019-10-05 4026
인공지능과 엔트로피 깊은바다 2019-09-18 1576
신입사원의 한숨을 덜어줄 기술, RPA 깊은바다 2019-09-15 392
인공지능은 인간을 차별하는가? 깊은바다 2019-08-28 173