Data una moneta con una propensione sconosciuta, genera variate da una moneta giusta in modo efficiente


10

Data una moneta con pregiudizio sconosciuto , come posso generare variate - nel modo più efficiente possibile - che sono distribuiti da Bernoulli con probabilità 0,5? Cioè, utilizzando il numero minimo di flip per variabile generata.p


3
Una soluzione semplice è di lanciare la moneta due volte: se è mappa a testa, se mappa a croce. Altrimenti, ripeti l'esperimento fino a quando uno di questi due non viene raggiunto. HTTH
cardinale

1
@cardinal: bello! Perché non aggiungere una risposta?
Neil G,

2
@Glen_b: Okay, ma puoi farlo con il numero minimo di lanci per variazione generata?
Neil G,

3
@MichaelLugo: direi che dipende sicuramente da . :-) Se sappiamo che possiamo farlo in una volta. Se sappiamo che possiamo farlo in due e, sappiamo che questo è ottimale in entrambi i casi. La risposta dovrebbe essere correlata all'entropia . Se non sappiamo nulla di diverso da quel , allora sospetto che un semplice risultato della teoria dei giochi produrrà qualcosa di simile allo schema nel mio primo commento come "ottimale" in modo appropriato. pp=1/2p=1/4p p ( 0 , 1 )H(p)pp(0,1)
cardinale

4
Ciao, Giorgio1927, e benvenuto nel sito! Aggiungi il tag "autoapprendimento" a questa domanda, in quanto consente alle persone di vedere che dovrebbero guidarti alla risposta piuttosto che fornirne semplicemente una.
jbowman,

Risposte:


6

Questo è un problema ben noto con diverse belle soluzioni che sono state discusse qui e in StackOverflow (sembra che non riesca a pubblicare più di un link ma una rapida ricerca su Google ti dà alcune voci interessanti). Dai un'occhiata alla voce di Wikipedia

http://en.wikipedia.org/wiki/Fair_coin#Fair_results_from_a_biased_coin


Spiacenti, ho modificato la domanda in modo che non sia così facilmente in grado di Google ...
Neil G

Per le persone che pensano di rispondere alla domanda, nota che questa risposta non è ottimale per la mia domanda modificata.
Neil G,

3

Questo è un problema classico, credo attribuito originariamente a von Neumann. Una soluzione è quella di continuare a lanciare la moneta in coppia fino a quando le coppie non sono diverse, quindi rimandare al risultato della prima moneta nella coppia.

Esplicitamente lascia sia il risultato di lancio , con essendo la prima moneta, e essendo la seconda moneta. Ogni moneta ha probabilità di teste. Quindi causa della simmetria, che implica . Per vedere in modo esplicito questa nota di simmetria che implica che i risultati sono o , entrambi ugualmente probabili a causa dell'indipendenza.(Xi,Yi)iXiYipP(Xi=H|XiYi)=P(Xi=T|XiYi)P(Xi=H|XiYi)=1/2 ( H , T ) ( T , H )XiYi(H,T)(T,H)

Empiricamente, il tempo di attesa fino a quando una coppia così diseguale è

1/P(XY)=11p2(1p)2=12p(1p),

che esplode quando si avvicina a 0 o 1 (il che ha senso).p


2

Non sono sicuro di come riassumere i termini in modo efficiente, ma possiamo fermarci ogni volta che il numero totale di tiri e il numero totale di successi sono tali che è anche dato che possiamo dividere i diversi ordinamenti che abbiamo potuto ottenere e in due gruppi di uguale probabilità ciascuna corrispondente ad un'etichetta in uscita diverso. Dobbiamo stare attenti a non esserci già fermati per questi elementi, vale a dire che nessun elemento ha un prefisso di lunghezza con successi tale che è pari. Non sono sicuro di come trasformarlo in un numero previsto di lanci.tnt(nt)ntnt(nt)

Illustrare:

