Messaggioda Umby » 02/01/2011, 11:26

lukul ha scritto:Dal momento che, come in figura, la cella (0,0) è nera non ci si potrà muovere
su quella(-1,1) ma su quelle (1,0) , (-1,-1) e (0,-1). Giusto?


Direi che la cella (-1, 1) (la prima in alto a sx), pur essendo nera non andrebbe conteggiata in quanto "isolata".

lukul ha scritto:E poi dovrò considerare, per proseguire il cammino, solo le celle (-2,-1), (-2,-2), (-1,-2), (0,-2), (2,0). Giusto?
Resto in attesa di una risposta per proseguire.... :cry:


La (-2, -2) non la considererei, le altre mi sembrano corrette.
Umby
Advanced Member
Advanced Member
 
Messaggio: 1123 di 2313
Iscritto il: 01/11/2008, 16:50
Località: Napoli

Messaggioda Umby » 02/01/2011, 11:34

panurge ha scritto:errr, francamente non ricordo bene che valore avessi scelto... credo 50x50. Riprovandoci ora con questi parametri la media gira attorno a 57.7
Pienamente d'accordo con te sulla scelta della casella centrale.


Come vedi la dimensione iniziale della matrice può portare a risultati diversi (prima parlavi di una media di 60 ora di 57)

Ti chiedo:
- Quante volte hai ripetuto la simulazione ?
- Quante simulazioni hanno "toccato il bordo" ?
- La scelta del colore iniziale l'hai stabilito in base al colore della casella di partenza ? Se non fosse così, in caso di casella iniziale non giusta, ti sei dovuto fermare subito (prima ancora di iniziare). In questo caso, hai considerato la simulazione nel calcolo della media ?
Umby
Advanced Member
Advanced Member
 
Messaggio: 1124 di 2313
Iscritto il: 01/11/2008, 16:50
Località: Napoli

Messaggioda lukul » 02/01/2011, 13:51

Ho creato una matrice random di 50*50 elementi contenente 0 ed 1.
Ho provato a colorare manualmente (conpaint) alcune regioni al suo interno
(quella blu, verde chiaro e rossa non incontrano i bordi,
mentre quella verde scuro, rosa e gialla si). Il problema a questo punto sarebbe
implementare un codice che partendo da una qualsiasi cella calcoli le aree delle
regioni colorate a patto che queste non arrivino ai bordi della matrice.
Buon divertimento...

Immagine

In matlab mi è bastato fare:

a=floor(mod(randn(50,50),2));
imshow(a)
Avatar utente
lukul
New Member
New Member
 
Messaggio: 32 di 88
Iscritto il: 04/12/2010, 18:18

Messaggioda lukul » 02/01/2011, 17:23

Ho provato, in breve tempo, ad implementere uno script Matlab (R)
per la risoluzione del problema:

Testo nascosto, fai click qui per vederlo
Codice:
close all, clear, clc

L=55;

a=floor(mod(randn(L,L),2));
imshow(a),colorbar

b=zeros(size(a)); % matrice di prova

x=1+(L/2)-.5;
y=1+(L/2)-.5;

b(x,y)=1;

iter=1;
while (iter<=10^5 | x==L-1 | y==L-1 )
   
D=a(x,y);   
A=zeros(1,4);

if a(x,y-1)==D, A(1,1)=1; end  % a sinistra
if a(x,y+1)==D, A(1,2)=1; end  % a destra
if a(x-1,y)==D, A(1,3)=1; end  % sopra
if a(x+1,y)==D, A(1,4)=1; end  % sotto

k=find(A); % trova i valori non nulli del vettore (A)

s=1+floor(mod(randn(1,1),length(k)));
K=k(s); % primo elemento di k

if K==1, y=y-1; b(x,y)=1; end
if K==2, y=y+1; b(x,y)=1; end
if K==3, x=x-1; b(x,y)=1; end
if K==4, x=x+1; b(x,y)=1; end

iter=iter+1;
end
figure(2),imshow(b), colormap(summer), colorbar

nnz(b)


Per verificarne la bontà ecco la rappresentazione grafica
di una matrice random (50*50) composta da 1 e da 0:

Immagine

e l'output grafico del programma:

Immagine

Il numero di caselle gialle, nella figura di sopra, è 124 (che fortuna!!!)

Ecco i valori di altri miei esperimenti:

    24 4 10 77 41
    32 119 58 10 27
    8 78 256 37 34
    66 43 8 14 13
    100 89 69 35 14
    112 272 9 6 37
    8 63 103 12 28
    60 12 18 21 46
    16 51 72 8 9
    67 71 71 77 9
    50 5 189 27 68
    13 17 6 82 10
    26 120 107 42 138
    88 21 90 56 13
    62 52 2 2 9
    196 4 52 2 31
    188 28 161 5 4

