プロジェクトオイラー問題213(「ノミサーカス」)をどのように解決すべきですか?


11

プロジェクトオイラー213を解決したいのですが、統計学の専門家なので、どこから始めればよいかわかりません。正確な回答が必要なため、モンテカルロ法が機能しないことに注意してください。いくつかの統計トピックをお勧めしますか?ここに解決策を投稿しないでください。

ノミサーカス

30×30の正方形のグリッドには900ノミが含まれ、最初は1正方形あたり1ノミです。ベルを鳴らすと、各ノミは隣接する正方形にランダムにジャンプします(通常、グリッドの端またはコーナーのノミを除き、4つの可能性があります)。

ベルが50回鳴った後の空いている正方形の予想数はいくつですか?小数点以下6桁に四捨五入して回答してください。


7
モンテカルロ法は、十分なシミュレーションを行うと、非常に正確な答えを出すことができます。
Rob Hyndman、2009

3
プログラミングソリューションが必要な場合は、モンテカルロが唯一のアプローチです。モンテカルロで正確な答えが得られない理由はわかりません。数学的/分析的解決は簡単ではないかもしれません。

モンテカルロについての議論を見てきましたが、小数点以下6桁にしたい場合、時間がかかりすぎるか、他の同様の問題と混同されていると人々は言っています。モンテカルロアプローチのコーディングはかなり簡単なので、最初に試してみる価値はあると思います。
grokus

4
私は前の3つの回答のいずれにも異議はありませんが、私が提供した回答の(単純な)分析は、これらの発言を視点に置いています。モンテカルロシミュレーションは、10,000 CPUが並列に実行されているマシンで少なくとも1年かかります。
whuber

すべてのノミが閉じ込められていますか(つまり、問題は実際には複数のノミがいる正方形に関係しています)、これは端のノミが飛び出して消えていることについてですか?
MissMonicaE 2016

回答:


10

あなたが正しい; モンテカルロは実行不可能です。(単純なシミュレーション、つまり単純化せずに問題の状況を正確に再現するシミュレーションでは、各反復には900ノミの動きが含まれます。空のセルの比率の大まかな推定はであり、モンテの分散を意味します後-Carlo推定Nそのような反復はおよそ1 / N 1 / E 1 - 1 / E = 0.2325 ... / N1/eN1/N1/e(11/e)=0.2325/N。答えを小数点以下6桁に固定するには、5.E-7以内に見積もる必要があり、95 +%の信頼度(たとえば)を達成するには、その精度を約2.5E-7に半分にする必要があります。 。解決N>4E12になります。それは約3.6E15のノミの動きであり、それぞれがCPUのいくつかのティックをとります。最新のCPUを1つ利用できるので、1年間(非常に効率的な)コンピューティングが必要になります。そして、私は多少間違って楽観的に答えが数ではなく比率として与えられると仮定しました:数として、それは計算に100万倍の増加を伴う、さらに3つの有意な数値を必要とするでしょう...あなたは長い間待つことができますか?)(0.2325/N)<2.5E7N>4E12

分析ソリューションに関する限り、いくつかの簡略化が利用可能です。(これらは、モンテカルロ計算を短縮するためにも使用できます。)空のセルの予想される数は、すべてのセルにわたる空の確率の合計です。これを見つけるには、各セルの占有数の確率分布を計算します。これらの分布は、各ノミからの(独立!)寄与を合計することによって得られます。これにより、グリッド上の任意のセルのペアの間の30 x 30グリッドに沿って長さ50のパスの数を見つける問題が減少します(1つはノミの起点であり、もう1つは確率を計算するセルです)ノミの占有)。


2
ただ面白くするために、Mathematicaで力ずくの計算をしました。その答えは、21,574桁の整数と21,571桁の整数の比率です。10進数としては、期待どおりに快適に900 / eに近くなります(ただし、解決策を投稿しないように求められるため、これ以上の詳細は説明しません)。
whuber

6

