2.3 추상화 다루기


지금까지 중요한 특성을 식별하여 실제 세상의 개체를 표현하는 추상화를만드는 방법을 알아보았다. 또한 추상화가 프로그래밍 언어로 “코딩(coded)”될 수 있고, 그로 인해 컴퓨터와 프로그래머간의 의사소통이 가능하다는 것을 보았다. 이제 이러한 추상화가 어떻게 조작될 수 있는지 볼 것이다. 먼저 프로그래밍 언어에서 "코딩"을 통해 추상화를 다루어 볼 것이다. 거북이 생태학적 모델에서, 거북이와 잔디 패치의 시뮬레이션을 생성하는 코드를 볼 수 있다.

"알고리즘은"은 어떤 목표를 달성하기 위해 정밀하게 정의된 절차를 의미한다. 우리는 "컴퓨터 알고리즘"; 즉, 컴퓨터가 목표를 달성하기 위한 정확하고 직접적인 과정에 관심이 있다. “컴퓨터 알고리즘”이라는 용어가 더 자세한 표현이지만, 앞으로 나오는 “알고리즘”이라는 용어가 컴퓨터에 대한 알고리즘이라는 것을 알고 있을 것이므로, “알고리즘”이라는 더 간단한 표현을 사용할 것이다.

앞으로 보겠지만, 컴퓨터 알고리즘은 단순하고 기본적인 네 가지 능력으로 구성 된다:

  • 계산(Calculation) - 논리 연산을 수행 할 수 있는 능력
  • 순차(Sequence) - 순서대로 단계를 수행 할 수 있는 능력
  • 선택(Decision) - 둘 중 하나를 선택 할 수 있는 능력
  • 반복(Iteration) - 어떤 행동을 반복 할 수 있는 능력

컴퓨터는 위와 같은 능력을 가지고, 매우 빠르게 수행될 수 있도록 설계되었다.

프로그래밍의 창의성은 간단한 블록을 사용하여 음악 플레이어, 웹 검색기, 가상현실, 비행 조종, 주식결재, 등 상상할 수 있는(그리고 아마도 상상할 수 없는) 컴퓨팅 시스템을 만들기 위한 것이다. 경험을 통해 배우게 될 것이지만, 컴퓨터 알고리즘은 반드시 정확해야 하기 때문에 창의성을 발휘하는 것은 어렵다. 이것은 모든 가능한 조건에서 정확해야한다는 것을 의미한다. 가능한 모든 조건을 발견하고 정확하게 처리하는 것은 쉬운 일이 아니다. 그러나 그것을 배울 수는 있다.

컴퓨터가 따르는 알고리즘은 프로그래밍 언어로 작성된다. 이미 프로그래밍 언어가 추상화의 속성들을 표현할 수 있는 것을 봐왔다. 구체적으로 말하면, NetLogo 프로그래밍 언어에서 에이전트의 속성과 시뮬레이션의 전역변수(global properties)가 표현되는 방법을 학습하였다. 이제 알고리즘이 프로그래밍 언어에서 어떻게 표현될 수 있는지 볼 것이다. 앞서 언급 한 바와 같이, NetLogo는 많은 프로그래밍 언어 중 하나의 언어임을 알고 있어야 한다. 나중에 알고리즘을 표현할 수 있는 두 개의 다른 언어를 볼 것이다.


 

Multiple Choice 알고리즘에 대한 설명으로 틀린 것은?



 

Multiple Choice 알고리즘에 4가지 능력 중 틀린 것은?






2.3.1 계산

연산은 알고리즘의 기본적인 부분을 이해하기 위한 가장 쉬운 방법이다. 연산을 수행하는 컴퓨터의 기능은 컴퓨터가 더 빠르고 실수를 하지 않는 것을 제외하고는 인간의 능력과 동일하다. 컴퓨터는 숫자 작업에 정말 좋다. 프로그래밍 언어는 산술 연산의 전체 배열을 포함한다 : +, -, *, and /, 괄호와 함께

모든 계산은 3 가지 요소가 포함 된다: 수학적 결과 값의 생성, 결과 값으로 설정된 속성 값, 연산으로 식별되는 특정 기호. NetLogo에서, 연산문은 아래와 같이 일반적인 형식을 갖는다:

set property result

NetLogo에서 "set"은 이 문장이 연산문이라고 식별하는 키워드이다. "property"는 에이전트의 속성 또는 전역 변수의 이름이다. 마지막으로, "result"는 수학식의 계산결과이다. 연산은 속성 값을 결과 값으로 설정한다.

