대부호 CPU 봇의 성적표는 처음부터 몬테카를로였고, 지금 운영 중인 봇은 상대 손패를 열여섯 번 뽑아 판 끝까지 두어 보고 수를 고릅니다. 시리즈가 검산하지 않고 남긴 장부의 위험 근사를 실제 게임의 3,479개 평가에서 몬테카를로로 다시 재고, 운영 봇의 탐색을 4,000개 표본으로 재현했습니다.
Posts for: #Simulation
몬테카를로 시뮬레이션 Part 1: 솔리테어 한 판의 확률
몬테카를로 시뮬레이션은 계산으로 구하기 어려운 확률을 무작위 시행을 세어서 구하는 방법입니다. 울람의 솔리테어에서 시작한 역사와 표본 평균, 1/√n 으로 줄어드는 오차를 정리하고, 몬티 홀·생일 문제·드 메레의 주사위를 Go 로 돌려 봅니다.
뉴컴의 역설 Part 2: 증거냐 원인이냐 — 두 결정 이론과 서로의 코드를 읽는 프로그램
뉴컴의 역설에서 갈린 두 직관은 두 개의 결정 이론이 되었습니다. 내 선택이 무엇의 증거인지를 보는 증거적 결정 이론과, 내 선택이 무엇을 일으키는지를 보는 인과적 결정 이론입니다. “그렇게 똑똑하면 왜 부자가 아니냐” 는 놀림과 그 답, 각 이론을 곤란하게 만드는 흡연 병변과 다마스쿠스의 죽음과 사이코패스 버튼, 독약을 마실 의도에 돈을 주는 억만장자, 그리고 뉴컴의 문제가 사실 쌍둥이와 하는 죄수의 딜레마라는 주장까지 정리합니다. 마지막에는 예측자가 내 코드를 실행해 보는 뉴컴과, 서로의 소스 코드를 읽는 프로그램들의 죄수의 딜레마를 Go 로 돌려 봅니다.
뉴컴의 역설 Part 1: 상자 하나인가, 둘 다인가 — 예측자가 이미 정해 둔 상금
당신의 선택을 거의 틀림없이 맞히는 예측자가 이미 상자를 채워 두었습니다. 투명한 상자에는 1,000달러, 불투명한 상자에는 100만 달러 또는 아무것도 없습니다. 하나만 가져갈 것인가, 둘 다 가져갈 것인가. 1969년 철학자 노직이 소개한 뒤 반세기 넘게 사람들을 정확히 둘로 갈라 온 뉴컴의 역설을 정리합니다. 규칙과 두 논증, 1973년 『사이언티픽 아메리칸』 독자 편지와 철학자 설문, 3만 명이 넘게 참여한 신문 투표의 결과, 그리고 예측자가 얼마나 정확해야 한 상자가 유리해지는지를 Go 로 직접 계산해 봅니다.
공유지의 비극 Part 1: 목동은 왜 소를 한 마리 더 들이는가 — 하딘의 목초지
모두에게 열린 목초지에서 목동들은 소를 한 마리씩 더 들이다가 풀밭을 망칩니다. 1968년 『사이언스』에 실린 개릿 하딘의 「공유지의 비극」이 실제로 무엇을 말했는지(주제는 목초지가 아니라 인구였습니다), 목동 수에 따라 마을의 이익이 어떻게 녹아내리는지 Go 로 직접 돌려 본 결과, 아리스토텔레스와 1833년 옥스퍼드 강의까지 거슬러 올라가는 이 생각의 뿌리, 하딘의 처방과 그 그림자, 그리고 그가 30년 뒤 스스로 인정한 단어 하나의 누락까지 정리합니다.
대부호 CPU 플레이어 만들기 Part 7: 처음 보는 판에서 재다
대부호 hard 봇의 최종 시험입니다. 시험 문제를 열기 전에 합격선 여섯 개를 커밋으로 못 박은 절차, 한 번도 쓰지 않은 딜 128개에서 한 번만 돌린 결과(easy 대비 −0.746, 4인 1등 비율 61%, 반칙패 0), 봇의 손패와 결정 단계를 수마다 눈으로 읽은 재생, 기본 봇으로 올리면서 남긴 뒷길, 그리고 이 결과로 말할 수 있는 것과 아직 말할 수 없는 것을 정리합니다.
대부호 CPU 플레이어 만들기 Part 6: 항목을 하나씩 꺼 보니
대부호 hard 봇을 시뮬레이터로 잽니다. 운영 서버와 같은 결정 경로를 타면서 수 하나를 6ms 에서 30µs 로 줄인 메모리 엔진, 봇 하나를 셋 사이에 앉히는 양방향 비교가 왜 필요했는지, 같은 봇끼리 정확히 0 이 나오는 장치 검사, 그리고 hard 의 판단 항목을 하나씩 켜고 꺼 본 결과 규칙 세 개가 개선의 91% 를 차지했고 두 항은 해로워서 지웠으며 문턱 하나를 네 배로 올린 이야기입니다.
달무티 CPU 플레이어 만들기 Part 8: 봇을 고치다 — 리드 지키기 계획과 아껴 두기
잘 두는 사람에게서 찾은 세 가지 습관을 hard 봇에 넣었습니다. 바꾸기 전과 후의 판단 흐름을 그림으로 나란히 놓고, 새 봇이 구버전 봇들 사이에서 얼마나 세졌는지, 그리고 아직 말할 수 없는 것이 무엇인지를 코드 없이 정리합니다.
달무티 CPU 플레이어 만들기 Part 7: 잘 두는 사람은 봇과 어디서 다르게 두는가
hard 봇을 열 판 중 여섯 판 이긴 사용자의 결정 6,746개를, 같은 순간 봇이 냈을 수와 하나씩 비교했습니다. 대부분은 같았습니다. 갈라진 자리는 셋이었습니다. 강한 한두 장으로 리드를 지키고, 초반에 최상위 카드를 아끼고, 받을 때 딱 이길 만큼만 씁니다.
달무티 CPU 플레이어 만들기 Part 6: 사람이 열 판 중 여섯 판을 이기는 hard 봇
hard 봇 세 명을 상대로 사람이 판의 59.8% 를 1등으로 끝냈습니다. 공정하다면 25% 여야 합니다. 가장 많이 플레이한 사용자에게는 hard 와 easy 의 차이가 0.2%p 였습니다. 코드 없이, 무엇을 어떻게 쟀고 왜 봇이 사람에게 읽혔는지를 정리합니다.
삼평 하이로우 v2.0 Part 5: 규칙 전문 — 기준 판정, 변경 이력, 미결 사항, 재현 스크립트
삼평 하이로우(PLS7) v2.0 규칙 전문입니다. 여섯 가지 평가 기준의 판정을 모으고, 실측 확률표와 순위 근거, 로우 세칙, 인원 권장선, 선택 규칙 PLS-2, 전략 참고표를 담은 새 가이드를 씁니다. v1.4 에서 무엇이 바뀌고 무엇이 그대로인지, 시뮬레이션이 답하지 못한 미결 사항은 무엇인지 기록하고, 핵심 수치를 재현하는 스크립트를 부록으로 붙입니다.
삼평 하이로우 v2.0 Part 4: 7-or-better 는 옳았나 — 로우 성립률, 스쿱, 그리고 인원 권장선
삼평 하이로우의 로우 규칙을 검증합니다. 7-or-better 는 6인 쇼다운의 47% 에서 로우가 성립해 “하이 게임에 로우가 끼어드는” 균형을 정확히 맞추고 있었고, 표준 8-or-better 로 바꾸면 70% 가 되어 매 판 반씩 나누는 게임이 됩니다. 인원별 로우 성립률과 분할 팟 비율로 “4명 이하는 하이 온리” 권장선을 다시 긋고, A-2-x 핸드가 하이로우 팟을 독식하는지도 확인합니다.
삼평 하이로우 v2.0 Part 3: 홀카드 자유 사용은 죄가 없다 — 찹, 보드 텍스처, 스타팅 핸드 쏠림
삼평 하이로우의 정체성인 “홀카드 0~3장 자유 사용” 규칙을 같은 딜 200만 회로 검증합니다. 보드만으로 승부가 나는 판은 6인 기준 0.14%, 하이 팟 동률은 홀덤과 같은 7% 였습니다. 최소 1장·최소 2장·정확히 2장 변형을 함께 재고, 보드 텍스처가 승자를 얼마나 결정하는지 홀덤·PLO 와 비교하며, 스타팅 핸드 1,755종의 에쿼티 지도로 쏠림을 확인합니다.
삼평 하이로우 v2.0 Part 2: 확률표는 틀렸다 — 8장 풀에서 다시 잰 족보 확률과 순위의 근거
삼평 하이로우 v1.4 가이드의 확률표 세 개를 딜 200만 회 시뮬레이션과 나란히 놓습니다. 풀하우스와 플러시는 실제의 절반으로, 트리플은 실제보다 높게 적혀 있었고, “트리플이 스트레이트보다 희귀하다” 는 순위 설명의 전제는 반대였습니다. 8장 풀 기준 희소성으로 족보 순위를 다시 검토하고, 스킵 스트레이트와 플러시의 순서를 어떻게 할지 결정합니다.
삼평 하이로우 v2.0 Part 1: 1년 뒤 다시 읽는 규칙 — 장점, 단점, 그리고 보존할 것
2025년 7월에 발행한 삼평 하이로우(PLS7) v1.4 가이드를 1년 만에 다시 읽습니다. 규칙의 장점과 단점을 가려내고, 단점이지만 게임의 정체성이라 보존해야 할 것을 미리 선언한 뒤, 플레이 횟수가 늘어도 쏠림과 질림이 나타나지 않도록 파인튜닝하는 5부작의 방법론과 평가 기준을 세웁니다.
훌라 CPU 플레이어 만들기 Part 8: 처음 보는 판에서 재다
훌라 hard 봇의 값을 동결하고, 한 번도 쓰지 않은 딜 256개에서 최종 검증을 합니다. 실험이 고른 값을 일부러 쓰지 않은 자리와 그 이유, 시험 문제를 열기 전에 합격선을 못 박는 절차, 인원이 늘수록 두 배씩 벌어진 결과, 그리고 Part 4 의 여덟 자리 중 무엇이 메워졌고 무엇이 메운 줄 알았는데 아니었는지를 결산합니다.
훌라 CPU 플레이어 만들기 Part 7: 저울의 추를 하나씩 빼 보니
훌라 hard 봇을 시뮬레이터로 잽니다. 같은 딜에서 hard 와 easy 를 바꿔 앉혀 딜 운을 지우는 방법, 도구가 만들어지자마자 잡은 “다른 봇을 재고 있었다” 는 버그, 8 seed 로는 아무 말도 못 하고 32 seed 에서야 방향이 보인 첫 성적, 그리고 손으로 정한 추 열한 개를 하나씩 빼 보니 넷은 5만 번의 결정에서 수를 하나도 바꾸지 않았다는 사실까지 다룹니다.
달무티 CPU 플레이어 만들기 Part 5: 코드 없이 보는 easy 봇과 hard 봇의 차이
Part 1 부터 Part 4 까지는 코드와 수식이 많았습니다. 이번 편은 개발을 모르는 분도 읽을 수 있게, 달무티 CPU 두 종류가 각각 무엇을 보고 수를 고르는지, 어떻게 겨루게 했고 결과가 어땠는지, 그리고 왜 격차가 이토록 작았는지를 정리했습니다.
렉시오 CPU 플레이어 만들기 Part 7: 코드 없이 보는 easy 봇과 hard 봇의 차이
Part 1 부터 Part 6 까지는 코드와 수식이 많았습니다. 이번 편은 개발이나 수학을 모르는 분도 읽을 수 있게, 렉시오 CPU 두 종류가 각각 무엇을 보고 수를 고르는지, 둘을 어떻게 겨루게 했고 결과가 어땠는지, 그리고 무엇은 아직 말할 수 없는지를 정리했습니다.
렉시오 CPU 플레이어 만들기 Part 6: 봇이 약한지 어떻게 아는가
Part 5 는 브라우저에서 한 판 돌려 찾은 결함을 고쳤습니다. 그 방법으로는 “조금 약하다"를 찾을 수 없어 시뮬레이터를 만들었더니, 도구가 전략을 재기도 전에 구현 버그부터 잡아냈습니다. 그리고 봇이 약한 이유를 세 번 틀리고 네 번째에 찾았습니다. 평가 함수는 처음부터 옳았고, 확률이 틀렸습니다.