Coelestis - Il Forum Italiano di Astronomia

Coelestis - Il Forum Italiano di Astronomia (http://www.trekportal.it/coelestis/index.php)
-   Rudi Mathematici (http://www.trekportal.it/coelestis/forumdisplay.php?f=11)
-   -   Estrazioni casuali (http://www.trekportal.it/coelestis/showthread.php?t=42400)

aspesi 19-05-16 17:24

Re: Estrazioni casuali
 
Quote:

astromauh (Scrivi 778888)

Questa è la strategia migliore, che da una probabilità di vittoria del 39,87% (circa), che è però inferiore anche se di pochissimo al 40% che sarebbe necessario per andare in pari, se la vincita è 2,5 volte la posta.

:hello:

:ok:
Sei fortissimo (come programmatore...:)) e anche molto rapido.

La probabilità è proprio 39,8690476... (esattamente 3349/8400)

Riesci a generalizzare per ogni n? E qual è la probabilità per n numeri tendente all'infinito?

:hello:

Mizarino 19-05-16 18:40

Re: Estrazioni casuali
 
Complimenti ad Astromauh! :ok:

astromauh 19-05-16 19:13

Re: Estrazioni casuali
 
Quote:

Mizarino (Scrivi 778897)
Complimenti ad Astromauh! :ok:

Ma non ho fatto nulla di particolare, una semplice simulazione. :)

C'è solo uno "scoglio" iniziale quando si incomincia a pensare a questi numeri.

Perché ti vengono in mente dei numeri giganteschi del tipo un miliardo di miliardi di miliardi alla miliardesima potenza ... :D

Ma poi ti accorgi che per rappresentare il gioco vanno benissimo gli interi da 1 a 10, e il
resto viene da se.

:hello:

aspesi 19-05-16 19:31

Re: Estrazioni casuali
 
E' interessante notare che se buttavi i primi 4 numeri (invece dei primi 3), ottenevi una probabilità molto vicina (39,8253968 %) e con la tua simulazione sei riuscito ad apprezzare la differenza rispetto a 3 numeri (che è lo 0,1%)

:hello:

astromauh 19-05-16 20:17

Re: Estrazioni casuali
 
Ma forse ho rischiato di sbagliare, perché di trials ne ho fatti 10 milioni che non sono tantissimi. Non mi andava di aspettare di più per le risposte.

:hello:

astromauh 20-05-16 07:30

Re: Estrazioni casuali
 
Il codice della simulazione è questo qui:

Codice:

<%@ import namespace = "system.drawing"%>
<%@ import namespace = "system.drawing.imaging"%>
<%@ import namespace= "system.drawing.drawing2d"%>
<%@ import namespace= "system.drawing.text"%>
<%@ import namespace = "system.math"%>
<script language ="vb" runat = "server">

Dim x as integer

Dim H(10) as integer

Dim ok as byte

Dim Vittorie as integer

Dim v as integer

Dim volte as integer = 10000000


function rand32()
Static V(99) as Double
Static iff as integer
Static Randi as New Random()
Dim j as integer

if iff = 0 then
randomize()
iff = 1

for J = 1 TO 97
V(J)= Randi.NextDouble()
next
end if
 
j= Randi.Next(1,98)
RAND32= V(J)
V(j)= Randi.NextDouble()
end function




function mischia(numeri, parte)
Dim x as integer
Dim i as integer
Dim C(numeri) as integer
Dim S as integer
Dim j as integer

''''''''''''''''''''''randomize()


for i = 1 to numeri
C(i) = i
next

S=numeri

for i= 1 to parte


j = int(s * rand32) + 1


H(i) = C(j)


C(j) = C(S)  ''''''questo numero viene sostituito con l'ultimo della serie
S = S - 1    ''''''e la serie viene diminuita di una unità
next

end function






</script>

<%

Server.ScriptTimeOut= 6000000


for v= 1 to volte

mischia(10,10)


''''''''for x = 1 to 10 : response.write(H(x) & "&nbsp;") : next : response.write("<br>")


ok = 1



if 5=55 then

if H(1) = 10 OR H(2)= 10  OR H(3)= 10  OR H(4)= 10  OR H(5)= 10 then ok= 0

if H(6)<>10 AND H(6) > H(1) AND H(6) > H(2) AND H(6) > H(3) AND H(6) > H(4) AND H(6) > H(5) then  ok= 0

if H(7)<>10 AND H(7) > H(1) AND H(7) > H(2) AND H(7) > H(3) AND H(7) > H(4) AND H(7) > H(5)  AND H(7) > H(6) then  ok= 0

if H(8)<>10 AND H(8) > H(1) AND H(8) > H(2) AND H(8) > H(3) AND H(8) > H(4) AND H(8) > H(5)  AND H(8) > H(6)  AND H(8) > H(7) then  ok=0

if H(9)<>10 AND H(9) > H(1) AND H(9) > H(2) AND H(9) > H(3) AND H(9) > H(4) AND H(9) > H(5)  AND H(9) > H(6)  AND H(9) > H(7)  AND H(9) > H(8) then  ok= 0

end if



if 4=44 then

if H(1) = 10 OR H(2)= 10  OR H(3)= 10  OR H(4)= 10 then ok= 0


if H(5)<>10 AND H(5) > H(1) AND H(5) > H(2) AND H(5) > H(3) AND H(5) > H(4) then  ok= 0

if H(6)<>10 AND H(6) > H(1) AND H(6) > H(2) AND H(6) > H(3) AND H(6) > H(4) AND H(6) > H(5) then  ok= 0

if H(7)<>10 AND H(7) > H(1) AND H(7) > H(2) AND H(7) > H(3) AND H(7) > H(4) AND H(7) > H(5)  AND H(7) > H(6) then  ok= 0

if H(8)<>10 AND H(8) > H(1) AND H(8) > H(2) AND H(8) > H(3) AND H(8) > H(4) AND H(8) > H(5)  AND H(8) > H(6)  AND H(8) > H(7) then  ok=0

if H(9)<>10 AND H(9) > H(1) AND H(9) > H(2) AND H(9) > H(3) AND H(9) > H(4) AND H(9) > H(5)  AND H(9) > H(6)  AND H(9) > H(7)  AND H(9) > H(8) then  ok= 0

end if






if 3=3 then

if H(1) = 10 OR H(2)= 10  OR H(3)= 10  then ok= 0


if H(4)<>10 AND H(4) > H(1) AND H(4) > H(2) AND H(4) > H(3) then  ok= 0


if H(5)<>10 AND H(5) > H(1) AND H(5) > H(2) AND H(5) > H(3) AND H(5) > H(4) then  ok= 0

if H(6)<>10 AND H(6) > H(1) AND H(6) > H(2) AND H(6) > H(3) AND H(6) > H(4) AND H(6) > H(5) then  ok= 0

if H(7)<>10 AND H(7) > H(1) AND H(7) > H(2) AND H(7) > H(3) AND H(7) > H(4) AND H(7) > H(5)  AND H(7) > H(6) then  ok= 0

if H(8)<>10 AND H(8) > H(1) AND H(8) > H(2) AND H(8) > H(3) AND H(8) > H(4) AND H(8) > H(5)  AND H(8) > H(6)  AND H(8) > H(7) then  ok=0

if H(9)<>10 AND H(9) > H(1) AND H(9) > H(2) AND H(9) > H(3) AND H(9) > H(4) AND H(9) > H(5)  AND H(9) > H(6)  AND H(9) > H(7)  AND H(9) > H(8) then  ok= 0

end if



if 2=22 then

if H(1) = 10 OR H(2)= 10  then ok= 0


if H(3)<>10 AND H(3) > H(1) AND H(3) > H(2)  then  ok= 0

if H(4)<>10 AND H(4) > H(1) AND H(4) > H(2) AND H(4) > H(3) then  ok= 0

if H(5)<>10 AND H(5) > H(1) AND H(5) > H(2) AND H(5) > H(3) AND H(5) > H(4) then  ok= 0

if H(6)<>10 AND H(6) > H(1) AND H(6) > H(2) AND H(6) > H(3) AND H(6) > H(4) AND H(6) > H(5) then  ok= 0

if H(7)<>10 AND H(7) > H(1) AND H(7) > H(2) AND H(7) > H(3) AND H(7) > H(4) AND H(7) > H(5)  AND H(7) > H(6) then  ok= 0

if H(8)<>10 AND H(8) > H(1) AND H(8) > H(2) AND H(8) > H(3) AND H(8) > H(4) AND H(8) > H(5)  AND H(8) > H(6)  AND H(8) > H(7) then  ok=0

if H(9)<>10 AND H(9) > H(1) AND H(9) > H(2) AND H(9) > H(3) AND H(9) > H(4) AND H(9) > H(5)  AND H(9) > H(6)  AND H(9) > H(7)  AND H(9) > H(8) then  ok= 0

end if




'''''''response.write("ok = " & ok &"<br>")


Vittorie = vittorie + ok

next

response.write("P = " & vittorie/volte &"<br>")


%>

<br><br><br>


P2 = 0,3658645

P3 = 0,3987533

P4 = 0,3984353

P5 = 0,3726614


Nel codice ci sono due routine, una che serve a trovare dei numeri random più random di quelli che si ottengono usando il comando RND, suggeritami a suo tempo da Mizarino. Ed un'altra procedura che serve ad estrarre 10 numeri in modo casuale.

Mentre il cuore del programma è questo:


if 3=3 then

if H(1) = 10 OR H(2)= 10 OR H(3)= 10 then ok= 0

if H(4)<>10 AND H(4) > H(1) AND H(4) > H(2) AND H(4) > H(3) then ok= 0

if H(5)<>10 AND H(5) > H(1) AND H(5) > H(2) AND H(5) > H(3) AND H(5) > H(4) then ok= 0

if H(6)<>10 AND H(6) > H(1) AND H(6) > H(2) AND H(6) > H(3) AND H(6) > H(4) AND H(6) > H(5) then ok= 0

if H(7)<>10 AND H(7) > H(1) AND H(7) > H(2) AND H(7) > H(3) AND H(7) > H(4) AND H(7) > H(5) AND H(7) > H(6) then ok= 0

if H(8)<>10 AND H(8) > H(1) AND H(8) > H(2) AND H(8) > H(3) AND H(8) > H(4) AND H(8) > H(5) AND H(8) > H(6) AND H(8) > H(7) then ok=0

if H(9)<>10 AND H(9) > H(1) AND H(9) > H(2) AND H(9) > H(3) AND H(9) > H(4) AND H(9) > H(5) AND H(9) > H(6) AND H(9) > H(7) AND H(9) > H(8) then ok= 0

end if

Siccome 3 è sempre uguale a 3, questa parte del codice viene sempre eseguita.

Mentre invece siccome 2 non è mai uguale a 22 quell'altra parte del codice non viene eseguita.

Utilizzo questo "trucchetto" per fare in modo che solo alcune parti del codice vengano eseguite, senza doverle cancellare.

Per decidere quale era la strategia migliore, ho dovuto provarle tutte. Con 5, 4, 3, e 2 numeri iniziali.

:hello:

astromauh 20-05-16 08:09

Re: Estrazioni casuali
 
Quel codice si legge così.

OK viene inizializzato OK= 1.

Il che significa che inizialmente ad ogni partita viene attribuita la vittoria al concorrente.

Se il numero più alto, rappresentato dal 10, viene estratto tra i primi tre numeri, il concorrente perde. OK = 0.

Ma in concorrente perde anche nel caso che il quarto numero sia diverso da 10 e sia maggiore di tutti i numeri estratti prima.

E lo stesso vale anche per il quinto, il sesto... fino al nono numero.

Per cui se il concorrente non incappa in nessuno di questi casi che lo fanno perdere, vuol dire che ha vinto quella partita.

Dividendo il totale delle partite vinte, per il totale delle partite giocate, si ottiene la probabilità di vittoria.

Per rispondere invece alla domanda di Aspesi, ossia qual è la strategia migliore per un n qualsiasi e per n tendente ad infinito, non credo di poter procedere nello stesso (facile) modo.

Ho trovato la soluzione del quiz, senza averlo capito. Ho usato un trucchetto da "astrologo". :D

aspesi 20-05-16 09:09

Re: Estrazioni casuali
 
Il "procedimento" che hai adottato è abbastanza chiaro; viceversa, il listing con le istruzioni, per me, è più buio di una notte di nebbia fitta... :D

Se i biglietti fossero 100, quanti bisognerebbe scartarne (controllando il numero più alto che vi è contenuto, per confrontarlo via via con i numeri successivi) affinché si abbia la più alta probabilità di vincere?

E qual è il valore della probabilità minima (utilizzando la strategia migliore), che si ha per n biglietti -----> infinito ?

:hello:

astromauh 20-05-16 10:03

Re: Estrazioni casuali
 
Lascio questa soluzione ad Erasmus. :D

Lui è molto più bravo di me, quando si tratta di generalizzare.

:hello:

astromauh 20-05-16 10:10

Re: Estrazioni casuali
 
Quote:

aspesi (Scrivi 778939)
Il "procedimento" che hai adottato è abbastanza chiaro; viceversa, il listing con le istruzioni, per me, è più buio di una notte di nebbia fitta... :D

Ci sono scritte le stesse cose che ti ho detto nel linguaggio corrente.

Probabilmente a Mizarino questo codice sembrerà poco elegante... :(

Lui avrebbe trovato il modo di scrivere le istruzioni in modo più sintetico, perché ci tiene all'eleganza, ed è pure parsimonioso. ;)

Ma io andavo di fretta perché volevo risponderti velocemente.

:hello:


Tutti gli orari sono GMT. Attualmente sono le 20:19.

Powered by vBulletin versione 3.6.7
Copyright ©: 2000 - 2021, Jelsoft Enterprises Ltd.
Traduzione italiana a cura di: vBulletinItalia.it