여러분, 안녕하세요~!
4월호 수학동아 다들 잘 받아보셨나요? 이번 4월 호 기획 기사는 개미에 얽힌 수학 이야기입니다.
살아있는 생물을 이용한 실험은 조건을 바꾸는 것이 어렵다고해요. 그래서 이럴 때는 시뮬레이션을 쓰죠.
‘만약 개미가 이렇게 움직이면 어떻게 될까?’라는 의문이 떠오른다면, 나머지 조건을 동일하게 두고 원하는 조건만 바꿔서 결과를 예측하는 거예요.
모형을 정확하게 세웠다면, 개미들의 움직임을 파악할 수 있다는 것이죠.
그래서 수학동아 여러분과 ‘파이썬’이라는 코딩 언어로 간단한 시뮬레이션을 해보려고 해요.
같이 무작위로 걷는 개미가 어떻게 먹이를 찾는지 알아볼까요?
이 시뮬레이션을 위해서는 ‘numpy’라는 라이브러리가 꼭 필요하기 때문에, ‘Spyder’와 같은 프로그램을 이용해서 코딩을 하는 걸 추천해요!
위의 내용만 봐서는 너무 어렵다고요? 코드를 알려드릴테니 한 줄씩 차근차근 같이 해봐요!
import numpy as np import matplotlib.pyplot as plt import matplotlib; matplotlib.use('Qt5Agg')
dev = 1 # 이 부분이 표준편차입니다.
d0 = np.random.rand() # 각도를 저장하는 행렬입니다. N = 500 v = 0.2 dir = np.zeros([N, 1]) dir[0] = d0
p = np.zeros([N, 2]) # 위치를 저장하는 행렬입니다. p[0, 0] = v * np.cos(d0) p[0, 1] = v * np.sin(d0)
r = 1; xL = -8; yL = 8; pi = np.pi th = np.linspace(0, 2 * pi, 20) th = np.append(th, 0) xunit1 = r * np.cos(th) + xL yunit1 = r * np.sin(th) + yL plt.plot(xunit1, yunit1, 'r')
xL = 1.5;yL = -1.5 xunit2 = r * np.cos(th) + xL yunit2 = r * np.sin(th) + yL plt.plot(xunit2, yunit2, 'r') plt.text(-1, 0, 'Nest', fontsize=12) plt.xlim([-10, 10]) plt.ylim([-10, 10]) plt.rcParams["figure.figsize"] = (5, 5)
for i in range(1, N): vari = np.random.normal(0, dev, 1) while abs(vari) > pi / 2: # 각도가 +90도, -90도를 벗어나면 각도를 다시 설정합니다. vari = np.random.normal(0, dev, 1) dir[i] = dir[i - 1] + vari; p[i, 0] = p[i - 1, 0] + v * np.cos(dir[i]) p[i, 1] = p[i - 1, 1] + v * np.sin(dir[i])
if p[i, 0] < -10: p[i, 0] = -10 + v / 2 if p[i, 0] > 10: p[i, 0] = 10 - v / 2 if p[i, 1] < -10: p[i, 1] = -10 + v / 2 if p[i, 1] > 10: p[i, 1] = 10 - v / 2
X = p[i-1:i + 1, 0] Y = p[i-1:i + 1, 1] plt.pause(0.01) plt.plot(X, Y, 'b', linewidth=0.5) plt.xlim([-10, 10]) plt.ylim([-10, 10]) |
이제 시뮬레이션을 통해 개미가 어떻게 움직이는지 확인해봅시다!
참고로, '표준편차'를 다른 숫자로 설정하면, 개미의 움직임이 다소 달라지는 것을 확인할 수 있습니다.
개미가 방향을 바꾸는 경향성이 달라지게 되는 것이죠!
그렇다면 표준편차가 커질 때와 작아질 때, 개미의 경로는 어떻게 달라질까요?
댓글로 그 결과를 남겨주세요~!
궁금한 점도 같이 댓글로 남겨주세요~! 안녕~!