Play With AI > Chapter 2. 인공지능의 전통적인 접근법

[심화하기] 엔트리로 동물 추론 프로그램 만들기

 논리적 추론과 분류 프로그램 만들기 (2)
1. 프로그램 개요


시작하기에 앞서, 이 프로그램의 전체 개요를 먼저 살펴보겠습니다. 이 프로그램은 ‘인트로’와 ‘메인’ 두 개의 장면으로 구성되어 있습니다. 각 장면에서는 다음과 같은 일이 수행됩니다.

지금부터 엔트리를 사용하여 논리적 추론을 통해 부엉이, 고슴도치, 고양이, 독수리, 상어, 판다를 추론하는 프로그램을 만들어 보겠습니다.

1.1 장면1-인트로
인트로 장면에서는 다음과 같은 오브젝트들이 사용됩니다.
 

이 중에서 코딩이 들어가는 오브젝트는 ‘다음’ 글상자와 ‘엔트리봇’입니다. 부엉이, 고슴도치, 고양이, 독수리, 상어, 판다 오브젝트에는 따로 코딩을 위한 블록이 조립되지 않습니다. ‘다음’ 글상자와 ‘엔트리봇’ 오브젝트가 수행하는 일은 다음과 같습니다.

 
‘특징 1~5’는 이 프로그램에서 사용되는 변수입니다. 이 프로그램에서는 다음과 같은 변수들을 사용합니다.

 
1.2 장면2-메인

메인 장면에서는 다음과 같은 오브젝트들이 사용됩니다.

이 중에서 코딩이 들어가는 오브젝트는 ‘다음’ 글상자와 ‘엔트리봇’입니다. 부엉이, 고슴도치, 고양이, 독수리, 상어, 판다 오브젝트에는 따로 코딩을 위한 블록이 조립되지 않습니다.





각 오브젝트가 수행하는 일은 다음과 같습니다.

 


2. 엔트리로 추론 프로그램 만들기

이제 본격적으로 프로그램을 만들어봅시다.

[STEP 1] 인트로 장면의 오브젝트 블록 살펴보기

 

 1) 엔트리 공유주소 http://naver.me/5w5F9uKr 에 접속한 후, 코드보기를 클릭합니다.  





<인트로 장면의 ‘엔트리봇’ 오브젝트>

 2) 첫 번째 ‘인트로’ 장면의 엔트리봇 오브젝트는 다음과 같이 블록이 조립되어 있습니다. 먼저 특징 1부터 특징5까지의 값을 2로 정하여 초기화합니다. 이후에 특징1~5에는 사용자의 응답에 따라 0, 1, 또는 n 값이 저장됩니다.


<인트로 장면의 ‘다음’ 오브젝트>

 3) 인트로 장면의 ‘다음’ 글상자에는 다음과 같은블록이 조립되어 있습니다. 프로그램을 시작한 뒤 ‘다음’ 글자를 누르면 다음 장면이 시작됩니다.


[STEP 2] 메인 장면의 오브젝트 블록 살펴보기

<메인 장면의 ‘다시실행 버튼’ 오브젝트>


4) 이제 ‘메인’ 장면으로 넘어갑시다. 먼저 ‘다시실행 버튼’ 오브젝트를 클릭하면 프로그램이 초기화되고 ‘메인’ 장면이 다시 시작됩니다.





<메인 장면의 ‘?’ 오브젝트>

5) 이번에는 메인 장면의 ‘?’ 글상자 오브젝트를 봅시다. ‘?’ 오브젝트는 엔트리봇의 질문에 대해 사용자가 정답을 잘 모를 때 클릭합니다. 사용자가 질문을 받은 뒤 이 오브젝트를 클릭하면, ‘현재 답변’ 변수에는 ‘n’이 저장되고, ‘질문번호’ 변수에 1을 더 합니다.


<메인 장면의 ‘x’ 오브젝트>

 6) 이어서 ‘x’ 오브젝트를 보겠습니다. ‘x’ 오브젝트는 엔트리봇의 질문에 대해 사용자가 ‘아니오’라고 선택할 때 클릭합니다. 이 오브젝트를 클릭하면 ‘현재 답변’ 변수에는 ‘0’이 저장되고, ‘?’ 오브젝트와 마찬가지로 ‘질문번호’ 변수에 1을 더합니다.


