Corso intensivo su ora legale
La teoria di Dempster-Shafer (DST) fornisce un metodo per combinare varie fonti di prove per formare una credenza. Dato un elenco di possibili affermazioni (una delle quali è la vera risposta), a ogni possibile combinazione di affermazioni viene assegnata una "massa" che indica il grado di evidenza a sostegno. La massa totale di tutte le combinazioni è sempre uguale a 1.
Da questi incarichi di massa, possiamo creare un limite inferiore (credenza) e limite superiore (plausibilità) ragionevoli sulla verità di quella combinazione. La convinzione bel(X)di qualsiasi set X è la somma delle masse di tutti i sottoinsiemi di X (incluso se stesso). La plausibilità pl(X)di qualsiasi insieme X è "1 - la somma delle masse di tutti gli insiemi disgiunti a X". Lo schema seguente mostra come credenza e plausibilità sono legate all'incertezza.
Ad esempio, supponiamo che ci sia un semaforo che potrebbe essere uno di Green, Ygiallo o Rrosso. L'elenco delle opzioni e un'eventuale assegnazione di massa sono mostrati di seguito:
binary interpretation m(X) bel(X) pl(x)
000 null 0 0 0
001 R 0.2 0.2 0.7
010 Y 0.1 0.1 0.3
011 Y||R 0.05 0.35 0.8
100 G 0.2 0.2 0.65
101 G||R 0.3 0.7 0.9
110 G||Y 0 0.3 0.8
111 G||Y||R 0.15 1 1
Queste masse possono essere annotate da un array [0, 0.2, 0.1, 0.05, 0.2, 0.3, 0, 0.15].
Ora la domanda è: come possiamo decidere quali sono le masse? Diciamo che avevamo un sensore che guardava la luce, e questo sensore indica che la luce non è verde ; tuttavia, sappiamo che esiste una probabilità del 20% che il sensore abbia inviato un segnale casuale e spurio. Questo elemento di prova può essere descritto dalla distribuzione di massa in [0, 0, 0, 0.8, 0, 0, 0, 0.2]cui {Y, R} ha una massa di 0,8 e {G, Y, R} ha una massa di 0,2.
Allo stesso modo, supponiamo che un secondo sensore indichi che la luce non è rossa , ma sappiamo anche che esiste una probabilità del 30% che il sensore sia sbagliato e che la luce sia effettivamente rossa. Questo elemento di prova può essere descritto da [0, 0.3, 0, 0, 0, 0, 0.7, 0]dove {G, Y} ha una massa di 0,7 e {R} ha una massa di 0,3.
Per assimilare queste due prove per formare un'unica distribuzione di massa, possiamo usare la Regola di Combinazione di Dempster.
Regola della combinazione di Dempster
Due assegnazione massa m1e m2possono essere combinati per formare m1,2con le formule seguenti, dove A, Be Crappresentano possibili combinazioni (righe della tabella precedente).
dove K è una misura di "conflitto", utilizzata per la rinormalizzazione, ed è calcolata da:
È anche possibile descrivere geometricamente questo processo, come nell'immagine seguente. Se A = 011(Giallo o Rosso) e B = 101(Verde o Rosso), il valore di m1(A) * m2(B) contribuisce a (viene aggiunto a) il valore di m1,2(001)(Rosso). Questo processo si ripete per tutte le possibili combinazioni di A e B dove A&B != 0. Infine, l'array viene rinormalizzato in modo che i valori si sommino a un totale di 1.
Ecco un semplice metodo Java che combina due matrici seguendo la regola di Dempster:
public static double[] combine(double[] a, double[] b) {
double[] res = new double[a.length];
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < b.length; j++) {
res[i & j] += a[i] * b[j];
}
}
for (int i = 1; i < res.length; i++) {
res[i] /= 1 - res[0];
}
res[0] = 0;
return res;
}
Per vedere come funziona in pratica, considera i sensori del semaforo sopra, che danno in modo indipendente le masse [0, 0, 0, 0.8, 0, 0, 0, 0.2]e [0, 0.3, 0, 0, 0, 0, 0.7, 0]. Dopo aver eseguito la regola di Dempster, la massa articolare risultante è [0, 0.3, 0.56, 0, 0, 0, 0.14, 0]. La maggior parte della massa è assegnata a "Giallo", il che ha un senso intuitivo dato che i due sensori hanno restituito rispettivamente "non verde" e "non rosso". Le altre due masse (0,3 per "Rosso" e 0,14 per "Verde o Giallo") sono dovute all'incertezza delle misurazioni.
La sfida
Scrivi un programma che prende due elenchi di numeri reali e genera il risultato dell'applicazione della regola di Dempster ai due elenchi di input. Le lunghezze delle due liste di input saranno uguali e quella lunghezza sarà una potenza di 2 e sarà almeno di 4. Per ogni lista, il primo valore sarà sempre 0 e i valori rimanenti saranno tutti non negativi e aggiungeranno fino a 1.
L'output deve essere un elenco con la stessa lunghezza degli elenchi di input. Puoi presumere che esista una soluzione (è possibile che non esista una soluzione in caso di conflitto totale tra prove e quindi K = 1). Per stabilire un requisito minimo in termini di precisione, il programma deve essere in grado di produrre risultati accurati quando arrotondato al quarto decimale.
Esempio I / O
in:
[0, 0, 0, 0.8, 0, 0, 0, 0.2]
[0, 0.3, 0, 0, 0, 0, 0.7, 0]
out:
[0.0, 0.3, 0.56, 0.0, 0.0, 0.0, 0.14, 0.0]
in:
[0.0, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.4]
[0.0, 0.2, 0.0, 0.2, 0.0, 0.2, 0.0, 0.4]
out:
[0.0, 0.2889, 0.0889, 0.1556, 0.0889, 0.1556, 0.0444, 0.1778]
in:
[0.0, 0.0, 0.5, 0.5]
[0.0, 0.7, 0.1, 0.2]
out:
[0.0, 0.53846, 0.30769, 0.15385]
in:
[0.0, 0.055, 0.042, 0.098, 0.0, 0.152, 0.0, 0.038, 0.031, 0.13, 0.027, 0.172, 0.016, 0.114, 0.058, 0.067]
[0.0, 0.125, 0.013, 0.001, 0.012, 0.004, 0.161, 0.037, 0.009, 0.15, 0.016, 0.047, 0.096, 0.016, 0.227, 0.086]
out: (doesn't have to be this precise)
[0.0, 0.20448589713416732, 0.11767361551134202, 0.028496524069011694, 0.11809792349331062, 0.0310457664246791, 0.041882026540181416, 0.008093533320057205, 0.12095719354780314, 0.11306959103499466, 0.06412594818690368, 0.02944697394862137, 0.06398564368086611, 0.014369896989336852, 0.03774983253978312, 0.006519633578941643]
in:
[0.0, 0.0, 0.1, 0.1, 0.0, 0.0, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.0, 0.0, 0.1, 0.0, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.1, 0.0, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.0, 0.0, 0.1, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, 0.0, 0.0, 0.1, 0.0, 0.0, 0.1, 0.0, 0.0, 0.1, 0.0, 0.1, 0.0]
out:
[0.0, 0.09090909090909094, 0.23376623376623382, 0.0, 0.07792207792207795, 0.025974025974026, 0.03896103896103895, 0.0, 0.10389610389610393, 0.05194805194805199, 0.02597402597402597, 0.0, 0.012987012987012984, 0.012987012987012993, 0.012987012987012984, 0.0, 0.09090909090909094, 0.038961038961038995, 0.06493506493506492, 0.0, 0.07792207792207796, 0.0, 0.0, 0.0, 0.012987012987012984, 0.012987012987013, 0.012987012987012984, 0.0, 0.0, 0.0, 0.0, 0.0]