Possiamo fermarci a TH o HT poiché questi hanno uguale probabilità. Scendendo verso il basso il triangolo di Pascal, i prossimi termini pari sono nella quarta riga: 4, 6, 4. Ciò significa che possiamo fermarci dopo i tiri se una testa si è alzata poiché possiamo creare una corrispondenza bipartita: HHHT con HHTH e tecnicamente HTHH con THHH anche se ci saremmo già fermati per quelli. Allo stesso modo, produce l'HHTT corrispondente con TTHH (il resto, ci saremmo già fermati prima di raggiungerli).(42)

Per , tutte le sequenze hanno interrotto i prefissi. Diventa un po 'più interessante su dove FFFFTTFT con FFFFTTTF.(52)(83)

Per dopo 8 tiri, la possibilità di non essersi fermato è con un numero previsto di tiri se ci siamo fermati di . Per la soluzione in cui continuiamo a far rotolare le coppie finché non si differenziano, la possibilità di non essersi fermata è con un numero atteso di tiri se ci siamo fermati a 4. Per ricorsione, un limite superiore sui salti previsti per l'algoritmo presentato è . p=12112853161161281275316=424127<4

Ho scritto un programma Python per stampare i punti di arresto:

import scipy.misc
from collections import defaultdict


bins = defaultdict(list)


def go(depth, seq=[], k=0):
    n = len(seq)
    if scipy.misc.comb(n, k, True) % 2 == 0:
        bins[(n,k)].append("".join("T" if x else "F"
                                   for x in seq))
        return
    if n < depth:
        for i in range(2):
            seq.append(i)
            go(depth, seq, k+i)
            seq.pop()

go(8)

for key, value in sorted(bins.items()):
    for i, v in enumerate(value):
        print(v, "->", "F" if i < len(value) // 2 else "T")
    print()

stampe:

FT -> F
TF -> T

FFFT -> F
FFTF -> T

FFTT -> F
TTFF -> T

TTFT -> F
TTTF -> T

FFFFFT -> F
FFFFTF -> T

TTTTFT -> F
TTTTTF -> T

FFFFFFFT -> F
FFFFFFTF -> T

FFFFFFTT -> F
FFFFTTFF -> T

FFFFTTFT -> F
FFFFTTTF -> T

FFFFTTTT -> F
TTTTFFFF -> T

TTTTFFFT -> F
TTTTFFTF -> T

TTTTFFTT -> F
TTTTTTFF -> T

TTTTTTFT -> F
TTTTTTTF -> T

Quando è sconosciuto, qualsiasi soluzione deve funzionare per limitare i valori di e . Ciò dovrebbe chiarire che la soluzione di @ Cardinal è ottimale. Il numero atteso di lanci (dato lo sconosciuto , ovviamente) è .pp0p1p2/((p(1p))
whuber

@whuber: non vedo perché dovrebbe essere ottimale. La mia soluzione si ferma in tutti gli stessi casi della sua. Tuttavia, continuerà a rotolare dopo, per esempio, mentre è possibile fermarsi.
Neil G,

Qual è la tua soluzione? Non ne vedo uno descritto qui. Penso che potremmo avere diversi concetti della soluzione di @ Cardinal. Capisco che significhi "fermarsi ogni volta che il numero di teste è uguale al numero di code e mapparlo al valore del primo risultato nella sequenza".
whuber

@whuber: Intendi questo: "Una semplice soluzione è lanciare la moneta due volte: se è HT la mappa a testa, se TH la mappa a croce. Altrimenti, ripeti l'esperimento fino a quando uno di questi due non viene raggiunto." Questo non si fermerà per HHTT. Aspetta una coppia HT o TH su un indice pari.
Neil G,

La mia soluzione è quella di trovare una corrispondenza bipartita di prefissi equiprobabili (nessuno dei quali è un prefisso un altro) e associare ogni metà della corrispondenza con teste o code.
Neil G,
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.