International Essays |
완전히 새로운 게임의 판도: Wolfram 언어 14.2의 게임 이론
완전히 새로운 게임의 판도: Wolfram 언어 14.2의 게임 이론
2025년 2월 25일
Marc Vicuna, 커널 개발자, 알고리즘 R&D
경쟁 상황에서 최적의 결정을 내리고 싶으신가요? 경쟁적 맥락을 분석하고, 그 결과를 예측하고, 역경에 맞서는 전략과 계획을 세운 뒤 그 효과를 검증할 필요가 있으신가요? 아니면 단순히 대학에서 필수 과목으로 지정된 게임 이론 수업을 공부하느라 고군분투 중이신가요?
게임 이론의 역사 게임 이론은 원래 단순한 확률 게임에만 국한되어 있었습니다. 이러한 게임에는 몇 가지 공통적인 특징이 있습니다. 한 번에 두 명의 플레이어만 참여하며, 한쪽이 이기면 다른 한쪽은 지거나, 양쪽 모두 아무런 보상을 받지 못하는 구조입니다. 이러한 게임은 오늘날 2인용 제로섬 게임(two-player, zero-sum games)으로 알려져 있습니다.
게임 이론을 최적 전략의 정교한 수립이라는 관점에서 정의한다면, 그 기원은 확률 게임만큼이나 오래되었을 수 있습니다. 이러한 초기 분석(그리고 확률 이론!)은 저명한 박식가이자 도박사였던 Girolamo Cardano의 공로입니다. 한편, 게임 이론을 모든 플레이어의 가능한 행동을 바탕으로 게임을 분석하는 이론으로 정의한다면, 그 기원은 1713년 James Waldegrave가 분석한 Le Her 게임으로 거슬러 올라갑니다. 이 게임에서는 미니맥스 전략(minimax strategy) 해법이 제시되었습니다.
물론, 게임은 단순한 오락 그 이상일 수 있습니다. 결국 경제라는 게임만큼 방대한 플레이어층을 가진 게임도 드뭅니다. Antoine-Augustin Cournot는 1838년에 발표한 ‘부의 이론에 관한 수학적 원리에 대한 연구(Recherches sur les principes mathématiques de la théorie des richesses)’에서, 훗날 내시 균형(Nash equilibria)이라고 불리게 되는 가격 경쟁의 해법을 발견했습니다.
하지만 이러한 발견의 대부분은 다소 독립적으로 이루어져 있으며, 현대 게임 이론의 본격적인 출현에 앞선 선구적 발견 정도로 여겨져 왔습니다. 게임 이론은 공식적으로 1944년 John von Neumann의 저서 ‘게임 이론과 경제 행위 이론(Theory of Games and Economic Behavior)’에서 시작됩니다. 이 책에서 “게임 이론”이라는 용어가 처음 사용되었고, 게임 이론의 공리가 확립되어 게임 이론이 하나의 독립된 학문 분야로 자리 잡게 되었습니다. 또한 이 게임 이론의 역사적 개관은 John Nash를 언급하지 않고는 완전하지 않습니다. 내시는 1950년 내시 균형의 존재 정리를 발표하여 게임 이론의 전개를 결정적으로 변화시킨 이정표가 되었습니다.
아시다시피, 이 분야는 그 이후로 엄청난 발전을 이루어 왔습니다. 현대 게임 이론은 의사 결정의 수학으로 요약할 수 있습니다. 게임 이론의 핵심은 인간, 동물, 인공지능 등 다양한 주체가 모든 형태의 경쟁 상황에서 나타나는 플레이어의 행동을 연구하는 데 있습니다. Herbert Gintis는 이를 가장 잘 표현한 바 있습니다.
“게임 이론은 사람들이 경쟁하는 방식뿐만 아니라 협력하는 방식에 관해 다루는 학문입니다... 게임 이론은 행동 양식의 출현, 변화, 확산, 그리고 안정화에 관한 학문입니다.”
행렬 게임: 고양이와 쥐 행렬 게임은 동시 게임이라고도 불립니다. 실제로 이들 게임은 모든 플레이어가 동시에 행동한다는 특징을 가지고 있습니다. 이름에서 알 수 있듯이, 행렬 게임은 행렬을 기반으로 합니다. 좀 더 정확히 말하면, 명의 플레이어가 참여하는 모든 행렬 게임은 차원 배열로 표현할 수 있는데, 여기서 마지막 차원은 모든 플레이어에 대한 보상 벡터를 나타냅니다.
n
n+1
In[]:=
game=MatrixGame[{{1,-1},{-1,1}}]
Out[]=
MatrixGame
이 게임은 제로섬 게임으로, 각 플레이어의 보상을 나타내는 을 보면 이를 확인할 수 있습니다.
In[]:=
game["Dataset"]
Out[]=
|
이 게임에서 승리는 보상값 1을, 패배는 보상값 –1을 사용합니다. 따라서 이 게임에서 두 플레이어의 선택이 일치하면 첫 번째 플레이어가 승리하고, 선택이 일치하지 않으면 두 번째 플레이어가 승리하게 됩니다.
동시 게임은 보통 행렬 형태로 표현되지만, 플레이어 수나 선택 가능한 행동의 수가 많아질수록 행렬은 금세 복잡해지고 읽기 어려워집니다. 이에 따라 저희 팀은 이러한 유형의 게임을 시각화할 수 있는 함수를 개발했습니다.
In[]:=
MatrixGamePlot[game]
Out[]=
MatrixGamePlot과 그 외 관련 함수는 플레이어 수에 관계없이 모든 게임에 적용할 수 있도록 설계되었습니다. 두 명의 플레이어가 참여하는 게임에서는 "SplitSquare" 레이아웃이 보다 직관적일 수 있지만, 세 명 이상의 플레이어가 참여하는 게임은 기본값인 "BarChart"를 사용해 시각화하는 편이 더 효과적입니다.
In[]:=
{MatrixGamePlot[game,PlotLayout->"SplitSquare"],MatrixGamePlot[game,PlotLayout->"BarChart"]}
Out[]=
,
이러한 시각화가 아무리 훌륭하다 해도, 일반적인 그래프만으로는 게임의 배경이나 맥락을 파악하기 쉽지 않습니다. 해석을 쉽게 하기 위해 두 명의 플레이어, 고양이와 쥐를 생각해 봅시다. 고양이는 집 안이나 마당을 수색할 수 있으며, 쥐는 집 안이나 마당에 숨을 수 있습니다. 물론 고양이가 쥐와 같은 장소에 있을 경우 고양이가 승리하고, 반대로 서로 다른 장소에 있으면 쥐가 승리합니다.
이 고양이와 쥐 게임 버전에서는 GamePlayerLabels와 GameActionLabels 옵션을 지정해 주면, 데이터셋과 시각화 결과를 훨씬 더 직관적으로 읽을 수 있습니다.
In[]:=
CatAndMouse=MatrixGame{{1,-1},{-1,1}},;
In[]:=
{CatAndMouse["Dataset"],CatAndMouse["Plot"]}
Out[]=
,
|
물론 고양이는 게으른 동물입니다. 대체로 고양이는 단지 쥐 한 마리를 잡기 위해 굳이 집 (🏠) 밖으로 나가려 하지 않을 가능성이 높습니다. 이 사실을 알고 있는 기회주의적인 쥐라면 언제나 마당 (🌿)으로 가는 전략을 선택하는 것이 더 높은 보상을 얻는 데 유리할 것입니다. 이 전략이 실제로 유리한지를 확인하려면, 쥐는 이 게임과 해당 전략에 함수를 적용해 봐야 합니다. 이 함수는 주어진 전략을 바탕으로 게임의 기대 보상을 계산해 줍니다.
In[]:=
MatrixGamePayoff[game,{{1,0},{0,1}}]
Out[]=
{-1,1}
하지만 고양이가 게으르지 않다면 어떨까요? 어떤 고양이는 신비로운 눈빛을 가지고 있으며, 속을 알 수 없고, 완벽한 포커페이스를 유지합니다. 쥐의 눈에는 이 고양이가 승리를 위해서라면 어떤 일이든 할 것처럼 보입니다. 이런 상황에서 쥐는 자신의 전략을 다시 점검해야 합니다. 전략을 더 견고하고 안정적으로 만들어, 최소한 고양이만큼은 이길 승산을 확보해야 합니다. 쥐는 함수를 사용해, 고양이와 쥐가 각각 집 또는 마당을 선택할 수 있는 가능한 모든 전략 조합을 시험해 보고, 특정 전략이 내시 균형에 해당하는지를 확인합니다. 안타깝게도 실험 결과는 만족스럽지 않습니다. 모든 경우가 불안정하며, 고양이가 우위를 점할 수 있는 가능성이 높아 보입니다.
In[]:=
Table[VerifyMatrixGameStrategy[game,{{cat,1-cat},{mouse,1-mouse}}],{cat,0,1},{mouse,0,1}]
Out[]=
{{False,False},{False,False}}
쥐에게는 아직 마지막 비장의 무기가 하나 남아 있습니다. 바로 함수입니다! 이 강력한 함수는 게임의 해법을 구해주는 도구로, 내시 균형 즉, 어떤 플레이어도 자신의 전략을 바꿀 이유가 없는 상태의 전략 조합을 계산해 줍니다. 이 도구를 사용해 본 결과, 쥐는 구원의 길은 무작위성에 있다는 사실을 깨닫습니다. 균형에 도달하기 위해서는 예측 불가능한 행동이야말로 최고의 전략일 수 있다는 것이죠.
이 전략은 혼합 전략으로, 특정 행동을 선택할 확률이 0이나 1이 아닌 경우를 말합니다. 이 경우 쥐는 동전을 던져서 전략을 결정해야 합니다. 앞면이 나오면 집에 숨고, 뒷면이 나오면 마당으로 가는 식이죠. 중요한 점은, 고양이가 이 전략의 예측 불가능성을 이용해 유리하게 만들 수 없다는 것입니다. 따라서 고양이에게도 최선의 전략은 집과 마당을 50 대 50으로 선택하는 것입니다.
물론, 지금까지 다룬 게임은 다소 비현실적일 수 있습니다. 실제로 쥐는 숨을 수 있는 장소가 훨씬 더 많고, 고양이 역시 수색할 수 있는 장소가 다양할 가능성이 큽니다. 이는 곧 각 플레이어가 취할 수 있는 행동이 두 개 이상이라는 뜻이며, 실제로 이런 구조를 갖는 게임은 많이 존재합니다. 예를 들어 모라 게임에서는 각 플레이어가 50가지의 행동 중 하나를 선택할 수 있습니다. 앞서 소개한 모든 기능은 이와 같은 다수의 행동이 있는 게임에도 모두 확장 가능하며 일반화하여 적용할 수 있습니다.
물론, 한 번에 단 두 명만 참여하는 게임이라면 그리 흥미진진하진 않을 수 있습니다. Wolfram 언어에서는 플레이어 수에 제한 없이 매트릭스 게임을 정의할 수 있습니다. 예를 들어, El Farol Bar 같은 게임도 다수의 플레이어를 포함한 형태로 행렬 게임을 지정할 수 있습니다. 하지만 아무리 상상이라 해도, 그렇게 많은 쥐가 등장하는 상황은 정말 상상하고 싶지 않네요. 그건 정말 최악의 원수에게도 권하고 싶지 않을 만큼 끔찍하겠죠!
식민지가 반란을 일으킬 경우, 해당 국가는 독립을 허용하거나 반란을 진압하는 두 가지 선택지를 갖게 됩니다. 그러나 식민지를 잃는 것은 큰 손실이기 때문에, 각 결과에서 두 번째 보상값(국가의 입장)을 비교해 보면 알 수 있듯이, 국가는 언제나 반란을 진압하는 쪽에 더 큰 이익이 있습니다.
게임 이론적인 관점에서만 보더라도, 이 게임에서 본국이 명백히 유리한 위치에 있음을 쉽게 알 수 있습니다. 트리 게임에서는 종종 마지막에 행동을 취하는 쪽이 유리한데, 이는 최종 보상을 직접 선택할 수 있기 때문입니다. 이 경우에도, 식민지가 어떤 선택을 하든 본국은 반란을 진압하거나 세금을 부과하는 쪽을 선택함으로써 항상 긍정적인 보상을 확보할 수 있습니다.
물론, 트리 게임에서는 단순히 두 번의 연속 행동 이상의 더 많은 행동이 있을 수 있습니다. 예를 들어 Centipede라는 이름의 게임을 생각해 볼 수 있는데, 이 이름이 왜 붙었는지는 저도 아직 잘 모르겠습니다.
트리 게임은 두 명의 플레이어에 국한되지도 않습니다. 예를 들어, 조부인 Zubair가 소유했던 황금 선인장이 그의 가족을 통해 어떻게 상속되는지를 추적하는 상속 게임을 생각해 볼 수 있습니다.
단순히 보상 목록만으로는 게임의 의미나 활용 가치를 파악하기가 상당히 어렵다는 점이 밝혀졌습니다. 각 게임은 저마다의 배경 이야기, 기원, 특이점 그리고 고유한 성질을 가지고 있기 때문입니다. 이에 저희는 사용자가 Wolfram 언어 내에서 잘 정리된 게임을 통해 게임 이론의 풍부함을 직접 탐구할 수 있도록 만들고자 했습니다. 따라서 각 게임에는 누구나 쉽게 이해하고 연구하며 특성을 파악할 수 있는 편리한 기능이 포함되어 있습니다. 예를 들어, 게임에 대한 텍스트 설명을 다음과 같이 확인할 수 있습니다.
문헌에서 해당 게임의 기원에 대해 알아볼 수 있고,
해당 게임이 속한 게임 분류를 확인할 수 있으며,
직접 게임을 플레이해볼 수도 있습니다.
실제로 우리는 이 함수의 문서화에 많은 노력을 쏟았습니다. 예제의 수, 설명의 깊이, 그리고 사소한 기능까지 세심하게 다룬 부분은 일반적인 신기능 출시에 제공되는 문서의 수준을 훨씬 뛰어넘습니다. 이러한 수준의 문서는 여러분이 단 몇 분 만에 게임 이론을 익힐 수 있도록 도와줄 것입니다.
게임에 늦지 마시고, 이 새로운 기능을 직접 사용해 보시기 바랍니다!