da cui il valore medio è 52.8235 e la deviazione standard è 19.8921.
N.B. tra i valori numerici non compare 1 a causa di un problema corretto
nel codice riportato sotto.
e a questo punto mi sono un pò stancato!!! ;-)



Ecco un abbozzo di codice che itera il processo:
(n.b.: a volte lo script si arresta. Ciò accade quando si raggiungono i
bordi della matrice!)
Purtroppo ora il tempo mi è tiranno, ma spero presto di risolvere.

Testo nascosto, fai click qui per vederlo
Codice:
close all, clear, clc

L=55;
replicati=8;
prove=5;

N=zeros(replicati,prove);
for X=1:replicati
for XX=1:prove

a=floor(mod(randn(L,L),2));
% figure,imshow(a),colorbar

b=zeros(size(a)); % matrice di prova

x=1+(L/2)-.5;
y=1+(L/2)-.5;

b(x,y)=1;

iter=1;
while (iter<=10^5 | x==L-1 | y==L-1 )
   
D=a(x,y);   
A=zeros(1,4);

if a(x,y-1)==D, A(1,1)=1; end  % a sinistra
if a(x,y+1)==D, A(1,2)=1; end  % a destra
if a(x-1,y)==D, A(1,3)=1; end  % sopra
if a(x+1,y)==D, A(1,4)=1; end  % sotto

k=find(A); % trova i valori non nulli del vettore (A)

s=1+floor(mod(randn(1,1),length(k)));
if isempty(k)==1
    K=0
else
K=k(s); % primo elemento di k
end

if K==0, y=y; x=x; b(x,y)=1; end
if K==1, y=y-1; b(x,y)=1; end
if K==2, y=y+1; b(x,y)=1; end
if K==3, x=x-1; b(x,y)=1; end
if K==4, x=x+1; b(x,y)=1; end

iter=iter+1;
end
% figure,imshow(b), colormap(summer), colorbar

N(X,XX)=nnz(b);
end % prove
end % replicati


Ed ecco un caso in cui si blocca:
Immagine
e l'output (alla penultima iterazione si è raggiunto il bordo):
    59 2 123 5 4
    76 108 27 82 24
    57 8 133 58 7
    50 222 48 45 4
    80 1 41 43 133
    86 5 232 86 121
    24 120 150 41 93
    1 24 113 0 0

Per ovviare aumentare la dimensione della matrice... ma fino a quanto???
penso non di molto.
Infatti portando la matrice a 75*75 elementi ecco altri risultati:

[list]20 3 2 31 79
144 18 17 49 90
25 29 9 124 12
48 46 144 92 11
14 6 1 23 15
38 46 61 138 51
19 27 2 40 2
34 105 7 7 1
32 16 7 14 15
77 74 2 107 24
165 4 35 5 66
179 45 7 9 92
33 36 6 35 88
139 24 1 2 130
36 173 16 2 8[\list]
Media: 44.4533 e deviazione standard :7.8685.

Per cui il risultato corretto dovrebbe essere compreso
, come supposto dal propositore del problema,
con la confidenza del 99%, tra $ 44.4533 \pm 2.576 xx 7.8685 $.
Arrotondando l'area della regione è compresa tra 24 e 65.

In attesa di un risultato esatto oltre che approssimato (matematici al lavoro!!! :-D ),

Vi saluto tutti con affetto augurandovi un divertente anno nuovo...
Avatar utente
lukul
New Member
New Member
 
Messaggio: 33 di 88
Iscritto il: 04/12/2010, 18:18

Messaggioda Rggb » 03/01/2011, 01:11

Non ho capito perché usare per forza una matrice (array bidimensionale) per fare questa simulazione; del resto, si suppone che la matrice/griglia sia infinita.

Credo sia meglio usare un metodo diretto
Avatar utente
Rggb
Cannot live without
Cannot live without
 
Messaggio: 1053 di 3226
Iscritto il: 30/07/2009, 17:27

Messaggioda fu^2 » 03/01/2011, 10:05

una domanda sciocca, ma perchè l'area deve essere finita (domanda già postata nel primo messaggio della discussione)? Uno potrebb coprire su una matrice infinita un'area di pixel (come li chiami te) infinita, no? (premesso: non mi sono stato a leggere tutti i codici, ma ho visto solo i risultati delle figure postate: alcuni si interrompevano perchè era stato ragiunto il bordo)...