연산의 가장 간단한 형태는 초기화이다. 초기화의 경우, 속성은 미리 결정된 특정 값으로 설정 된다. 값은 대부분 간단한 상수이다. 거북이 생태학 모델에서 초기화의 예는 다음과 같다.

set age 0

거북이의 나이 속성을 0으로 설정하는 연산이다. 이 연산은 모델의 설정 작업의 일부분으로써 수행된다. 목표는 모든 거북이가 "어린" 거북이로 시작하는 것이다. 이와 유사한 초기화로,

set energy 2

거북이의 에너지 속성을 간단한 상수로 설정 한다.

연산의 또 다른 종류는 업데이트이다. 체크카드를 사용하여 물건의 구매 비용을 지불했을 때, 현재 총액에서 구매 비용을 차감하여 카드 잔액은 업데이트 된다. 생태학 모델에서 거북이가 움직였을 때, 에너지는 소비된다. 따라서 거북이의 에너지 속성은 업데이트 된다. 이 업데이트를 NetLogo 코드에서 보면:

set energy energy - 1

이 연산문은 거북이의 에너지 속성을 이전 값보다 한 단위 적게 설정한다. 더욱 기계적으로 말하자면, 에너지 속성의 현재 값을 얻고, 이 값으로 부터 1이 차감되고, 차감된 결과는 에너지 속성의 새로운 값이 된다. 같은 방식으로 거북이 나이 속성은 시간 속성 값이 1단위 증가하면 반드시 업데이트 되어야 한다. NetLogo 코드는 다음과 같다.

set age age + 1

이 연산문은 거북이의 나이 속성을 이전 값보다 1 단위 증가시킨 값으로 설정한다. 더 기계적으로 말하자면, 현재 나이 속성의 값을 얻고, 이 값에 1이 더해지고, 결과는 나이 속성의 새로운 값이 된다.

연산은 수학적으로 더 복잡해 질 수 있다. 무료 가스라는 이름의 GasLab (화학 및 물리학 섹션에서 NetLogo 모델 라이브러리) 모델에는 이러한 계산이 있다:

set energy (0.5 * mass * (speed ^ 2))
set heading (theta - (atan v2l v2t))

연산은 더 복잡해졌지만, 형식은 여전히 같다.

일부의 경우에서는, 연산이 분리되면서 더 복잡해진다. . GasLab Free Gas 모델은 아래와 같은 코드를 가지고 있다.

let vcm (((mass * v1t) + (mass2 * v2t)) / (mass + mass2) )
...
set v1t (2 * vcm - v1t)
set v2t (2 * vcm - v2t)

첫 번째 연산은, "let" 키워드로 시작하고 "vcm"의 값으로 일시적인 값을 연산한다. “vcm”값은 이후의 두 개 연산문에서도 각각 사용된다.

 

 

Multiple Choice 'set value 3.14'의 의미는?



 

Multiple Choice '시간이 흐름에 따라 ‘시간(time)’속성의 값을 증가시키려한다. 증가 값은 1로 한다.'
위의 문장을 나타내는 연산문을 골라라.



 

Multiple Choice
set number1 2*3   ------------------1)
set number2 (number1-1)*2 ----------2)
위의 결과 값은?





2.3.2 순차

올바른 순서로 일을 정리하는 것이 중요하다. "말 앞에 카트를 놓아"와 "준비, 발사, 조준"과 같은 말은 전형적인 순서의 중요성을 보여준다. 문장 안에서 단어의 순서를 섞으면 올바른 말이 될 가능성이 없다. 위에서 본 예시도 마찬가지 이다.


.../_images/Cart-Before-Horse.png
그림 2-22. The Impotance of Order

프로그램에서 단계의 순서도 똑같이 중요하다. 바로 위의 코드가 간단한 예를 보여준다. 코드에서, VCM에 대한 값은 계산되고 이 값은 v1t와 v2t의 값을 계산하는데 사용된다. 이 코드에서 v1t와 v2t를 계산하는 단계 다음에 vcm의 계산을 위한 단계로 순서를 재 배열하는 것은 분명히 잘못된 결과를 가져온다.

컴퓨터는 실행되는 코드에서 주어진 단계들의 순서를 따르도록 설계된다. 코드가 다른 단계를 지시하지 않는 한, 컴퓨터는 다음 줄의 코드를 가져와서 실행시킬 것이고, 계속해서 다음 줄의 코드를 가져와서 실행시킬 것이다.

 

 

Multiple Choice
set number1 2*3   ------------------1)
set number1 2  ---------------------2)
set number2 (number1-1)*2 ----------3)
위의 결과 값은?





