프로젝트 오일러 문제 213 (“벼룩 서커스”)에 어떻게 접근해야합니까?


11

프로젝트 오일러 213 을 해결하고 싶지만 통계 분야의 평신도이기 때문에 어디서부터 시작 해야할지 모르겠습니다. 정확한 답변이 필요하므로 Monte Carlo 방법이 작동하지 않습니다. 읽을 수있는 몇 가지 통계 주제를 추천 해 주시겠습니까? 여기에 솔루션을 게시하지 마십시오.

벼룩 서커스

30x30 크기의 정사각형 격자에는 900 개의 벼룩이 있으며, 처음에는 사각형 당 한 개의 벼룩이 있습니다. 벨이 울릴 때, 각 벼룩은 인접한 정사각형으로 무작위로 점프합니다 (격자의 가장자리 나 모서리에있는 벼룩을 제외하고 일반적으로 4 가지 가능성).

종을 50 번 울린 후 비어있는 사각형의 예상 개수는 얼마입니까? 소수점 이하 여섯 자리로 반올림하십시오.


7
Monte Carlo 방법은 충분한 시뮬레이션을 수행 할 경우 매우 정확한 답변을 제공 할 수 있습니다.
Rob Hyndman

3
프로그래밍 솔루션을 원한다면 몬테 카를로가 유일한 방법입니다. 몬테 카를로를 사용하여 정확한 답변을 얻지 못하는 이유는 없습니다. 수학 / 분석 솔루션은 쉽지 않을 수 있습니다.

나는 몬테 카를로에 대한 토론을 보았고 사람들이 소수점 이하 6 자리를 달성하려면 너무 오래 걸리거나 다른 비슷한 문제와 혼동되어 있다고 말했습니다. Monte Carlo 접근 방식을 코딩하는 것은 상당히 쉬운 일이므로 먼저 시도해 보는 것이 좋습니다.
grokus

4
나는 이전의 세 가지 대답 중 어느 것에도 이의를 제기하지 않지만, 내가 제공 한 답변의 (간단한) 분석은 이러한 견해를 원근법으로 제시합니다. Monte Carlo 시뮬레이션은 10,000 개의 CPU가 병렬로 실행되는 시스템에서 최소 1 년이 소요됩니다.
whuber

모든 벼룩이 갇혀 있습니까 (즉, 문제가 실제로 둘 이상의 벼룩이있는 사각형에 관한 것입니까) 아니면 가장자리의 벼룩이 튀어 나와 사라지는 것입니까?
MissMonicaE

답변:


10

네가 옳아; 몬테 카를로는 불가능합니다. (순진한 시뮬레이션, 즉 단순화없이 문제 상황을 정확하게 재현하는 시뮬레이션에서 각 반복에는 900 개의 벼룩 이동이 포함됩니다. 빈 셀의 비율에 대한 대략적인 추정치는 이며, 몬테의 분산을 암시합니다 후 -Carlo 추정 같은 반복은 약 . 여섯 개 소수점 이하의 장소에 대한 답을 아래로 고정하려면, 당신은 5.E 내로 추정해야 -7, 95 + %의 신뢰도를 달성하기 위해서는 그 정밀도를 약 2.5E-7로 절반으로 줄여야합니다. 을N 1 / N 1 / e ( 1 1 / e ) = 0.2325 / N 1/eN1/N1/e(11/e)=0.2325/NN>4E12(0.2325/N)<2.5E7N>4E12대략. 그것은 약 3.6E15의 벼룩 움직임이 될 것입니다. 하나의 최신 CPU를 사용하면 1 년 (고효율) 컴퓨팅이 필요합니다. 그리고 대답이 카운트 대신 비율로 제공되는 것으로 잘못 잘못하고 지나치게 낙관적으로 가정했습니다. 카운트로 계산하면 백만 배가 증가하는 3 개의 더 중요한 수치가 필요합니다 ... 오래 기다릴 수 있습니까?)

분석 솔루션이 진행되는 한 일부 단순화가 가능합니다. (이것들은 몬테카를로 계산을 줄이는 데에도 사용될 수 있습니다.) 예상되는 빈 셀 수는 모든 셀에 대한 공허 확률의 합입니다. 이를 찾기 위해 각 셀의 점유율 수의 확률 분포를 계산할 수 있습니다. 이러한 분포는 각 벼룩의 (독립!) 기여를 합산하여 얻습니다. 이렇게하면 해당 그리드의 특정 셀 쌍 사이에서 30 x 30 그리드를 따라 길이가 50 인 경로 수를 찾는 문제가 줄어 듭니다 (하나는 벼룩의 원점이고 다른 하나는 벼룩의 점령).