<메인 장면의 ‘o’ 오브젝트>

 

 7) 다음으로 ‘o’ 오브젝트를 보겠습니다. ‘o’ 오브젝트는 엔트리봇의 질문에 대해 사용자가 ‘예’라고 선 택할 때 클릭합니다. 이 오브젝트를 클릭하면 ‘현재 답변’ 변수에는 ‘1’이 저장되고, ‘질문번호’ 변수에 1을 더합니다.



[STEP 3] 엔트리봇 오브젝트 살펴보기

<메인 장면의 ‘엔트리봇’ 오브젝트>

8) 이제 엔트리봇 오브젝트 차례입니다. 먼저 장면이 시작되었을 때, 다음과 같이 변수들을 초기화 합니다. 또 사용자에게 질문을 한 뒤, ‘입력_관찰된 것’이라는 신호를 보냅니다.




<메인 장면의 ‘엔트리봇’ 오브젝트>

 9) 엔트리봇 오브젝트에 코딩을 계속하겠습니다. ‘입력_관찰된 것’ 신호를 받았을 때, 먼저 ‘맞으면 O, 아 니면 X, 모르겠으면 ?를 클릭하세요. 정답은 딱 한번만 클릭해주세요’라고 말을 합니다. 그리고 ‘질문번호’가 1일 때, ‘다리가 4개인가요?’를 묻습니다. 그리고 사용자의 답변이 담긴 ‘현재 답변’ 변수의 값을 ‘특징1’ 변수에 저장합니다. 이어서 ‘특징1’의 값이 1이라면, (즉 다 리가 4개라면) 다음 질문으로 가시가 있는지를 묻고 답변을 ‘특징2’에 저장합니다. 그렇게 저장된 ‘특징2’의 값이 1이면 다음 질문으로 넘어가고, 그렇지 않으면 채식 동물인지를 묻고 답변을 ‘특징3’에 저장합니다. ‘특징1’ 의 값이 1이 아닌 경우에도 같은 방법으로 진행하여 ‘특징4’와 ‘특징5’의 값을 저장합니다.



 


<메인 장면의 ‘엔트리봇’ 오브젝트>

 10) 위의 코드에 덧붙여, 다음과 같이 특징1~5의 값을 합쳐 ‘관찰된사실’ 변수에 저장합니다. 그리고 ‘추론하기’ 신호를 보냅니다.








<메인 장면의 ‘엔트리봇’ 오브젝트>

 11) 이어서 ‘추론하기’ 신호를 받았을 때, 관찰한 사실과 지식베이스에 저장된 사실을 비교하여 어떤 동물인지를 추론하는 과정을 아래와 같이 코딩합니다.





 

원리를 간단히 설명하면 관찰된 사실에 저장된 특징 1~5의 값과 지식베이스의 값을 비교하여, 일치하는 개수가 몇 개인지를 계산합니다. 그런 다음 일치하는 개수가 가장 많은 ‘동물 번호’를 ‘추론결과’로 출력합니다. (동물 번호: 고슴도치(1), 판다 (2), 고양이(3), 부엉이(4), 독수리(5), 상어(6))


<메인 장면의 ‘엔트리봇’ 오브젝트>

 12) 이제 추론 결과에 따라 신호를 보내고 정답에 해당하는 동물 오브젝트의 모양이 나오도록 블록을 조립할 차례입니다. ‘추론결과’ 값이 1이면, 동물 번호 1에 해당하는 고슴도치가 정답이라는 의미입니다. 따라서 ‘고슴도치’ 신호를 보내고, ‘고슴 도치군요!’라는 말을 합니다. 이와 같은 방법으로 빈칸을 채워보세요.











13) 마지막으로 신호에 따라 다음과 같이 독수리 오브젝트의 모양을 바꿉니다. <메인 장면의 ‘독수리’ 오브젝트> 

  

  

  

  

  

  



프로그램에 대해 이야기해봅시다.
 

Q. 이번 시간에 만든 작품이 어떻게 구성되어 동작하는지 친구에게 설명해봅시다.

Q. 작품을 만들면서 어떤 생각이 들었나요?