본문바로가기
[코딩수학] 코딩으로 '네트워크' 정복하기
수학동아 2019.12.24 10:07 조회 2742

2020년을 맞아 새롭게 돌아온 '코딩 수학'!

다들 코딩을 이용해 수학 문제를 효율적으로 풀고 계신가요? 간단한 수학 문제는 손으로도 풀고 코딩으로도 풀 수 있지만, 실생활 문제나 어렵고 복잡한 함수가 포함된 수학 문제는 손으로 풀기 어려운 경우가 많아요. 코딩을 활용하면 쉽게 해결할 수 있으니 열심히 익히고 활용해 보세요~. 

코딩 명령어를 익힌 뒤에는 해당 코딩 명령어로 풀 수 있는 수학 문제를 찾아 댓글로 달고 친구들과 토론해 보세요!

 

 

 

 

다양한 관계를 나타내고 분석하는 ‘네트워크’ 

 

 

이번에 코딩으로 정복해 볼 수학 개념은 ‘네트워크’예요. 네트워크는 앞의 코딩수학 4번째 시간에서 다뤘던 '그래프 이론'에서 시작되었어요.

그래프는 단순히 연결만 된 것이 아니라 관계를 나타내기 위하여 화살표로 표시되는 방향을 가지는 그래프를 그릴 수 있는데, 이를 유향 그래프(digraph)라고 합니다. 또, 이러한 관계에 대하여 얼마만큼의 영향력 또는 비용이 발생하고 있는지에 대하여 구체적인 수치로 나타낼 수도 있으며, 이를 가중치(weight)라고 하죠. 가중치를 가지는 유향그래프가 바로 '네트워크'입니다. 응용수학 분야에서는 ‘가중 그래프’라고도 불러요. 

네트워크를 수학적으로 분석하고 활용한 대표적인 사람은 제2차 세계대전 중에 원자력 연구를 위한 맨해튼 프로젝트에 참여한 것으로도 우리에게 잘 알려진 유명한 미국 수학자 존 폰 노이만(John von Neumann)입니다. 노이만은 여러 관계들을 체계적으로 연결짓고 수학적으로 다루었으며 또한 이를 응용하여 현재 우리가 사용하고 있는 디지털 컴퓨터의 구조 모델(폰 노이만구조, CPU와 메모리를 활용)도 만들었어요. 알고리듬을 배울 때 반드시 나오는 ‘순서도’를 최초로 만들어서 사용한 사람도 바로 존 폰 노이만이에요. 

 

 

네트워크를 체계적으로 연구한 수학자 존 폰 노이만(1903~1957).

 

이 뿐만 아닙니다. 노이만은 다양한 현실의 문제들을 수학으로 설명하는 수학적 모델링을 통해 경제학에도 큰 기여를 하였는데요, 경제학자 오스카 모르겐슈테른와 함께 공동 연구를 진행해 개인의 전략적 상황에서의 행동을 수학적으로 설명하는 ‘게임 이론’을 경제학에 도입한 개척자기도 합니다. 경제학에서 그 중요성은 이루 말할 수가 없을 정도로 큰데요. 지금까지 8명의 게임이론학자들이 노벨 경제학상을 수상하였으며, 그 중에는 영화 ‘뷰티풀마인드’로 우리에게 잘 알려진 수학자 존 내쉬(John F. Nash)도 있습니다.

이러한 다양한 관계를 수학적으로 나타내는 네트워크는 처음에는 사람들간의 관계를 나타내는 것에서부터 사용되다, 현재는 경제학·사회학 뿐이 아니라 컴퓨터를 활용하는 모든 분야에서 광범위하게 쓰이고 있어요. 특히 21세기에 들어와서 복잡계 네트워크에 대하여 연구가 활발히 진행되어 생물학에도 적용되고 있으며 또한 인공지능에 사용되고 있는 인공신경망(Artificial Neural Network, ANN)에도 적용되고 있습니다.

이번 호에서는 코딩 명령어를 이용해 여러 지점을 오갈 때 드는 비용을 네트워크로 만들고 비용이 가장 적게 드는 경로를 찾아보도록 해요!

 

 

 

 

.

.

.

.

.

 

 

풀지 말고 코딩하라! 

네트워크

 

명령어의 구조를 이해한 뒤 아래 코딩창에 명령어를 입력해 비용이 가장 적게 드는 경로를 찾아보자. 

 

 

 

<1> 명령어 살펴보기

 

