- Steve Ballmer의 숫자 맞히기 퍼즐은 1~100 사이 수를 찾는 게임으로, 고정된 이진 탐색은 공략당할 수 있지만 혼합 전략을 쓰면 상대 선택과 무관하게 양의 기대값을 만들 수 있음
- Ballmer는 무작위 선택에서도 기대값이 음수이고 자신이 오래 걸리는 숫자를 고를 수 있다고 봤지만, John Graham-Cumming은 무작위 선택 시 기대값이 $0.20이라고 반박함
- 고정 탐색 패턴에서는 100개 숫자 중 최소 37개가 6번 질문을 요구해 손실을 만들 수 있어, 상대가 전략을 알면 매번 플레이어를 지게 만들 수 있음
- 해결책은 여러 순수 탐색 전략 중 하나를 확률적으로 고르는 게임 이론의 혼합 전략이며, 숫자별 승패 차이를 평균화해 불리한 숫자를 없애는 방식임
scipy.linprog()로 선형계획 문제를 풀어 찾은 예시 전략은 Ballmer가 무작위로 고르면 평균 $0.16, 적대적으로 골라도 최악의 경우 $0.14의 기대 이익을 냄
숫자 맞히기 퍼즐과 기존 반박
- Ballmer가 좋아했다는 퍼즐은 상대가 1~100 사이의 숫자를 생각하고, 플레이어가 추측할 때마다 높거나 낮다고 알려주는 게임임
- 보상은 첫 추측에 맞히면 $5, 이후 $4, $3, $2, $1, $0, 그다음부터는 플레이어가 $1, $2, $3을 내는 방식임
- Ballmer는 두 가지 이유로 이 게임을 하지 말아야 한다고 봄
- 무작위로 숫자를 골라도 손실이 나는 숫자가 많아 기대값이 음수라고 판단함
- 자신이 이진 탐색으로 가장 오래 걸리는 숫자를 전략적으로 고를 수 있다고 봄
- John Graham-Cumming은 “Steve Ballmer’s incorrect binary search interview question”에서 Ballmer가 무작위로 숫자를 고르면 기대값이 $0.20으로 양수라고 반박함
- 여기서 더 나아가, Ballmer가 전략적으로 숫자를 고르는 경우에도 기대값이 양수인 전략을 찾을 수 있음
고정 이진 탐색의 약점
- 플레이어가 항상 같은 이진 탐색 전략을 쓴다면, 100개 숫자 중 37개는 답을 맞히기까지 6번 질문이 필요함
- Ballmer가 그 고정 전략을 알고 있으면 이 37개의 “지는” 숫자 중 하나를 골라 플레이어에게 손실을 강제할 수 있음
- 이런 취약점은 특정 이진 탐색 하나에만 국한되지 않음
- 어떤 고정 탐색 패턴에서도 최소 37개 숫자는 손실을 만듦
- 상대가 그 숫자를 고르면 플레이어는 매번 손실을 봄
혼합 전략으로 대응
- 한 가지 탐색 패턴을 고정하지 않고, 여러 탐색 패턴을 준비한 뒤 게임 시작 시 그중 하나를 확률적으로 뽑아 끝까지 유지함
- 게임 이론에서는 이를 여러 순수 전략에 기반한 혼합 전략이라고 부름
- 같은 숫자라도 어떤 탐색 패턴에서는 이기는 숫자이고, 다른 탐색 패턴에서는 지는 숫자일 수 있음
- 혼합 전략의 목표는 각 숫자별 기대 수익을 평균화해, 모든 숫자에서 기대값이 양수가 되게 만드는 것임
선형계획으로 전략 찾기
- 목표는 최악의 경우 기대값을 최대화하는 최적 전략, 즉 Nash 균형을 구하는 것이 아니라 모든 숫자에서 이기는 임의의 전략을 찾는 것임
- 각 순수 전략은 길이 100의 승리 벡터
V = (v_1, .., v_100)로 표현할 수 있음v_k는 Ballmer가 숫자k를 골랐을 때의 기대 수익임- 예를 들어 이진 탐색은
v_50 = 5,v_25 = 4,v_0 = -1같은 값을 가질 수 있음
- 혼합 전략이 순수 전략
V_k를 확률p_k로 선택하면 전체 승리 벡터는V_mixed = Σ p_i V_i가 됨 - 이기는 전략을 찾으려면 다음 조건을 만족하는 선형결합이 필요함
- 각 원소가 양수여야 함
- 계수는 확률이므로 음수가 아니어야 함
- 이는 전형적인 선형계획 문제이며, SciPy의
scipy.optimize.linprog로 풀 수 있음 - 여러 이진 탐색 변형을 순수 전략 집합으로 만들고
scipy.linprog()에 넣은 코드에서 이기는 혼합 전략이 나옴
예시 전략과 결과
- 전체 코드는 gukoff/ballmer_puzzle에 있음
- 초기 결과는 게임당 $0.07였고, Arthur O’Dwyer가 새로운 순수 전략을 추가해 성과를 개선함
- 개선된 혼합 전략의 성과는 다음과 같음
- Ballmer가 무작위로 고를 때 평균 이익: $0.16
- Ballmer가 적대적으로 고를 때 최악의 이익: $0.14
- 예시 혼합 전략은 여러 이진 탐색 변형을 작은 확률로 섞음
- 확률 0.4714%: 첫 추측 29, 이후 구간의 가운데를 추측하고 동률이면 왼쪽 선택
- 확률 0.1691%: 첫 추측 33, 이후 가운데를 추측하고 동률이면 왼쪽 선택
- 확률 0.1299%: 첫 추측 36, 이후 가운데를 추측하고 동률이면 오른쪽 선택
- 확률 3.3341%: 첫 추측 37, 이후 가운데를 추측하고 동률이면 오른쪽 선택
- 확률 1.7818%: 첫 추측 43, 이후 최악 복잡도를 늘리지 않는 구간 내 가장 오른쪽 원소 선택
- 확률 1.1608%: 첫 추측 44, 이후 최악 복잡도를 늘리지 않는 구간 내 가장 왼쪽 원소 선택
- 확률 2.1310%: 첫 추측 42, 이후 최악 복잡도를 늘리지 않는 구간 끝쪽 원소 선택
- 완전한 전략은 74줄이며, 생략된 전체 목록은 GitHub의 winning strategy에서 볼 수 있음
- 게임당 평균 14센트의 이익이 들이는 시간에 맞는다면, Ballmer가 이 게임을 제안해도 플레이할 만함