2.3.3 선택

프로그램이 아무리 간단한 문제라도 잘 처리할 수 있게 하려면, 일반적으로 수행의 대안을 선택할 수 있도록 해야한다. 즉, 프로그램은 변화되는 상황에 행동을 결정해야 한다. 사람들은 항상 변화하는 환경에 적응한다. 아래 교통 표지판의 이미지를 고려해 보자. 이 표지판은 합법적인 운전 조건에 적합하도록 운전(행동)을 어떻게 해야하는지 운전자에게 알려준다. 표지판이 나타내는 방법 중 하나는 "빛이 깜박이는 경우, 제한 속도는 15마일/시간."이라는 것이다. '만약 ... 그렇다면 ...'이라는 형식의 표현은 코딩을 하는 사람이 컴퓨터가 변화하는 환경에 적응할 수 있는 능력을 작성하는 코드를 제공하는 것이다.


.../_images/School-Sign-Simple-Decision.png
그림 2-23. A Traffic Control Sign

마찬가지로 간단한 생태계 모델에서 에이전트는 상황에 따라 행동을 변화시키는 규칙이 있다. 또한 이러한 규칙은 "만약 ... 그렇다면 ..."이라는 구조에 맞춰져 있다. 간단한 생태 모델에서 거북이 규칙의 하나는 에너지가 주어진 한계점 이상인 경우에만 번식할 수 있다는 것이다. 아래는 NetLogo 코드이다 :

if energy > birth-energy [
set number-turtles number-turtles + 1
set energy energy - birth-energy
; other steps here but not shown
]

이 코드는 번식을 위해 지정된 한계점(예를 들어, 출생 에너지)을 초과하는지 여부, 즉 일정한 조건을 확인하기 위해 거북에게 지시한다. 조건이 사실인 경우, 거북이와 프로그램은 지정된 조치를 취하며 거북이는 출생 에너지에 의해 자신의 에너지 수준을 줄이고, 거북이 한 마리가 이전 거북이 수에 더해지게 (출생) 된다. NetLogo 프로그래밍 언어에는 "그렇다면"라는 단어는 표시되지 않지만 그 의미는 NetLogo에 암시되어 있어 주의해야한다.
일반적으로, NetLogo 의사 결정의 형식은 다음과 같다.

if condition [
list of actions
]

에이전트가 "조건“이 참임을 발견 한 경우, 에이전트는 괄호에 주어진 액션의 목록을 실행하는 것을 의미한다. 조건이 참이 아닌 경우, 액션의 목록은 실행되지 않는다. if와 괄호는 NetLogo 프로그래밍 언어의 "구문"의 일부이다. 괄호를 일치시키기 위해 괄호를 생략하거나 잊는 것은 NetLogo 불평을 야기하게 되므로 주의한다. - 혹은 보다 나쁘게, 단순히 당신이 의도 한 것 이외의 규칙을 실행한다.

 

Multiple Choice
if condition {
        list of actions
}
위의 설명으로 틀린 것은?



 

Multiple Choice
if race = Asian {
if BMI<18.5 or BMI>23.0
       (set state abnormal)
}
위의 설명으로 틀린 것은?





2.3.4 반복

반복해서 같은 동작을 반복하는 것은 자연과 사람들이 구축 한 시스템에서 공통적으로 발생하는 문제이다. 모든 사람들에게, 심장이 반복적으로 뛰는 것과 폐가 반복적으로 호흡하는 것은 삶에 중요하다. 엔진 내부의 연소와 증기에서 피스톤의 반복적인 움직임은 동력을 기계적인 에너지의 소스로 제공한다. 반복해서 동일한 단계를 수행 할 수 있는 능력은 대부분의 컴퓨터 사용에 중요하다. 프로그래밍 언어에서, "반복"은 종종 프로그램의 일부 단계의 반복 수행을 처리하기 위한 코딩을 설명하는 데 사용된다.


.../_images/NetLogo-Iteration-Sign.pn
그림 2-28. Caution: Iteration Ahead

 

