Andrew Ford 헌정 강의: 『Modeling the Environment』 Chapter 3 - 연습 문제 9 “왜 유출 유량(Flow)은 저량(Stock)의 크기에 좌우될까?” 그리고 ±Stock의 필요성
문제 요약
Exercise 3.9에서는 Figure 3.2에 나오는 성숙(maturation), 노화(aging), 사망(deaths) 유량들을 살펴봅니다. 이 유량들은 모두 “어떤 저량을 감소시키는(flows that drain a stock)” 역할을 하며, 각 유량에 액션 커넥터(action connector)가 연결되어 있습니다. 즉, 저량(Stock)의 크기가 유량(Flow)을 결정한다는 관계를 보여 주는데, 문제는 “왜 이런 패턴이 잘 구성된 모델에서 당연히 기대되는가?”를 설명하라고 요청합니다.
1. 문제 상황: 유량이 저량을 빠져나갈 때, 왜 저량 크기가 중요할까?
- Figure 3.2 예시: 인구 모델에서,
- Young population → (maturation) → Mature population
- Mature population → (aging) → Elderly population
- Elderly population → (deaths) → (제외 혹은 구름으로 빠짐)
이 세 가지 유량은 각각 이전 저량을 감소시키는 역할을 합니다. 따라서, 저량 크기에 따라 “유량이 얼마나 클지”가 달라지는 것은 자연스러운 논리입니다.
예) “젊은 집단(young population)이 아무도 없다면, 성숙해서 중년으로 넘어가는 사람도 없을 것” 이라는 해석.
2. 시스템다이내믹스의 기본 원칙: “유량(Flow)은 저량(Stock)에 달려 있다.”
시스템다이내믹스에서 잘 설계된 모델이라면, 다음이 거의 필연적으로 성립합니다.
만약 어떤 유량이 특정 저량에서 빠져나가는(flows out) 역할을 한다면,
- 그 유량은 저량의 크기에 의해 결정(또는 크게 영향을 받음)되어야 한다.
- 저량이 0이라면(사람이 0명, 물이 0리터, 자금이 0달러), 당연히 유출 유량은 발생할 수 없음.
이런 구조를 액션 커넥터(action connector)로 표현
- 소프트웨어(Stella, Vensim 등)에서 Stock → Flow로 이어지는 화살표는 “저량 크기에 따라 유량이 결정된다”는 뜻.
- 문제에서 말하는 “각 흐름에는 저량으로부터 액션 커넥터가 연결”이 그 예시임.
3. 왜 “잘 구성된 모델”이면 이런 패턴이 필연적인가?
현실성
- 물리·생태·사회 시스템을 보면, “0개에서 유출될 수 있는 양은 0”이라는 직관적 사실이 있습니다.
- 예: 사람이 한 명도 없으면 노화·사망 유량이 발생할 리 없음.
수학적·구조적 일관성
- 유량은 보통 “저량 × 어떤 율(rate)” 형태
- 만약 저량이 0이라면, 유량 계산 결과도 0이 되어야 자연스럽습니다.
정책·관리적 해석
- 인구 모델에서, 어린 집단이 많을수록 성숙을 통한 중년층 유량이 커짐.
- 중년층이 많을수록 노화 유량이 커짐.
- 노인층이 많을수록 사망 유량이 커짐.
- 이는 현실과 부합하므로, “좋은(현실적인) 모델”이라면 이렇게 설계하는 것이 맞습니다.
4. 한 마디로 정리
문제에서 묻는 “왜 이런 패턴이 당연히 기대되는가?”에 대한 답변은:
“저량에서 유출되는 유량이 저량 크기에 영향을 받는 건, 실제 세계에서도 ‘해당 집단(또는 물질)’이 많을수록 그 집단을 떠나거나 사라지는 양(유출 유량)도 비례적으로 늘어나기 때문” 이라고 볼 수 있습니다.
즉, ‘유량 = f(저량)’ 구조가 모델링의 기본이며, “Drain(유출)”하는 유량이라면 해당 Stock이 없을 때(0) 유출이 있을 수 없다는 점이 매우 당연하므로, **‘액션 커넥터’**로 연계해 주는 것이 필수적입니다.
결론
Exercise 3.9에서 강조한 바:
- 성숙(maturation), 노화(aging), 사망(deaths) 유량처럼 저량을 줄이는 흐름은, 반드시 그 저량의 크기에 달려 있어야 한다.
- 이는 “거기에 존재하는 만큼만 빠져나갈 수 있다”는 현실을 반영한, 시스템다이내믹스 모델의 핵심 논리입니다.
이러한 연결 패턴을 통해, 실제 시스템(인구든 자원이든)에서 “해당 집단(저량)이 클수록 유출량(유량)도 커지게 되는” 현상을 자연스럽게 시뮬레이션할 수 있다는 점이 “잘 구성된 모델”의 특징이라고 말할 수 있습니다.
그런데 말입니다.
1. Non-Negative Stock: 편리하지만 함정일 수 있다
- 장점: SD 소프트웨어가 “이 저량은 음수가 되면 안 돼!”라고 미리 알려 주기 때문에, 음수 값을 자동으로 차단해 주어, 해석상 편리할 수 있습니다.
- 문제점: 실제 모델에서 “음수가 될 리 없는” 저량(예: 인구, 생물 개체 수, 긍정적인 자원량 등)이라도, 우리가 실수로 잘못된 방정식·파라미터를 넣으면 음수가 발생할 수도 있습니다.
- 만약 Non-Negative Stock을 사용하면, 소프트웨어가 음수를 강제 차단해 주므로, 잘못된 구조나 매개변수를 사용했음을 놓치기 쉽습니다.
2. ±Stock을 쓰면 “오류 감지”가 쉬워진다
- 많은 SD 전문가(Stella 개발자 포함)는 “굳이 Non-Negative를 쓰지 말고, ±Stock을 써라”라고 조언합니다.
- 이유: 실제로는 음수가 될 수 없는 값이 음수가 나와 버리면, 그것은 모델링에 심각한 문제가 있음을 알려 주는 경고입니다.
- 예: 인구(절대로 음수가 될 수 없음)가 모델 결과에서 -50만 명이 된다면, 이는 방정식이나 유량 설정이 틀렸다는 걸 즉시 알 수 있습니다.
- Non-Negative Stock이면 이런 잘못을 소프트웨어가 “0 이하로 내려가지 않게” 자동 보정해 버리므로, 사용자가 오류를 알아차리기 어렵습니다.
3. 결론: 실수(오류)를 더 빨리 찾고 싶다면 ±Stock
- 오류 감지 관점에서, “비음수(Non-Negative)를 강제”하기보다는, ±Stock으로 두고 모델이 음수를 계산해 버리면, “아, 내가 뭔가를 잘못 설정했구나!” 하고 빠르게 인지할 수 있습니다.
- 모델링 초기 단계에서는 특히나 경계 조건(boundary conditions)이 확실히 잡히지 않은 경우가 많기 때문에, 오류를 조기 발견하는 쪽이 훨씬 낫습니다.
한마디 정리
“Non-Negative Stock은 당장 편리할 수 있지만, ‘잘못된 설정’을 소프트웨어가 은근히 숨겨 줄 위험이 큽니다.
반면 ±Stock을 쓰면, 실제로는 음수가 될 수 없는 저량이 음수가 되면, 그 즉시 ‘어딘가 문제’가 있음을 알게 해 주죠.
바로 이 점 때문에 대부분 SD 전문가는 “음수가 불가능한 저량이더라도 굳이 Non-Negative를 활성화하지 말고, ±Stock을 써서 모델 구조나 파라미터 오류를 조기에 잡아내라”라고 권장합니다.
댓글
댓글 쓰기