各ノミの細胞の占有確率を反復できませんか。つまり、ノミkは最初、セル(i(k)、j(k))に確率1で存在します。1回の反復後、4つの隣接セルのそれぞれで確率1/4を持ちます(エッジ上またはエッジ内にないと仮定します)。コーナー)。次に、次の反復では、これらの各四半期が順番に「不鮮明」になります。50回の反復の後、ノミkの占有確率の行列ができます。900ノミすべてを繰り返し(対称性を利用する場合、これはほぼ8分の1に減少します)、確率を追加します(一度にすべてを保存する必要はありません。現在のノミの行列(ええと、非常に賢いですが、追加の作業行列)と現在の行列の合計が必要になる場合があります)。これをあちこちで高速化する方法はたくさんあるように思えます。

これにはシミュレーションは一切含まれません。ただし、かなりの計算が必要です。高い確率で6 dpよりやや良い精度で答えを出すために必要なシミュレーションサイズを計算し、どちらのアプローチがより高速になるかを理解することは、それほど難しくありません。このアプローチは、シミュレーションに多少の余裕があると思います。


2
質問とは少し異なる質問への回答。問題は、50ジャンプ後に空になるセルの予想数を尋ねることです。私が間違っている場合は修正してください。ただし、空になっていると予想されるセルの数が50に達したため、ノミが特定の正方形に到達する確率から直接の経路はわかりません。
アンディW

1
@Andy W-素晴らしいコメント; まだモンテカルロを使用してこの最後のステップを実行できます;-)

4
@Andy W:実際、難しいのはこれらすべての確率を取得することでした。各セルにそれらを追加する代わりに、それらの補数を乗算します。これは、セルが空になる確率です。すべてのセルのこれらの値の合計が答えを与えます。Glen_bのアプローチは、シミュレーションを7桁または8桁上回っています;-)。
whuber

@whuber、説明ありがとうございます。実際、これらの確率を1分以内に取得することは困難です。それは楽しいパズルであり、あなたの入力に感謝します。
アンディW

5

私はwhuberによって指摘された小数点以下6桁の精度でこの問題のモンテカルロ解決の実際的な不可能性(または非現実性)に異議はありませんが、6桁の精度の解決が達成できると思います。

t+1tK

K2

p^050(X(t))

p^0=1450i=1450I0(Xi(50))
(X(t))t=50π

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

166.11

whuberがコメントしたように、質問に正しく答えるためには推定値に2を掛ける必要があるため、最終的な値は332.2137、


1
+1非常に洞察力があります。質問では900セルすべてについて質問するため、最終的な回答を2倍にする必要があると思います。
whuber

1
皆さんが思っている以上に、固定配信から始めているのではないでしょうか。私が最初に行った総当たりの計算では、正確な(有理)演算を使用して遷移行列の50乗を計算しました。それから、330.4725035083710 ...の値を取得しました。たぶん私はエラーを犯しました...。間違いがありましたが、330.7211540144080を取得しました。広範なチェックにより、遷移行列が正しいことが示唆されます。
whuber

@whuber:ありがとう、確かにそれは可能性です。定常性への速度を決定するために結合の引数を見つけようとしましたが、できませんでした。元のプロセスを使用したモンテカルロシミュレーションでは、10分の1を超えるレプリカが333.96あり、計算時間は57時間でした。精度の保証はありません。
西安

1
ここに私の推論があります。50ステップの遷移行列は遷移行列の50乗であり、その固有値は固有値の50乗です。50ステップの最後のコンポーネントとして表示されるのは、50のべき乗が相当なサイズである値に対応する固有ベクトルのみです。さらに、これらの50の累乗は、真に定常状態に到達するのではなく、50番目のステップで停止することによって生じる相対誤差について通知します。
whuber

1
900×900

4

分析的なアプローチは面倒で、複雑なことを考えたことはありませんが、ここでは検討したいアプローチを紹介します。50リング後に空になるセルの予想数に関心があるため、ノミの位置ではなく、「セル内のノミの数」に対してマルコフ連鎖を定義する必要があります(位置をモデル化するGlen_bの回答を参照)マルコフ連鎖としてのノミ。その答えに対するコメントでアンディが指摘したように、そのアプローチはあなたが望むものを得られないかもしれません。)

