Я хотел бы решить Project Euler 213, но не знаю, с чего начать, потому что я непрофессионал в области статистики, обратите внимание, что требуется точный ответ, чтобы метод Монте-Карло не работал. Не могли бы вы порекомендовать мне некоторые темы статистики? Пожалуйста, не размещайте решение здесь.
Блошиный цирк
Сетка квадратов 30 × 30 содержит 900 блох, первоначально по одной блохе на квадрат. Когда звонит колокол, каждая блоха прыгает на соседний квадрат случайным образом (обычно 4 варианта, кроме блох на краю сетки или в углах).
Каково ожидаемое количество незанятых квадратов после 50 звонков колокола? Дайте ответ, округленный до шести знаков после запятой.
Ответы:
Вы правы; Монте-Карло невыполнимо. (В наивном моделировании, то есть в том, которое точно воспроизводит проблемную ситуацию без каких-либо упрощений, каждая итерация будет включать в себя 900 ходов блох. Грубая оценка доли пустых ячеек равна , что подразумевает дисперсию Монте -Карловая оценка после N таких итераций составляет примерно 1 / N 1 / e ( 1 - 1 / e ) = 0,2325 … / N1 / е N 1 / N1 / е ( 1 - 1 / е ) = 0,2325 … / N , Чтобы закрепить ответ до шести десятичных разрядов, вам нужно будет оценить его с точностью до 5.E-7, и, чтобы получить уверенность в 95 +% (скажем), вам придется примерно вдвое уменьшить эту точность до 2.5E-7 , Решая даетN>4E12, приблизительно. Это будет около 3,6E15 блох, каждый из которых занимает несколько тактов процессора. При наличии одного современного процессора вам понадобится целый год (высокоэффективных) вычислений. И я несколько неправильно и чрезмерно оптимистично предположил, что ответ дается в виде пропорции, а не подсчета: для подсчета ему понадобятся еще три значащие цифры, что повлечет за собой увеличение вычислений в миллион раз ... Вы можете ждать долго?)(√0,2325 / N) < 2,5 Е- 7 N> 4 E12
Что касается аналитического решения, существуют некоторые упрощения. (Они также могут использоваться для сокращения вычислений по методу Монте-Карло.) Ожидаемое количество пустых ячеек - это сумма вероятностей пустоты по всем ячейкам. Чтобы найти это, вы можете вычислить распределение вероятностей чисел занятости каждой ячейки. Эти распределения получены путем суммирования (независимых!) Вкладов от каждой блохи. Это сводит вашу проблему к нахождению количества путей длиной 50 по сетке 30 на 30 между любой данной парой ячеек в этой сетке (одна - источник блох, а другая - ячейка, для которой вы хотите вычислить вероятность размещение блох).
источник
Не могли бы вы перебрать вероятности занятия клеток для каждой блохи. То есть блоха k изначально находится в ячейке (i (k), j (k)) с вероятностью 1. После 1 итерации он имеет вероятность 1/4 в каждой из 4 соседних ячеек (при условии, что он не на краю или в угол). Затем на следующей итерации каждый из этих кварталов по очереди «размазывается». После 50 итераций у вас есть матрица вероятностей занятия для блох k. Повторите все 900 блох (если вы используете преимущества симметрии, это уменьшает почти в 8 раз) и добавьте вероятности (вам не нужно хранить их все сразу, только матрицу текущей блохи (хмм, если вы не очень умный, вам может понадобиться дополнительная рабочая матрица) и текущая сумма матриц). Мне кажется, что есть много способов ускорить это здесь и там.
Это не требует никакой симуляции вообще. Тем не менее, это довольно много вычислений; не должно быть очень сложно определить размер симуляции, необходимый для того, чтобы дать ответы с несколько большей точностью, чем 6 dp с высокой вероятностью, и выяснить, какой подход будет быстрее. Я ожидаю, что этот подход побьет симуляцию с некоторым запасом.
источник
Хотя я не возражаю против практической невозможности (или нецелесообразности) решения этой проблемы методом Монте-Карло с точностью до 6 десятичных знаков, указанных указателем whuber , я думаю, что может быть достигнуто разрешение с шестизначной точностью.
Во-первых, после Glen_b частицы могут обмениваться в стационарном режиме, поэтому достаточно (как при достаточности ) контролировать занятость разных ячеек, поскольку это также составляет марковский процесс. Распределение занятых мест на следующем шаге времени завершено, определяется занятостью в текущий момент времени t . Написание матрицы переходов K определенно нецелесообразно, но моделировать переход просто.т + 1 T К
Во-вторых, как отметил Шаббычеф , можно следить за процессом заполнения на 450 нечетных (или четных) квадратах, который остается на нечетных квадратах при рассмотрении только четных времен, т. Е. Квадратовой матрицы Маркова .К2
В- третьих, исходная задача рассматривает только частоту нулевых , после 50 марковских переходов. Принимая во внимание , что начальная точка имеет очень высокое значение для стационарного распределения вероятностей цепи Маркова ( Х ( т ) ) , и при условии , что фокус на одном среднем по всем клеткам, р 0 = 1п^0 50 ( Х( т )) можно считать, что реализация цепочки(X(t))в момент времениt=50является реализацией из стационарного распределения вероятностей. Это значительно снижает стоимость вычислений, поскольку мы можем смоделировать непосредственно из этого стационарного распределенияπ, которое является многочленным распределением с вероятностями, пропорциональными 2, 3 и 4 на четном угле, другими ячейками на краю и внутренними ячейками. соответственно.
Как прокомментировал whuber , оценки должны быть умножены на 2, чтобы правильно ответить на вопрос, следовательно, окончательное значение 332,2137,
источник
Аналитический подход может быть утомительным, и я не продумал все тонкости, но вот подход, который вы можете рассмотреть. Так как вас интересует ожидаемое количество ячеек, которые будут пустыми после 50 колец, вам нужно определить цепочку Маркова над «Нет блох в клетке», а не положение блох (см. Ответ Glen_b, который моделирует положение блоха как цепочка Маркова. Как отметил Энди в комментариях к этому ответу, такой подход может не дать того, что вы хотите.)
В частности, пусть:
Затем цепочка Маркова начинается со следующего состояния:
Поскольку блохи перемещаются в одну из четырех соседних ячеек, состояние ячейки изменяется в зависимости от того, сколько блох в целевой клетке и сколько блох в четырех соседних ячейках, а также от вероятности того, что они переместятся в эту ячейку. Используя это наблюдение, вы можете записать вероятности перехода состояний для каждой ячейки в зависимости от состояния этой ячейки и состояния соседних ячеек.
Если вы хотите, я могу расширить ответ дальше, но это, наряду с базовым введением в цепочки Маркова, должно помочь вам начать.
источник
если вы собираетесь пойти по числовому маршруту, простое наблюдение: проблема, кажется, подвергается красно-черному соотношению (блоха на красном квадрате всегда перемещается к черному квадрату, и наоборот). Это может помочь уменьшить размер вашей проблемы наполовину (просто рассмотрите два хода за раз, и, скажем, смотрите только на блох на красных квадратах).
источник
Я подозреваю, что некоторые знания о цепях Маркова с дискретным временем могут оказаться полезными.
источник