执行邓普斯特的组合法则


9

DST速成班

Dempster–Shafer理论(DST)提供了一种方法,可以将各种证据来源组合成一个信念。给定一个可能陈述的列表(其中一个是正确答案),每个可能的陈述组合都被分配一个“质量”,以表示支持证据的程度。所有组合的总质量始终等于1。

从这些大规模分配中,我们可以根据该组合的真实性创建一个合理的下限(信念)和上限(合理性)。bel(X)任何集合X 的置信度都是X的所有子集(包括自身)的质量总和。pl(X)任何集合X 的合理性是“ 1-与X不相交的所有集合的质量之和”。下图说明了信念和合理性与不确定性之间的关系。

在此处输入图片说明

例如,假设有一个交通信号灯可以是Green,Yellow或Red之一。选项列表和可能的质量分配如下所示:

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 来描述这一证据。

为了吸收这两个证据以形成单一质量分布,我们可以使用Dempster的组合法则。

邓普斯特的组合法则

两个质量分配m1m2可以被组合以形成m1,2使用下面的公式,其中ABC表示可能的组合(上表的行)。

在此处输入图片说明

在此处输入图片说明

其中K是“冲突”的度量,用于重新规范化,并通过以下公式计算:

在此处输入图片说明

如下图所示,也可以用几何方式描述此过程。如果A = 011(黄色或红色)和B = 101(绿色或红色),则m1(A) * m2(B) 贡献值将添加到m1,2(001)(红色)值中。对A和B的所有可能组合重复此过程,其中A&B != 0。最后,将数组重新规格化,以使值的总和为1。

https://www.researchgate.net/profile/Fabio_Cuzzolin/publication/8337705/figure/fig1/AS:349313566822412@1460294252311/图1-Dempster's-rule-of-combination-On-the-yx-axes-are-焦点要素描绘图

这是一个简单的Java方法,它按照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;
}

要查看其在实际中的工作原理,请考虑上面的交通信号灯传感器,它们独立地给群众[0, 0, 0, 0.8, 0, 0, 0, 0.2][0, 0.3, 0, 0, 0, 0, 0.7, 0]。在执行Dempster规则后,所得关节质量[0, 0.3, 0.56, 0, 0, 0, 0.14, 0]。质量的大部分分配给“黄色”,这很直观,因为两个传感器分别返回“不是绿色”和“不是红色”。其他两个质量(“红色”为0.3,“绿色或黄色”为0.14)是由于测量的不确定性所致。

挑战

编写一个程序,该程序接受两个实数列表,并输出将Dempster规则应用于两个输入列表的结果。两个输入列表的长度将相等,并且该长度将是2的幂,并且至少应为4。对于每个列表,第一个值将始终为0,其余值都将为非负数并加最多1。

输出应为长度与输入列表相同的列表。您可以假定存在解决方案(当证据之间存在完全冲突且因此K = 1时,解决方案可能不存在)。为了对精度提出最低要求,您的程序在四舍五入到小数点后四位时必须能够产生准确的结果。

示例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]

2
我想在沙箱中发布一些内容,但是没有机会:我认为应该写大多数问题,以便任何有代数能力的人都能理解它们。是m(x)吗?什么是不相交集?您如何从20%达到一组质量?为什么需要将群众转换为另一组群众?Theta在您的第一个方程式中代表什么?AB和C代表什么?如果挑战仅基于DRC,为什么还要包括DST?无需混淆别人。

@trichoplax我添加了最低精度要求(四舍五入到小数点后四位时准确)。
PhiNotPi

Answers:


2

Perl,68个字节

包括+2 -an

在STDIN上将第一组设置为行,将第二组设置为列

perl -M5.010 dempster.pl
0.0  0.0  0.5  0.5
0.0
0.7
0.1
0.2
^D
^D

dempster.pl

#!/usr/bin/perl -an
/$/,map$H[$m%@F&$m++/@F]+=$_*$`,@F for<>;say$%++&&$_/(1-"@H")for@H

一个非常标准的高尔夫解决方案。如果我替换为@H,则不起作用@;


好一个。关于“不能使用@;”:请参见stackoverflow.com/questions/39521060/…–
Dada

@Dada堆栈溢出答案非常有用。我隐约知道这些变量不会插值,但从不了解原因。它为我在Praming Puzles&Colf中
Ton Hospel

在您进行编辑之前,您写了“以某种方式”,因此,如果您不知道为什么,那么在实现中这是一个未记录的选择……“不适用于@;”。是因为“ @H”对吗?(如果不是,那么我不好,别介意我的评论)
达达

是的,由于@H发表了这篇文章,所以我做了一些更多的实验,发现问题是字符串插值,所以我删除了“某种方式”,因为至少直接的原因很明显。但是直到您将我引到那篇文章之前,我仍然不知道为什么这种插值法不起作用。现在,我意识到这是开发人员的明智选择,因此,由于大多数用户不太了解标点符号变量,因此用户不会因意外的数组插值而感到惊讶。
Ton Hospel '16

抱歉,我读错了您先前的评论:我读的是“不是很有用”,而不是“非常有用”。好吧,我们同意!
达达
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.