정확히 동일한 일을 단순히 반복하는 것은 큰 의미가 없다. 예를 들어, "2+2"를 계속 반복해서 계산하라는 것은 정말 의미가 없다. 반복을 강력하게 만드는 것은 같은 단계들이 계속해서 반복 실행된다는 것이다, 그리고 각각의 반복에서 서로 다른 데이터가 사용되어 반복 작업이 수행되게 된다.
여기서 본 책에서 다루는 비슷한 종류의 문제인 다른 데이터를 이용한 동일한 단계들을 반복하는 패턴을 볼 수 있다. 다음의 예를 보자.

 

  • NetLogo에서, 모델의 실행은 반복해서 하나의 시뮬레이션 단계를 실행하는 것을 포함하지만, 각각의 단계 데이터는 (즉, 에이전트의 특성) 몇 가지 방법에서 다르다. 예를 들어, 에이전트가 새 위치로 이동했을 수 도 있고 또는 특정 잔디 패치가 거북이에 의해 없어질 수도 있다.

 

  • NetLogo 모델의 시뮬레이션 단계에서, 각 에이전트 (거북이)는 규칙을 수행하고 설정된 조건에 따라 속성을 업데이트 하지만 다른 에이전트의 속성과 다른 에이전트가 보는 환경은 다른 행동으로 이어질 수 있다. 예를 들어, 어떤 거북이는 아마도 번식할 수 있는 에너지 레벨을 가지고 있고 또 다른 거북이는 번식할 수 있는 에너지 레벨을 가지고 있지 않을 수 있다. 첫 번째 거북이는 확실히 번식하지만, 두 번째는 하지 않는다. 마찬가지로, 하나의 거북이는 잔디 패치에 있을 수 있고 잔디를 먹고 에너지를 증가 시킬 수 있는 반면 다른 에이전트는 잔디가 없는 패치에 있어서 잔디를 먹을 수 없고 에너지를 증가 시킬 수 없다. 각각의 경우에, 규칙은 동일하지만, 데이터의 차이 (에이전트와 환경의 속성)는 다른 행동을 초래한다.

 

  • "빅 데이터"스트림 작업에서 (나중에 설명할 것이다), 동일한 단계는 일반적으로 데이터의 각 부분에 적용된다. 예를 들어, 데이터 스트림들 중 하나는 세계 어딘가에서 각각 발생한 지진의 데이터를 갖는다. 지진은 진도와 지진이 발생한 곳의 위치에 의해 설명된다. 특정 위치에서 발생한 가장 큰 지진을 찾으려면, 우리는 이 테스트를 사용할 수 있다 : "원하는 위치에서 지진이 발생했는지, 그 위치에서 우리가 지금까지 본 지진보다

     

    Multiple Choice 위 그림 2-31의 흐름도에 대한 설명으로 틀린 것은?



     

    Multiple Choice 'foreach t in turtles (turtle-actions)'의 의미로 옳지 않은 것은?



     

    Multiple Choice
    ask turtles { ; apply this rule to all turtles one at a time
    right random 360
    forward 1
    set energy energy - 1
    set age age + 1
    } 
    위의 코드를 해석한 것으로 옳지 않은 것은?





    2.3.5 선택과 반복

    의사결정과 반복이 어떻게 표현되는지, 그리고 따로 사용할 수 있으며, 함께 사용될 수있는 방법의 사례를 보았다. 두 컴퓨팅 구조의 조합은 의사결정의 선택성과 반복의 강력한 장점을 갖는 프로그램을 작성할 수 있게 해준다.


    의사결정과 반복의 조합으로 간단한 예는 온도 데이터에서 최고 온도를 찾는 작업이다. 데이터 집합 내의 각각의 온도를 조사 할 필요가 있기 때문에 명확하게 반복 알고리즘을 필요로 한다. 만약 조사되지 않는 하나의 온도가 있었다면, 그 온도가 실제 최대 온도인 경우가 될 수 있다. 알고리즘은 또한 검사되는 현재 온도가 지금까지 반복에서 볼 수 있는 온도보다 큰지 여부에 관한 결정을 할 필요가 있다. 의사결정 및 반복을 결합한 알고리즘의 흐름도 표현은 다음 같다.


    .../_images/Combining-Decision-Iteration-Flow-Chart.png
    그림 2-34. Combining Decision and Iteration

     

    이 알고리즘의 논리는 각 반복 단계에서, 속성 "current-max"는 지금까지 본 가장 큰 값을 가진다. "temp"는,이 반복에 대한 현재 온도 값이, 지금까지 본 최대 값보다 큰 경우, "current-max"는 "temp"로 설정된다. 반복이 시작되기 전에 "current-max"가 0으로 초기화되는 것을 알 수 있다. 이 초기화는 첫 번째 반복에서 의사결정이 가능하도록 하기위해 테스트 순서에서 필수적이다. (모든 온도는 0보다 높다고 가정한다.)

     

    Multiple Choice 위 그림 2-34의 흐름도를 해석한 것으로 옳지 않은 것은?



Leave a Reply

Your email address will not be published. Required fields are marked *

*