Come si dovrebbe approvare il problema del Project Euler 213 ("Flea Circus")?


11

Vorrei risolvere il Progetto Euler 213 ma non so da dove cominciare perché sono un laico nel campo della Statistica, nota che è necessaria una risposta accurata, quindi il metodo Monte Carlo non funzionerà. Potresti consigliarmi alcuni argomenti statistici su cui leggere? Si prega di non pubblicare la soluzione qui.

Circo delle pulci

Una griglia di quadrati 30 × 30 contiene 900 pulci, inizialmente una pulce per quadrato. Quando viene suonata una campana, ogni pulce salta a casaccio in un quadrato adiacente (di solito 4 possibilità, ad eccezione delle pulci sul bordo della griglia o agli angoli).

Qual è il numero previsto di quadrati non occupati dopo 50 squilli della campana? Dai la tua risposta arrotondata al primo decimale.


7
I metodi Monte Carlo possono fornire risposte molto accurate a condizione che tu faccia abbastanza simulazioni.
Rob Hyndman,

3
Se vuoi una soluzione di programmazione, Monte Carlo è l'unico approccio. Non vedo alcun motivo per cui non otterrai risposte precise utilizzando Monte Carlo. Una soluzione matematica / analitica potrebbe non essere facile.

Ho visto discussioni su Monte Carlo e la gente ha detto che se vuoi raggiungere 6 decimali, ci vorrà troppo tempo, o forse sono confuso con altri problemi simili. Dal momento che è abbastanza facile codificare un approccio Monte Carlo, credo che valga la pena provare prima.
grokus,

4
Non disputo nessuna delle tre risposte precedenti, ma l'analisi (semplice) nella risposta che ho offerto mette in prospettiva queste osservazioni: se si desidera una precisione di sei decimali per una stima di un numero che sarà tra le centinaia, la simulazione Monte Carlo impiegherà almeno un anno su una macchina con 10.000 CPU in parallelo.
whuber

Tutte le pulci sono intrappolate (cioè il problema riguarda davvero i quadrati con più di una pulce) o si tratta di pulci sui bordi che saltano fuori e scompaiono?
MissMonicaE

Risposte:


10