점 a와 점 b를 잇고 가중치를 준다. 예를 들어 점 0과 점 1을 잇고 두 점 사이의 12의 가중치를 주고 싶으면 [ (0, 1, 12) ]를 입력한다. 이렇게 모든 변을 [와 ] 안에 쉼표로 구분해 입력한다.

 

[ (a, b, 가중치) ]

 

 

❷ G라고 이름 붙인 네트워크에서 A 지점에서 출발해 D 지점까지 가는 경로 중 가중치의 합이 최소가 되는 경로를 표시한다.

 

G.shortest_path(‘A’, ‘D’,  by_weight=True)

 

 

 

※ 함께 알아두기  

❶ DiGraph() 보통의 그래프에 방향과 가중치를 추가하는 명령어. 만약 그래프의 이름이 G면 G=DiGraph()를 입력한 뒤 유항 그래프로 만들고 싶으면 괄호 사이에 edge를, 가중치를 표시하고 싶으면 weighted = True를 입력한다. 둘 다 표시하려면 두 명령어를 쉼표로 구분해 입력한다.

 

❷ G.show()  그래프 G를 그림으로 출력해주는 명령어. 가중치가 있으면 괄호 사이에 edge_labels = True을 입력해야 변마다 가중치가 나타난다.

 

  

 

 

<2> Sage에서 명령어 실행하기

 

 

 

 

 

 

<3> 도전 문제

 

아래 그림은 인공지능 연구에 사용되는 인공신경망을 나타낸 네트워크다. 각 점에 알파벳 순으로 이름 붙인 뒤 코딩 명령어를 이용해 네트워크로 나타내보자. 또, 주변에서 네트워크 관련 명령어로 풀 수 있는 문제를 찾고 답을 구해보자.

 

 

 

 

-끝-

 

 

 

  •  
    je Lv.1 2019.12.24 15:31

    오늘도 굉장히 유익한 내용이네요!! 인공신경망을 나타낸 네트워크를 이용한 코딩이 참 흥미로워요ㅎㅎ

    댓글 작성하기 좋아요0 댓글수0
  •  
    이용현 Lv.1 2019.12.24 15:37

    AI가 유행인데 그와 관련된 네트워크 이론을 잘 설명해주셔서

    이해가 잘 되는것 같습니다.

    앞으로도 AI와 같은 내용을 써주셔도 좋을것 같아요.

    댓글 작성하기 좋아요0 댓글수0
  •  
    mswgen Lv.5 2020.02.10 19:43

    유익한 내용 감사드립니다 그런데 마지막 input hidden output을 해보니까 나오긴 하는데 모양이 이상하게 나오는 건 원래 그런가요?

    댓글 작성하기 좋아요0 댓글수0
  •  
    muse Lv.6 2020.03.11 08:20

    이름 보고 놀랐는데, 정말 다행히도 네트워크 플로우가 아니네요.

    최단거리 알고리즘의 동작 방식에 대해서 언급해도 괜찮을 것 같습니다. (유방향 가중치 그래프이니 다익스트라겠죠?)

    댓글 작성하기 좋아요0 댓글수0
  •  
    joy0225 Lv.1 2020.05.03 18:47

    정말 유익한 글이네요

    댓글 작성하기 좋아요0 댓글수0
  •  
    (하늘)라임 Lv.9 2020.06.04 22:22

    오 도움 많이 됬습니다 감사합니다

    댓글 작성하기 좋아요0 댓글수0
  •  
    곤충사랑 Lv.3 2020.12.29 11:48
    확인요청중

    흥미로워요~

    댓글 작성하기 좋아요0 댓글수0
  •  
    노윤혁 Lv.2 2021.02.25 11:26
    확인요청중

    와우!

    댓글 작성하기 좋아요0 댓글수0
  •  
    팝잇 ㅋㅋㄹㅃㅃ Lv.1 2021.07.29 20:16

    ...........................................................

     

    댓글 작성하기 좋아요0 댓글수0
  •  
    INTP 공돌이 Lv.1 2021.10.06 16:17

    이걸로 영재원 연구 주제를 삼아도 괜찮을 것 같네요!

    유익한 글

    댓글 작성하기 좋아요0 댓글수0
  • 폴리매스 문제는 과학기술진흥기금 및 복권기금의 재원으로 운영되고, 과학기술정보통신부와 한국과학창의재단의 지원을 받아 수행된 성과물로 우리나라의 과학기술 발전과 사회적 가치 증진에 기여하고 있습니다.

  • ☎문의 02-6749-3911