2
재미로 Mathematica에서 무차별 계산을했습니다. 답은 21,574 자리 정수 대 21,571 자리 정수의 비율입니다. 십진수로 예상대로 900 / e에 가깝습니다 (그러나 솔루션을 게시하지 않아도되므로 자세한 내용은 제공하지 않습니다).
whuber

6

각 벼룩에 대한 세포의 점유 확률을 반복 할 수 없습니까? 즉, 벼룩 k는 처음에 확률이 1 인 셀 (i (k), j (k))에 있습니다. 1 회 반복 후, 그는 4 개의 인접한 셀 각각에 1/4의 확률을가집니다 (가장자리에 있지 않거나 코너). 그런 다음 다음 반복에서 각 분기가 차례로 "번져서"나타납니다. 50 번의 반복 후에는 벼룩에 대한 직업 확률 매트릭스가 나타납니다. 900 개의 벼룩을 모두 반복하고 (시뮬레이션을 활용하면 거의 8 배 감소) 확률을 추가 할 수 있습니다 (한 번에 모두 저장할 필요는 없으며 현재 벼룩 행렬 만 사용하면됩니다. 매우 영리한 경우 추가 작업 행렬)과 현재 행렬 합계)를 원할 수 있습니다. 여기저기서 속도를 높이는 방법이 많이있는 것 같습니다.

시뮬레이션이 전혀 필요하지 않습니다. 그러나 많은 계산이 필요합니다. 높은 확률로 6dp 정확도보다 약간 더 나은 답변을 제공하고 어떤 접근법이 더 빠른지를 알아내는 데 필요한 시뮬레이션 크기를 계산하는 것은 그리 어렵지 않아야합니다. 이 접근법이 시뮬레이션을 약간 능가 할 것으로 기대합니다.


2
질문과는 약간 다른 질문에 대답합니다. 문제는 50 점프 후 비어있을 것으로 예상되는 셀 수를 묻는 것입니다. 내가 틀렸다면 나를 바로 잡으십시오. 그러나 얼마나 많은 세포가 비어있을 것으로 예상되는지 50으로 점프 한 후 벼룩이 특정 광장에서 끝나는 확률로부터 직접적인 경로가 보이지 않습니다.
Andy W

1
@ 앤디 W-좋은 의견; 그럼에도 불구하고 Monte Carlo는이 마지막 단계를 수행하는 데 사용될 수 있습니다 ;-)

4
@Andy W : 사실, 어려운 부분은 모든 가능성을 얻는 것이 었습니다. 각 셀에 그것들을 더하는 대신, 그들의 보수를 곱하십시오 : 그것은 셀이 비어있을 확률입니다. 모든 셀에 대한 이러한 값의 합이 답을 제공합니다. Glen_b의 접근 방식은 시뮬레이션을 7 ~ ​​8 배나 능가합니다. ;-).
whuber

@ whuber, 설명 주셔서 감사합니다. 실제로 이러한 확률을 1 분 안에 얻는 것은 어려울 것입니다. 재미있는 퍼즐이며 입력 해 주셔서 감사합니다.
Andy W

5

whuber 가 지적한 소수점 이하 6 자리의 정밀도 로이 문제의 Monte Carlo 해상도의 실질적인 불가능 성 (또는 비 실용성)에 반대하지는 않지만 6 자리 정확도의 해상도를 달성 할 수 있다고 생각합니다.

먼저, Glen_b에 이어 , 입자는 정지 된 체제에서 교환 가능하므로 , 이는 마르코프 공정을 구성하기 때문에 다른 세포의 점유를 모니터링하는 것으로 충분하다 . 다음 시간 단계 에서의 점유의 분포 는 현재 시간 에서의 점유에 의해 결정된다 . 전이 행렬 작성하는 것은 확실히 비현실적이지만 전이를 시뮬레이션하는 것은 간단합니다.t Kt+1tK

둘째, shabbychef가 지적한 바와 같이 450 홀수 (또는 짝수) 제곱에 대한 점유 과정을 따를 수 있는데, 홀수 제곱을 고려할 때 홀수 제곱, 즉 제곱 된 Markov 행렬 가 남아 있습니다 .K2

셋째, 원래의 문제점은 Markov 전환 후 제로 점유 빈도 만 고려합니다 . 시작점이 Markov chain의 고정 확률 분포 대해 매우 높은 값을 가지며 모든 셀에서 단일 평균에 중점을 둔 경우 우리는 체인의 실현 시간 에서 은 고정 확률 분포로부터의 실현이다. 이 고정 분포에서 직접 시뮬레이션 할 수 있기 때문에 컴퓨팅 비용이 크게 절감됩니다.50(X(t)) P 0=1p^050(X(t))(X(t))t=50π

p^0=1450i=1450I0(Xi(50))
(X(t))t=50π는 짝수 코너에서 2, 3 및 4, 가장자리의 다른 셀 및 내부 셀에 각각 비례하는 확률을 갖는 다항 분포입니다.

분명히 고정 분포는 예상되는 빈 셀 수를 로 .166.1069

i=1450(1πi)450
166.1069
pot=rep(c(rep(c(0,1),15),rep(c(1,0),15)),15)*c(2,
    rep(3,28),2,rep(c(3,rep(4,28),3),28),2,rep(3,28),2)
pot=pot/sum(pot)
sum((1-pot)^450)-450
[1] 166.1069

이것은 몬테카를로 근사치에 습니다. (10 machine 시뮬레이션을 기반으로했으며, 내 컴퓨터에서 14 시간이 걸렸습니다.) 그러나 소수점 이하 6 자리는 충분하지 않습니다.166.11

whuber 에 의해 논평 된 것처럼 , 견적에 2를 곱하여 질문에 올바르게 대답해야하므로 최종 값 332.2137,


1
+1 매우 통찰력이 있습니다. 질문에 900 개의 셀이 모두 있기 때문에 최종 답변을 두 배로 늘려야한다고 생각합니다.
whuber

1
나는 당신이 생각하는 것보다 고정 배포판에서 더 멀리 시작하고 있다고 생각합니다. 내가 처음에 무차별 계산은 정확한 (이론적) 산술을 사용하여 전이 행렬의 50 제곱을 계산했습니다. 그것으로부터 나는 330.4725035083710 ...의 값을 얻었다. 아마도 오류가 발생했을 것입니다. 실수를해서 이제 330.7211540144080 ...을 얻었습니다. 광범위한 검사는 전이 행렬이 정확하다는 것을 나타냅니다.
whuber

@ whuber : 고마워, 그것은 실제로 가능성입니다. 정상 속도를 결정하기 위해 결합 주장을 찾으려고했지만 실패했습니다. 원래 프로세스를 사용한 몬테 카를로 시뮬레이션은 10⁶ 복제본과 57.57 시간의 계산에 333.96을 제공했습니다. 정밀도에 대한 추가 보증이 없습니다.
Xi'an

1
여기 내 추론이 있습니다. 50 단계에 대한 전이 행렬은 고유 값이 고유 값의 50 제곱 인 경우 전이 행렬의 50 제곱입니다. 50의 거듭 제곱이 어떤 크기인지 알 수있는 값에 해당하는 고유 벡터 만 50 단계 끝에 구성 요소로 나타납니다. 더욱이, 그 50의 힘은 진정으로 안정된 상태를 얻는 것이 아니라 50 단계에서 멈춤으로써 발생 된 상대 오차에 관해 알려줍니다.
whuber

1
실제로 전이 행렬을 사용하고 있습니다. 900×900
whuber

4

분석적인 접근 방식은 지루할 수 있으며 복잡한 점을 고려하지는 않았지만 여기에 고려해야 할 접근 방식이 있습니다. 50 개의 링 이후에 비어있는 예상 셀 수에 관심이 있기 때문에 벼룩의 위치가 아니라 "셀에 벼룩 없음"에 대한 마르코프 체인을 정의해야합니다 (위치 를 모델링하는 Glen_b의 답변 참조 ). 앤디가 그 답변에 대한 의견에서 지적한 것처럼 그 접근 방식은 원하는 것을 얻지 못할 수 있습니다.)

구체적으로,

i jnij(t) 는 행 과 행에있는 셀의 벼룩 수입니다 .ij

그런 다음 마르코프 체인은 다음 상태로 시작합니다.

i jnij(0)=1모든 및 대해 입니다 .ij

벼룩은 4 개의 인접한 셀 중 하나로 이동하기 때문에, 셀의 상태는 대상 셀에 몇 개의 벼룩이 있는지, 그리고 4 개의 인접한 셀에 몇 개의 벼룩이 있는지, 그리고 그 셀로 이동할 확률에 따라 달라집니다. 이 관찰을 사용하여 각 셀의 상태 전이 확률을 해당 셀의 상태와 인접 셀의 상태의 함수로 작성할 수 있습니다.

당신이 원한다면 나는 대답을 더 확장 할 수 있지만 이것은 마르코프 체인에 대한 기본 소개와 함께 당신을 시작할 것입니다.


1
나는 일련의 지표를 만드는 아이디어를 좋아하지만 설명에서는 여전히 모든 세포에서 벼룩을 완전히 유지하고 Markov 체인으로 실행 해야하는 것처럼 들립니다. 추적의 추가 복잡성으로 달성되는 것은 무엇 입니까? nij
whuber