Hai ragione; Monte Carlo è impraticabile. (In una simulazione ingenua - ovvero quella che riproduce esattamente la situazione del problema senza alcuna semplificazione - ogni iterazione comporterebbe 900 movimenti delle pulci. Una stima approssimativa della percentuale di celle vuote è , implicando la varianza del Monte -Carlo stima dopo tali iterazioni è approssimativamente Per fissare la risposta a sei cifre decimali, è necessario stimarla entro 5. -7 e, per ottenere una sicurezza del 95 +% (diciamo), dovresti dimezzare approssimativamente quella precisione a 2,5E-7. Risolvere dà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, circa. Sarebbe circa 3,6 mosse di pulce 3.6E15, ognuna con diverse zecche di CPU. Con una CPU moderna disponibile avrai bisogno di un anno intero di elaborazione (altamente efficiente). E ho ipotizzato in modo un po 'errato e eccessivamente ottimistico che la risposta sia data come una proporzione anziché come un conteggio: come conteggio, avrà bisogno di tre cifre più significative, comportando un aumento di un milione di volte nel calcolo ... Riesci ad aspettare a lungo?)

Per quanto riguarda una soluzione analitica, sono disponibili alcune semplificazioni. (Questi possono essere usati anche per abbreviare un calcolo di Monte Carlo.) Il numero atteso di celle vuote è la somma delle probabilità di vuoto su tutte le celle. Per trovare questo, è possibile calcolare la distribuzione di probabilità dei numeri di occupazione di ciascuna cella. Tali distribuzioni si ottengono sommando i contributi (indipendenti!) Di ciascuna pulce. Ciò riduce il problema nel trovare il numero di percorsi di lunghezza 50 lungo una griglia 30 per 30 tra una data coppia di celle su quella griglia (una è l'origine della pulce e l'altra è una cella per la quale si desidera calcolare la probabilità del occupazione delle pulci).


2
Solo per divertimento, ho fatto un calcolo della forza bruta in Mathematica. La sua risposta è un rapporto tra un numero intero di 21.574 cifre e un numero intero di 21.571 cifre; come decimale è comodamente vicino a 900 / e come previsto (ma, poiché ci viene chiesto di non pubblicare una soluzione, non fornirò ulteriori dettagli).
whuber

6

Non potresti iterare attraverso le probabilità di occupazione delle cellule per ogni pulce. Cioè, la pulce k è inizialmente nella cella (i (k), j (k)) con probabilità 1. Dopo 1 iterazione, ha probabilità 1/4 in ciascuna delle 4 celle adiacenti (supponendo che non sia su un bordo o in un angolo). Quindi alla successiva iterazione, ciascuno di questi trimestri viene "spalmato" a sua volta. Dopo 50 iterazioni hai una matrice di probabilità di occupazione per le pulci. Ripeti oltre tutte le 900 pulci (se approfitti delle simmetrie questo si riduce di quasi un fattore 8) e aggiungi le probabilità (non è necessario memorizzarle tutte in una volta, solo la matrice della pulce corrente (hmm, a meno che tu non sia molto intelligente, potresti desiderare una matrice di lavoro aggiuntiva) e l'attuale somma delle matrici). Mi sembra che ci siano molti modi per accelerare questo qua e là.

Ciò non implica alcuna simulazione. Tuttavia, comporta parecchi calcoli; non dovrebbe essere molto difficile determinare la dimensione della simulazione richiesta per dare risposte con una precisione leggermente superiore a 6 dp con alta probabilità e capire quale approccio sarà più veloce. Mi aspetto che questo approccio batterebbe la simulazione di un certo margine.


2
Stai rispondendo a una domanda leggermente diversa rispetto alla domanda. La domanda è porre il numero previsto di celle che sarebbero vuote dopo 50 salti. Correggimi se sbaglio, ma non vedo alcun percorso diretto dalla probabilità che una pulce finisca in un certo quadrato dopo 50 salti alla risposta di quante celle ci si aspetterebbe di essere vuote.
Andy W,

1
@Andy W - ottimo commento; tuttavia Monte Carlo può essere usato per fare questo ultimo passo ;-)

4
@Andy W: In realtà, la parte difficile era ottenere tutte quelle probabilità. Invece di aggiungerli in ogni cella, moltiplica i loro complementi: questa è la probabilità che la cella sia vuota. La somma di questi valori su tutte le celle fornisce la risposta. L'approccio di Glen_b batte la simulazione di sette o otto ordini di grandezza ;-).
whuber

@whuber, grazie per la spiegazione. In effetti, ottenere quelle probabilità in meno di un minuto sarebbe una sfida. È un puzzle divertente e grazie per il tuo contributo.
Andy W,

5

Sebbene non mi opponga all'impossibilità pratica (o impraticabilità) di una risoluzione Monte Carlo di questo problema con una precisione di 6 decimali evidenziata da whuber , penso che sia possibile ottenere una risoluzione con sei cifre di accuratezza.

In primo luogo, seguendo Glen_b , le particelle sono scambiabili in un regime stazionario, quindi è sufficiente (come in sufficienza ) monitorare l'occupazione delle diverse cellule, poiché anche questo costituisce un processo di Markov. La distribuzione delle occupazioni al successivo passaggio è completata determinata dalle occupazioni al momento attuale . Scrivere la matrice di transizione è decisamente impraticabile, ma simulare la transizione è semplice.t Kt+1tK

Secondo, come notato da shabbychef , si può seguire il processo di occupazione sui 450 quadrati dispari (o pari), che rimangono sui quadrati dispari se si considerano solo i tempi pari, cioè la matrice quadrata di Markov .K2

In terzo luogo, il problema originale considera solo la frequenza di zero occupazioni, , dopo transizioni di Markov. Dato che il punto di partenza ha un valore molto elevato per la distribuzione di probabilità stazionaria della catena di Markov e dato che si concentra su una media unica su tutte le celle, possiamo considerare che la realizzazione della catena al momento è una realizzazione dalla distribuzione di probabilità stazionaria. Ciò comporta una notevole riduzione dei costi di elaborazione, poiché possiamo simulare direttamente da questa distribuzione stazionaria50(X(t)) p 0=1p^050(X(t))(X(t))t=50π

p^0=1450i=1450I0(Xi(50))
(X(t))t=50π, che è una distribuzione multinomiale con probabilità proporzionali a 2, 3 e 4 nell'angolo pari, rispettivamente altre celle sul bordo e celle interne.

Ovviamente, la distribuzione stazionaria fornisce direttamente il numero previsto di celle vuote come pari a ,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

che è abbastanza vicino a un'approssimazione di Monte Carlo di [basato su simulazioni 10,, che hanno impiegato 14 ore sulla mia macchina]. Ma non abbastanza vicino per 6 decimali.166.11

Come commentato da whuber , le stime devono essere moltiplicate per 2 per rispondere correttamente alla domanda, quindi un valore finale di 332.2137,


1
+1 Molto penetrante. Credo che tu debba raddoppiare la tua risposta finale, perché la domanda pone su tutte le 900 celle.
whuber

1
Credo che potresti iniziare più lontano dalla distribuzione stazionaria di quanto pensi. I calcoli della forza bruta che avevo originariamente calcolato la 50a potenza della matrice di transizione usando l'aritmetica esatta (razionale). Da esso ho ottenuto un valore di 330.4725035083710 .... Forse ho fatto un errore .... Ho avuto un errore e ora ottengo 330.7211540144080 .... Un controllo approfondito suggerisce che la matrice di transizione sia corretta.
whuber

@whuber: Grazie, è davvero una possibilità. Ho cercato di trovare un argomento di accoppiamento per determinare la velocità alla stazionarietà ma non ci sono riuscito. Una simulazione Monte Carlo con il processo originale mi ha dato 333,96 oltre 10⁶ repliche e 57 ore di calcolo. Senza ulteriore garanzia sulla precisione.
Xi'an,

1
Ecco il mio ragionamento. La matrice di transizione per i 50 passi è la 50a potenza della matrice di transizione, da cui i suoi autovalori sono le 50 potenze degli autovalori. Solo gli autovettori corrispondenti a valori le cui cinquantesime potenze sono di qualsiasi dimensione apprezzabile appariranno come componenti alla fine dei tuoi 50 passi. Inoltre, quei cinquantesimi poteri ci informano del relativo errore commesso fermandosi al cinquantesimo gradino piuttosto che raggiungere veramente uno stato stabile.
whuber

1
900×900

4

Un approccio analitico può essere noioso e non ho riflettuto sulle complessità, ma ecco un approccio che potresti voler prendere in considerazione. Dato che sei interessato al numero previsto di celle che sono vuote dopo 50 anelli, devi definire una catena markov sul "No delle pulci in una cella" piuttosto che sulla posizione di una pulce (vedi la risposta di Glen_b che modella la posizione di una pulce come catena markov. Come sottolineato da Andy nei commenti a quella risposta, quell'approccio potrebbe non ottenere quello che vuoi.)

In particolare, lasciamo:

nij(t)ij

Quindi la catena markov inizia con il seguente stato:

nij(0)=1ij

Poiché le pulci si spostano in una delle quattro celle adiacenti, lo stato di una cellula cambia in base al numero di pulci presenti nella cellula bersaglio e al numero di pulci presenti nelle quattro celle adiacenti e alla probabilità che si spostino in quella cella. Utilizzando questa osservazione, è possibile scrivere le probabilità di transizione di stato per ciascuna cella in funzione dello stato di quella cella e dello stato delle celle adiacenti.

Se lo desideri, posso espandere ulteriormente la risposta, ma questo, insieme a un'introduzione di base alle catene markov, dovrebbe iniziare.


1
nij

@whuber No, non è necessario mantenere una posizione delle pulci come catena markov. Pensa a ciò che sto proponendo come una passeggiata casuale per una cella. Una cella inizialmente si trova nella posizione '1' da dove può andare a 0, 1, 2, 3, 4 o 5. La probabilità di transizione di stato dipende dagli stati delle celle adiacenti. Pertanto, la catena proposta è su uno spazio di stato ridefinito (quello dei conteggi delle celle per ogni cella) piuttosto che sulla posizione delle pulci stessa. Ha senso?

1
Ha senso, ma sembra un passo indietro, perché il numero di stati non è ora molto più grande? In un modello ci sono 900 stati - la posizione di una singola pulce - e non più di quattro transizioni da ciascuna. Il calcolo deve essere fatto solo per una singola pulce perché si muovono tutti in modo indipendente. Nel tuo sembra che uno stato sia descritto dall'occupazione di una cella insieme all'occupazione dei suoi fino a quattro vicini. Sarebbe un numero estremamente elevato di stati e anche un numero molto grande di transizioni tra gli stati. Devo fraintendere quale sia il tuo nuovo spazio di stato.
whuber

{nij}

2

se hai intenzione di percorrere il percorso numerico, una semplice osservazione: il problema sembra essere soggetto alla parità rosso-nera (una pulce su un quadrato rosso si sposta sempre in un quadrato nero e viceversa). Questo può aiutare a ridurre la dimensione del problema della metà (basta considerare due mosse alla volta e guardare solo le pulci sui quadrati rossi, diciamo.)


1
Questa è una bella osservazione. Tuttavia, l'ho trovato più fastidioso di quanto valga la pena sfruttarlo esplicitamente. Gran parte della programmazione equivale a impostare la matrice di transizione. Una volta che lo fai, basta quadrarlo e lavorare con quello. Utilizzando matrici sparse, rimuovere la metà degli zeri non risparmia comunque in qualsiasi momento.
whuber

@whuber: Sospetto che il punto di questi problemi sia imparare le tecniche di risoluzione dei problemi, piuttosto che consumare molti cicli computazionali. Simmetria, parità, ecc. Sono tecniche classiche del libro di Larson sulla risoluzione dei problemi.
Shabbychef,

1
È un buon punto. Alla fine è necessario un giudizio. Il progetto Euler sembra enfatizzare i compromessi tra intuizione matematica ed efficienza computazionale. Glen_b ha menzionato le simmetrie che vale la pena sfruttare per prime perché c'è molto da guadagnare da esse. Inoltre, usando l'aritmetica a matrice sparsa otterrai automaticamente il duplice guadagno (che tu sia a conoscenza della parità o no!).
whuber

1

Sospetto che una certa conoscenza delle catene di Markov a tempo discreto possa rivelarsi utile.


3
Questo avrebbe dovuto essere un commento, ma penso che non possiamo parlarne a questo punto.
gung - Ripristina Monica

Questo viene automaticamente contrassegnato come di bassa qualità, probabilmente perché è così corto. Puoi espanderci?
gung - Ripristina Monica

Non vedo perché: la domanda richiede argomenti che potrebbero essere utili, e questo è l'argomento che secondo me è più rilevante.
Simon Byrne,

1
Questo è stato segnalato come di bassa qualità . Ho votato che andava bene. Se guardi le altre risposte a questa discussione, sono tutte considerevolmente più lunghe. Gli standard si sono evoluti nel tempo, ma oggi questo sarebbe considerato un commento, anche se menziona un "argomento che potrebbe essere utile". Come ho detto, ho pensato che questo potesse essere il nonno così com'è. Sia che tu provi ad espandere, dipende da te. Ti stavo solo facendo sapere.
gung - Ripristina Monica
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.