具体的には:

nij(t)ij

次に、マルコフチェーンは次の状態で始まります。

nij(0)=1ij

ノミは隣接する4つのセルの1つに移動するため、セルの状態は、ターゲットセル内のノミの数と隣接する4つのセル内のノミの数、およびそのセルに移動する確率に応じて変化します。この観測を使用して、各セルの状態遷移確率を、そのセルの状態と隣接するセルの状態の関数として書き込むことができます。

必要に応じて答えをさらに広げることができますが、マルコフチェーンの基本的な紹介とともにこれで開始できます。


1
nij

@whuberいいえ、マルコフ連鎖としてノミの位置を維持する必要はありません。私が細胞のランダムウォークとして提案していることを考えてください。セルは最初、「1」の位置にあり、そこから0、1、2、3、4、または5に移動できます。状態遷移の確率は、隣接するセルの状態によって異なります。したがって、提案されたチェーンは、ノミの位置自体ではなく、再定義された状態空間(各セルのセル数の状態空間)にあります。それは理にかなっていますか?

1
それは理にかなっていますが、今は状態の数がはるかに多いのではないので、一歩後ろのように見えますか?1つのモデルでは、900の状態(単一のノミの位置)があり、各状態からの遷移は4つ以下です。それらはすべて独立して動くため、計算は単一のノミに対してのみ実行する必要があります。あなたのものでは、状態はセルの占有率と4つまでの隣接セルの占有率によって記述されているようです。それは非常に多数の状態であり、状態間の非常に多数の遷移でもあります。私はあなたの新しい状態空間が何であるかを誤解しているに違いありません。
whuber

{nij}

2

数値ルートを使用する場合、簡単な観察:問題は赤黒パリティの影響を受けるように見えます(赤の正方形のノミは常に黒の正方形に移動し、その逆も同様です)。これにより、問題のサイズを半分に減らすことができます(一度に2つの動きを検討し、赤い正方形のノミだけを見てください)。


1
それは素晴らしい観察です。しかし、これを明示的に悪用することは、その価値よりも厄介であることがわかりました。ほとんどのプログラミングは、遷移行列の設定に相当します。それをしたら、それを二乗して、それで作業します。スパース行列を使用することにより、ゼロの半分を削除しても時間を節約できません。
whuber

@whuber:これらの問題の要点は、多くの計算サイクルを消費するのではなく、問題解決のテクニックを学ぶことだと思います。対称性、パリティなどは、問題解決に関するラーソンの本の古典的な手法です。
shabbychef

1
それは良い点です。最終的には何らかの判断が必要です。オイラープロジェクトは、数学的洞察と計算効率の間のトレードオフを強調しているようです。Glen_bは、それらから得るべきものがもっとあるので、最初に活用する価値がある対称性に言及しました。さらに、スパース行列演算を使用することで、自動的に2倍のゲインが得られます(パリティに気付いているかどうかは関係ありません)。
whuber

1

離散時間マルコフ連鎖のいくつかの知識が役立つと思われると思います。


3
これはコメントであるべきだったのですが、この時点で私たちはそれを祖父に譲ることができると思います。
ガン-モニカの復活

これはおそらく短すぎるため、自動的に低品質としてフラグが付けられています。拡大できますか?
-モニカの復活

理由はわかりません。質問は役に立つかもしれないトピックを求めています。これが私の意見では最も関連性の高いトピックです。
Simon Byrne、

1
これは低品質として報告されました。大丈夫だと投票しました。このスレッドの他の答えを見ると、すべてかなり長いです。標準は時間とともに進化してきましたが、今日では、「役に立つかもしれないトピック」に言及しているとしても、これはコメントと見なされます。私が言ったように、私はこれがそのまま祖父であるかもしれないと思った。あなたがそれを拡大しようとするかどうかはあなた次第です。私はちょうどあなたに知らせていました。
gung-モニカの復活
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.