안녕하세요 여러분,
얼마 전 제 아들이 "배틀십"의 그리드 종이 버전을 해달라고 했습니다. 각 사람은 길이가 5, 4, 3, 3, 2인(그리고 너비가 1인) "함선" 5개를 가지고 있었습니다. "함선"은 XY 공간에서 10x10 그리드에 배치되었고, 각 "함선"은 고유한 (x,y) 좌표 세트를 가지고 있었습니다. 예를 들어, 3개의 "함선" 중 하나는 좌표 (3,4), (4,4) 및 (5,4)를 가질 수 있습니다. 두 개 이상의 "함선"은 동일한 (x,y) 좌표를 차지할 수 없습니다. "함선"은 수직 또는 수평으로만 실행할 수 있습니다. 대각선 레이아웃은 허용되지 않습니다.
그런 다음 우리는 교대로 좌표 쌍(x,y)을 외쳐 다른 사람의 "배"에 직접 맞은 사람이 누구인지 확인했습니다. 각자는 16번의 턴만 주어져서 다른 사람의 "배"를 최대한 많이 맞히거나 가라앉히려고 했습니다. 이런 과정을 거치면서 저는 무작위로 좌표를 외치는 것보다 다른 사람의 "배"를 맞히거나 가라앉힐 가능성을 최대화하는 더 나은 방법이 있을 것이라고 생각했습니다. 물론 이미 사용한 좌표(x,y)를 외치지 않을 것입니다. "배"를 맞혔는지 맞지 않았는지 알 수 있기 때문입니다.
처음에는 Custom Design 플랫폼이 올바른 방법일 수도 있다고 생각했지만, Y가 "Hit"(아니요/예는 0/1)이고 X1 = x, X2 = y 좌표(10단계 이산 숫자)인 디자인을 만들면 플랫폼은 각 X와 Y에 대해 높은 수준과 낮은 수준만 사용하는 디자인을 생성합니다. 그런데 모델 용어는 x, y, 교차 용어 x*y뿐입니다. 그래서 불행히도 Custom Design은 작동하지 않습니다.
Full Factorial DOE 플랫폼은 100번의 실행(10x10 Factorial)을 수행하려고 하지만 각각 16번의 실행(시도)만 가능하기 때문에 작동하지 않습니다.
RSM DOE 플랫폼은 높음/낮음 레벨에서만 작동하며 낮음/높음 레벨에 1과 10을 입력합니다. CCD 설계 옵션은 "선박"이 배치될 10 x 10 그리드 공간을 실제로 채우지 못합니다. 그리드 공간을 덮을 수 있는 중앙 런이 너무 많습니다.
이에 적용할 수 있는 다른 유일한 플랫폼은 공간 채우기 설계입니다. x와 y에 대해 동일한 낮음/높음, 1/10 설정을 사용하고 응답으로 "Hit"(이것은 이진수, 아니요/예의 경우 0/1)을 사용하면 그리드 공간을 채우는 (x,y) 쌍이 있는 DOE 표를 얻을 수 있습니다. 공간 채우기 설계 방법, FFF 또는 Uniform, Latin Hypercube 등에 대한 최상의 선택이 무엇인지 잘 모르겠습니다.
제 생각에 더 중요한 것은 DOE가 고정되어 있다는 것입니다. 첫 번째 실행의 결과에 따라 DOE가 알려진 정보를 고려하도록 어떻게 수정될 것인가라는 의미에서 "적응 가능"하지 않습니다. 위의 3개 단위 보트 좌표를 사용하여 첫 번째 실행에서 좌표 (3,4)를 호출하고 히트를 얻는다고 가정해 보겠습니다. "선박"의 레이아웃이 수평 또는 수직인지 알고 있으므로 다음 호출은 DOE를 전혀 따르지 않고 (3,5), (3,3), (2,4), 또는 (4,4)를 호출합니다. x 또는 y를 한 단위씩 증가시키고 결과가 무엇인지 확인합니다. 보트가 침몰하거나 다음 가능한 시작 좌표로 이동할 때까지 계속합니다.
저는 "히트"를 생성하기 위해 16개의 실행을 최적화할 수 있는 적응형 DOE를 생성하는 보다 과학적인 방법을 찾고 싶습니다. 정적 DOE를 벗어나는 것은 각 실행 후에 좌표가 "소모"되고 그것이 히트인지 아닌지 알게 되기 때문에 그럴 수 없습니다. 각 실행은 n+1개의 후속 실행에 정보를 제공합니다. 제가 아는 한, 이와 같은 것을 처리할 수 있는 DOE는 없지만 저는 이 분야의 전문가도 아닙니다.
"배틀쉽"에서 시작점을 무작위로 선택하는 것이 최선일까요? 저는 그렇게 생각하지 않지만, 기본적으로 "if/then" 문장이 있어서 이전 단계의 정보를 고려하면서 16번의 시도를 최적화할 수 있는 적응형 DOE를 만드는 방법을 알아내는 데 어려움을 겪고 있습니다. 16번의 시도에서 승리할 가능성을 최대화하기 위해 각 실행에 대한 선택을 최적화하는 "적응형" DOE가 있으면 멋질 것입니다.
토론해주셔서 감사합니다!
디에스
PS, JMP와 "배틀십"을 검색하던 중 @Jordan_Hiller 의 게시물 을 발견했는데, JMP를 사용하여 다양한 게임을 플레이하는 방법을 보여주고 @brady_brady가 "배틀십"을 실제로 플레이하는 JSL 코드를 작성했습니다. 정말 멋지네요! 곧 JSL을 다운로드할 거예요!
안녕 @Jordan_Hiller ,
블로그 링크 주셔서 감사합니다, 나는 기사를 즐겼다.
나는 일반적으로 배가 특정 사각형에 있을 확률을 계산하는 방법에 대한 개념을 이해합니다. 이것은 각 종류의 배마다 다를 것입니다. 그러나 보드의 확률 상태는 플레이의 각 라운드 후에 변경되므로 변경 시 발사할 다음 사각형에 대한 선택이 변경됩니다. 나에게 이는 안타/실패/를 고려하여 다시 최적화된 공간 채우기 디자인에 지나지 않습니다. 보트 크기/남은 실행 횟수.
블로그 포스터는 보트가 차지하는 사각형 수의 정확히 두 배인 34개의 동작으로 게임을 할 수 있는 알고리즘을 생성할 수 있었습니다. 아마도 17에 가깝게 승리하는 데 필요한 이동 수를 얻을 수 있는 최적의 결정 경로를 생성하는 것이 가능할 것입니다. 정확히 17은 아니지만 매우 가깝습니다.
확실히 ML/AI 접근 방식은 게임에서 승리하기 위한 알고리즘을 구축할 수 있지만 동의합니다. 나는 블로그 사람이 한 일과 DOE 활용의 혼합에 더 관심이 있습니다. 분명히 게임 보드의 확률 밀도 함수는 의사 결정을 내리는 데 중요합니다. 그러나 순전히 확률 계산에서 최적화된 공간 채우기를 기반으로 하는 확률 계산으로 수정할 수 있습니까? 마치 DOE가 가장 가능성이 높은 히트를 생성하도록 DOE에 대한 "가중" 함수로 보드의 확률 함수를 공급하는 것과 같습니다. 가장 높은 적중 횟수를 먼저 생성한 다음 침몰에 집중하는 것이 블로거가 사냥 모드로 이동하기 전에 먼저 배를 침몰시키는 데 집중하는 방식보다 더 빠른 승리로 이어질 것 같습니다.
어쨌든, 나는 고려하고 생각하는 것이 흥미로웠다는 것을 알았고 분명히 다른 사람들도 그랬습니다!
감사해요!,
DS
재미있는 생각이야, 디드리히!
다음은 이 주제에 대한 오래된 블로그 게시물입니다. 누군가 주어진 게임 상태에 대해 그리드의 각 사각형에 배가 있을 확률을 계산하는 방법을 알아냈습니다. https://www.datagenetics.com/blog/december32011/ 그 후에는 모델이 필요하지 않으며 가장 가능성이 높은 사각형을 선택할 수 있습니다. 기계 학습 프로젝트도 있지만 너무 지나친 것 같습니다!
요르단