In tal caso la media aritmetica che state facendo voi non sarebbe finita, no?...
Tutto sommato io voto questa strada, cioè che esiste sempre almeno una distribuzione di pixel e un opportuno punto iniziale per cui l'area che si può coprire è infita. Però non ho una dimostrazione, è solo un azzardo, in questi giorni ci penso su come potrei fare (e vedere se ce la faccio).

detto questo concordo con la "politica" di Rggb ;)
Avatar utente
fu^2
Cannot live without
Cannot live without
 
Messaggio: 3399 di 4213
Iscritto il: 06/09/2006, 22:04

Messaggioda Lord K » 03/01/2011, 13:23

Mi viene in mente una distribuzione binomiale (di Bernoulli), considerando un cammino di \( \displaystyle n \) passi con probabilità di continuare pari a \( \displaystyle 1/2 \) con infiniti lanci... risulta che il valore atteso di quella area sia \( \displaystyle \infty \) anche perchè il valore atteso della binomiale è un minorante del valore che l'area percorribile.
"La realtà è una invenzione di chi ha dimenticato come si sogna!" C.M.
"Le domande non sono mai stupide, esprimono dei nostri dubbi, solo le risposte possono esserlo!" Un saggio.
Lord K
Senior Member
Senior Member
 
Messaggio: 1586 di 1686
Iscritto il: 10/04/2008, 13:50
Località: Trieste ed alle volte Udine & Ferrara.

Messaggioda lukul » 03/01/2011, 19:23

Lord K: mi spiace, ma ciò che affermi contraddice i risultati numerici.

----

una domanda sciocca, ma perchè l'area deve essere finita (domanda già postata nel primo messaggio della discussione)? Uno potrebb coprire su una matrice infinita un'area di pixel (come li chiami te) infinita, no? (premesso: non mi sono stato a leggere tutti i codici, ma ho visto solo i risultati delle figure postate: alcuni si interrompevano perchè era stato ragiunto il bordo)...


fu^2: l'area "dovrebbe essere" (con elevata probabilità) finita perchè la tua matrice è binaria (consentimi questa accezione
per indicare che è composta solo dai numeri uno e da zero) e random (cioè avente una distribuzione CASUALE degli elementi)
e ti puoi muovere solo orizzontalmente e verticalmente su celle aventi lo stesso valore numerico
della cella da cui sei partito ( o 0 o 1).
Permettimi di banalizzare:
Tutto sommato io voto questa strada, cioè che esiste sempre almeno una distribuzione di pixel e un opportuno
punto iniziale per cui l'area che si può coprire è infita.

Ma a quale distribuzione ti riferisci se abbiamo detto che è random? E poi il "punto iniziale" è più logico che sia
quello centrale (a maggiore distanza dai bordi)
Supponendo la matrice come una scacchiera, i movimenti avvengono dunque solo lungo i lati delle caselle
(se queste hanno lo stesso colore) ma non lungo gli spigoli (anche se le caselle hanno lo stesso colore).

Prima o poi, con elevata probabilità , l'area che descrivi spostandoti su celle dello stesso valore
numerico si interromperà ( non potendoti muovere in diagonale ).

Per farti un esempio, ecco le aree che ho trovato in alcune simulazioni:

    12 16 4 183 134
    23 84 30 99 104
    46 19 17 72 98
    12 138 20 92 47
    18 7 18 88 39
    84 14 16 16 46
    11 1 105 147 95
    127 57 1 11 4
    18 3 16 64 99
    1 30 16 6 119
    6 7 133 149 150
    6 20 2 2 110
    11 67 46 1 183
    52 49 151 8 80
    119 21 1 1 135
    5 44 54 85 86
    7 36 98 58 164


Inutile dirti che con una matrice (75*75) ci sono rarissimi casi in cui il processo si arresta
perchè si raggiunge il bordo.
Ultima modifica di lukul il 03/01/2011, 19:57, modificato 3 volte in totale.
Avatar utente
lukul
New Member
New Member
 
Messaggio: 36 di 88
Iscritto il: 04/12/2010, 18:18

Messaggioda Rigel » 03/01/2011, 19:42

A me con griglia 1000x1000 vengono medie elevate con varianze mostruose.
Rigel
Cannot live without
Cannot live without
 
Messaggio: 631 di 7818
Iscritto il: 13/01/2010, 08:31

Messaggioda lukul » 03/01/2011, 20:02

Rigel: , tu affermi che:

A me con griglia 1000x1000 vengono medie elevate con varianze mostruose.


- posta il codice che hai utilizzato per la simulazione.
Avatar utente
lukul
New Member
New Member
 
Messaggio: 37 di 88
Iscritto il: 04/12/2010, 18:18

PrecedenteProssimo

Torna a Pensare un po' di più

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite