Ускоренный курс по DST
Теория Демпстера-Шафера (DST) предоставляет метод для объединения различных источников доказательств для формирования убеждения. Учитывая список возможных утверждений (одно из которых является верным ответом), каждой возможной комбинации утверждений присваивается «масса», указывающая степень подтверждающих доказательств. Общая масса всех комбинаций всегда равна 1.
Из этих массовых заданий мы можем создать разумную нижнюю границу (убеждение) и верхнюю границу (правдоподобие) истинности этой комбинации. Вера bel(X)
любого множества X является суммой масс всех подмножеств X (включая себя). Правдоподобие pl(X)
любого множества X есть «1 - сумма масс всех множеств, не пересекающихся с X». Диаграмма ниже показывает, как вера и правдоподобие связаны с неопределенностью.
Например, предположим, что есть светофор, который может быть одним из следующих: G
reen, Y
ellow или R
ed. Список опций и возможного массового назначения показан ниже:
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
Эти массы могут быть записаны массивом [0, 0.2, 0.1, 0.05, 0.2, 0.3, 0, 0.15]
.
Теперь вопрос, как мы решаем, что такое массы? Скажем, у нас был датчик, смотрящий на свет, и этот датчик показывает, что свет не зеленый ; тем не менее, мы знаем, что существует 20% вероятность того, что датчик отправил случайный, ложный сигнал. Это доказательство может быть описано массовым распределением, [0, 0, 0, 0.8, 0, 0, 0, 0.2]
где {Y, R} имеет массу 0,8, а {G, Y, R} имеет массу 0,2.
Аналогично, предположим, что какой-то второй датчик показывает, что индикатор не красный , но мы также знаем, что есть 30% -ная вероятность, что датчик неисправен, а индикатор на самом деле красный. Это доказательство можно описать тем, [0, 0.3, 0, 0, 0, 0, 0.7, 0]
где масса {G, Y} равна 0,7, а масса {R} равна 0,3.
Чтобы ассимилировать эти два доказательства для формирования единого массового распределения, мы можем использовать Правило комбинации Демпстера.
Правило комбинации Демпстера
Два массового назначения m1
и m2
могут быть объединены , чтобы сформировать с m1,2
использованием следующих формул, где A
, B
и C
представляют собой возможные комбинации (строки приведенной выше таблицы).
где K - это мера «конфликта», используемая для перенормировки, и рассчитывается по формуле:
Также возможно описать этот процесс геометрически, как на рисунке ниже. Если A = 011
(желтый или красный) и B = 101
(зеленый или красный), то значение m1(A) * m2(B)
способствует (добавляется к) значению m1,2(001)
(красный). Этот процесс повторяется для всех возможных комбинаций A и B, где A&B != 0
. Наконец, массив перенормируется, так что значения в сумме составляют 1.
Вот простой Java-метод, который объединяет два массива в соответствии с правилом Демпстера:
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;
}
Чтобы увидеть, как это работает на практике, рассмотрим датчики светофора выше, которые независимо дают массы [0, 0, 0, 0.8, 0, 0, 0, 0.2]
и [0, 0.3, 0, 0, 0, 0, 0.7, 0]
. После выполнения правила Демпстера полученная масса сустава равна [0, 0.3, 0.56, 0, 0, 0, 0.14, 0]
. Большая часть массы назначается «Желтому», что имеет интуитивный смысл, учитывая, что два датчика возвращают «не зеленый» и «не красный» соответственно. Две другие массы (0,3 для «Красного» и 0,14 для «Зеленого или Желтого») обусловлены неопределенностью измерений.
Соревнование
Напишите программу, которая берет два списка действительных чисел и выводит результат применения правила Демпстера к двум спискам ввода. Длина двух входных списков будет равна, и эта длина будет степенью 2, и будет по крайней мере 4. Для каждого списка первое значение всегда будет 0, а все остальные значения будут неотрицательными и добавят до 1.
Выходными данными должен быть список такой же длины, что и входные списки. Можно предположить, что решение существует (решение может не существовать, когда существует полный конфликт между доказательствами и, следовательно, K = 1). Чтобы установить минимальные требования к точности, ваша программа должна иметь возможность получать точные результаты при округлении до четырех десятичных знаков.
Пример ввода / вывода
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]