Newsgroup: it.hobby.enigmi
Titolo: finchè non ti accontenti

In un urna ci sono n palline numerate da 1 a n. Estrai una pallina, ed a
questo punto puoi:
- intascare il valore della pallina in euro
- reinserire la pallina ed aggiungerne un'altra identica per provare una
estrazione piu` fortunata.
Al massimo puoi rifiutare m volte, dopodiche` devi accettare il responso
dell'urna.
Qual e` la strategia che massimizza la speranza di vincita?
Proviamo un caso semplice, n=3 ed m=2, poi se e` il caso allarghiamo
l'analisi.
Ciao, Silv:o)

 l'analisi.
Beh, se estrai 3 stai.
Se estrai 2 alla prima, riestrai
Se estrai 1 alla prima, riestrai.
Alla seconda riestrai con 1, mentre con 2 e' indifferente.
Ho fatto la prova e vince circa 2.5560 dobloni a giro se "sta" con 2 alla
seconda
mentre ne vince 2.5568 se con 2 alla seconda prova la terza estrazione.
Per generalizzare basta calcolare il valore aspettato
del massimo di (n) su j estrazioni, con j che va
da m a 0 (le estrazioni rimanenti). Siccome
pero' il problema mi ricorda alcuni pirati molto
sanguinari, non mi stupirei di essere smentito.
Allego il programma:
pro prova
 tot=0.
 aa=0
 for n=1.,1000000. do begin
   A=1+floor(randomu(aa)*3.)
   if (A eq 3 ) then goto, jump
   A=1+floor(randomu(aa)*3.)
   if (A ge 2)  then goto, jump
   A=1+floor(randomu(aa)*3.)
   jump: tot=tot+A
 end
print, tot
end

 estrazione piu` fortunata.
OOOOOOPs forse non c'ho capito nulla!!!
che vuol dire aggiungerne un'altra identica ?
che se estraggo un "2" rimetto dentro 2 "2"?
se e' cosi' quello che ho appena detto non vale.....
SandroSan

Metto direttamente il listato.
La riga commentata puo' essere sostituita.
Anche qui esistono 2 strategie analoghe.
Si vince in media 2.39 euri a giro....
Sandro.
pro prova
 tot=0.
 aa=0
 for n=1.,100000. do begin
  hav=0.
   k=[1,2,3]
   A=gf(k)
   if (A eq 3 ) then goto, jump ;se viene 3 accetto
   if (A eq 2) then goto, jump2 ;se viene 2 rigioco
   if (A eq 1) then goto, jump1; se viene 1 rigioco
   jump1: k=[1,1,2,3]
   A=gf(k)
   if (A eq 3 ) then goto, jump; se viene 3 accetto
   if (A eq 2) then goto, jump; se viene 2 accetto
   if (A eq 1) then goto, jump11; se viene 1 rigioco
   jump2: k=[1,2,2,3]
   A=gf(k)
   if (A eq 3 ) then goto, jump; accetto
   if (A eq 2) then goto, jump ;    accetto        oppure rigioco (jump22)
   if (A eq 1) then goto, jump11; rigioco
   jump11: k=[1,1,1,2,3]
   A=gf(k)
   goto, jump
   jump22: k=[1,2,2,2,3]
   A=gf(k)
   goto, jump
   jump: tot=tot+A ;mi prendo quello che e' venuto
 end
print, tot
end
function gf, k
g=floor(randomu(aa)*N_elements(k))
gf=k(g)
return, gf
end

 che se estraggo un "2" rimetto dentro 2 "2"?
Proprio così. Ho aggiunto questa regola per scoraggiare un po` le rinunce,
infatti se peschi un numero al di sotto della media e rinunci, al passo
successivo la vincita media sarà più bassa.
Il problema sta nascendo qui, non so se sia gia` stato trattato, quindi
modifiche e varianti sono ben accette, magari si possono aprire nuovi
fronti.
Per esempio avevo anche pensato di far pagare una posta per ogni rinuncia.
Comunque per ora affrontiamo questo.
Ciao, Silv:o)


Infatti si guadagna di meno: 2.4 euri contro i 2.55 precedenti...pero'
attendo conferme.
Ciao.Sandro.san