뎀스터의 조합 규칙 수행


9

DST 크래쉬 코스

Dempster–Shafer Theory (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경우, 다음 식을 사용하여 A, B그리고 C(위의 테이블의 행) 가능한 조합을 나타낸다.

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

여기서 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/Fig-1-Dempster's-rule-of-combination-On-the-yx-axes-are- 묘사 된 초점 요소 _big.pbm

다음은 Dempster의 규칙에 따라 두 개의 배열을 결합하는 간단한 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]. 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 %에서 일련의 집단으로 어떻게 가나 요? 왜 매스를 다른 매스 세트로 변환해야합니까? 세타는 첫 번째 방정식에서 무엇을 나타 냅니까? AB와 C는 무엇을 상징합니까? 챌린지가 DRC에만 기반한 경우 왜 DST를 포함합니까? 사람들을 혼동 할 필요가 없습니다.

@trichoplax 최소 정밀도 요구 사항을 추가했습니다 (소수점 4 자리로 반올림하면 정확함).
PhiNotPi

답변:


2

펄, 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 : 1 Condense a String
Ton Hospel에서

편집하기 전에 "어떻게"작성했습니다. 왜 그런지 모르는 경우 구현에서 문서화되지 않은 선택입니다. "@와 함께 작동하지 않습니다." "@H"때문인가요? (그렇지 않으면 내 나쁜, 내 의견을 신경 쓰지 마십시오)
Dada

예, @H게시물을 만든 후 약간의 실험을 수행하고 문제가 문자열 보간이라는 것을 보았으므로 적어도 직접적인 이유가 분명하기 때문에 "어떻게"를 제거했습니다. 그러나 당신이 그 기사를 언급 할 때까지 나는 여전히 보간이 작동하지 않는 이유 를 알지 못했습니다 . 이제는 개발자가 의식적으로 선택한다는 것을 알고 있으므로 대부분의 사용자는 문장 부호 변수를 잘 모르기 때문에 예기치 않은 배열 보간으로 사용자가 덜 놀라게됩니다.
Ton Hospel

죄송합니다, 이전 의견을 잘못 읽었습니다. "매우 유용했습니다"대신 "별로 유용하지 않았습니다"를 읽었습니다. 그럼 우리는 동의합니다!
Dada
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.