@whuber 아니오, 마르코프 체인으로서 벼룩 위치를 유지할 필요는 없습니다. 내가 제안하는 것이 세포의 무작위 산책로라고 생각하십시오. 셀은 처음에 '1'위치에 있으며 0에서 1, 2, 3, 4 또는 5로 갈 수 있습니다. 상태 전이의 확률은 인접한 셀의 상태에 따라 다릅니다. 따라서 제안 된 체인은 벼룩 위치 자체가 아니라 재정의 된 상태 공간 (각 셀의 셀 수)에 있습니다. 말이 돼?

1
말이 되겠지만, 이제는 상태가 훨씬 더 크지 않기 때문에 한 단계 뒤로 이동하는 것처럼 보입니다. 한 모델에는 900 개의 상태 (단일 벼룩의 위치)가 있으며 각 상태에서 최대 4 개의 전환이 있습니다. 단일 벼룩에 대한 계산은 모두 독립적으로 움직이므로 수행해야합니다. 당신의 상태는 셀의 점유율과 최대 4 명의 이웃의 점유율로 설명됩니다. 그것은 매우 많은 수의 상태가 될 것이며 또한 국가들 사이에는 매우 많은 수의 전환이 될 것입니다. 나는 당신의 새로운 주 공간이 무엇인지 오해해야합니다.
whuber

@ whuber 나는 지금 문제를 본다. 내 제안은 그리드 상태에서 마르코프 체인을 정의하는 데 달려 있다고 생각합니다. 그리드 상태를 로 정의하십시오 . 그런 다음 한 기간 동안 모든 셀의 셀 수가 이전 기간의 모든 셀의 셀 수에 의존하기 때문에 그리드 상태에 마르코프 체인이 있습니다. 주 공간이 급격히 증가함에 따라 이것은 비현실적인 제안입니다. {nij}

2

숫자 경로를 사용하려는 경우 간단한 관찰 : 문제가 빨간색-검정 패리티의 영향을받는 것으로 보입니다 (빨간색 사각형의 벼룩은 항상 검은 색 사각형으로 이동하고 그 반대도 마찬가지 임). 이렇게하면 문제 크기를 절반으로 줄일 수 있습니다 (한 번에 두 번의 움직임 만 고려하고 빨간색 사각형의 벼룩 만보십시오).


1
좋은 관찰입니다. 그러나 나는 이것을 명시 적으로 이용할 가치가있는 것보다 더 귀찮았습니다. 프로그래밍의 대부분은 전이 행렬을 설정하는 것입니다. 일단 그렇게하면 그냥 제곱하고 그와 함께 작업하십시오. 희소 행렬을 사용하면 0의 절반을 제거해도 시간이 절약되지 않습니다.
whuber

@ whuber :이 문제의 요점은 많은 계산주기를 소비하기보다는 문제 해결 기술을 배우는 것입니다. 대칭, 패리티 등은 Larson의 책에서 문제 해결에 대한 고전적인 기술입니다.
shabbychef

1
그건 좋은 지적이야. 궁극적으로 약간의 판단이 필요합니다. 프로젝트 오일러는 수학적 통찰력과 계산 효율성 간의 절충점을 강조하는 것으로 보입니다. Glen_b는 더 많은 것을 얻을 수 있기 때문에 먼저 악용 할 가치가있는 대칭을 언급했습니다. 또한 희소 행렬 산술을 사용하면 패리티를 알고 있는지 여부에 관계없이 자동으로 2 배의 이득을 얻을 수 있습니다.
whuber

1

이산 시간 마르코프 체인에 대한 지식이 유용 할 것으로 생각 됩니다.


3
이것은 주석 이었음에 틀림 없다. 그러나 지금은 할아버지가 할 수 있다고 생각한다.
gung-Monica Monica 복원

품질이 낮기 때문에 자동으로 품질이 낮은 것으로 표시됩니다. 당신은 그것을 확장 할 수 있습니까?
gung-모니 티 복원

왜 그런지 모르겠습니다. 질문은 유용한 주제를 요구하며 이것이 제 의견으로는 가장 관련성이 높은 주제입니다.
Simon Byrne

1
품질낮은 것으로 표시되었습니다 . 나는 그것이 정상이라고 투표했다. 이 스레드에 대한 다른 답변을 보면 모두 상당히 길어집니다. 표준은 시간이 지남에 따라 발전했지만 오늘날에는 "유용한 주제"라는 언급이 있더라도 이것은 주석으로 간주 될 것입니다. 내가 말했듯이, 나는 이것이 그대로 할아버지가 될 수 있다고 생각했습니다. 당신이 그것을 확장하려고하는지 여부는 당신에게 달려 있습니다. 방금 알려 드리고 있었어요
gung-모니 티 복원
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.