Thực hiện quy tắc kết hợp của Dempster


9

Khóa học sụp đổ về DST

Lý thuyết Dempster hạng Shafer (DST) cung cấp một phương pháp kết hợp nhiều nguồn chứng cứ khác nhau để tạo thành niềm tin. Đưa ra một danh sách các tuyên bố có thể (một trong số đó là câu trả lời đúng), mỗi kết hợp có thể có của các tuyên bố được gán một "khối lượng" cho biết mức độ bằng chứng hỗ trợ. Tổng khối lượng của tất cả các kết hợp luôn bằng 1.

Từ những bài tập lớn này, chúng ta có thể tạo ra một ràng buộc thấp hơn (niềm tin) và ràng buộc trên (tính hợp lý) trên sự thật của sự kết hợp đó. Niềm tin bel(X)của bất kỳ tập X nào là tổng khối lượng của tất cả các tập con của X (bao gồm cả chính nó). Tính hợp lý pl(X)của bất kỳ tập X nào là "1 - tổng khối lượng của tất cả các tập hợp tách rời với X". Biểu đồ dưới đây minh họa cách niềm tin và tính hợp lý có liên quan đến sự không chắc chắn.

nhập mô tả hình ảnh ở đây

Ví dụ: giả sử có một đèn tín hiệu giao thông có thể là một trong hai G, reen Yhoặc Red. Danh sách các tùy chọn và phân công khối có thể được hiển thị bên dưới:

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

Những khối này có thể được ký hiệu bởi một mảng [0, 0.2, 0.1, 0.05, 0.2, 0.3, 0, 0.15].

Bây giờ câu hỏi là, làm thế nào để chúng ta quyết định quần chúng là gì? Giả sử rằng chúng ta có một cảm biến nhìn vào ánh sáng và cảm biến này chỉ ra rằng ánh sáng không có màu xanh lá cây ; tuy nhiên, chúng tôi biết rằng có 20% khả năng cảm biến đã gửi tín hiệu giả, ngẫu nhiên. Đoạn bằng chứng này có thể được mô tả bằng phân phối khối lượng [0, 0, 0, 0.8, 0, 0, 0, 0.2]trong đó {Y, R} có khối lượng 0,8 và {G, Y, R} có khối lượng 0,2.

Tương tự, giả sử rằng một số cảm biến thứ hai chỉ ra rằng ánh sáng không phảimàu đỏ , nhưng chúng ta cũng biết rằng có 30% khả năng cảm biến bị sai và ánh sáng thực sự là màu đỏ. Đoạn bằng chứng này có thể được mô tả bằng cách [0, 0.3, 0, 0, 0, 0, 0.7, 0]{G, Y} có khối lượng 0,7 và {R} có khối lượng 0,3.

Để đồng hóa hai mẩu bằng chứng này để tạo thành một bản phân phối hàng loạt duy nhất, chúng ta có thể sử dụng Quy tắc kết hợp của Dempster.

Quy tắc kết hợp của Dempster

Hai phân khối m1m2có thể được kết hợp để tạo thành m1,2bằng cách sử dụng công thức sau đây, nơi A, BCđại diện cho tổ hợp có thể (các hàng của bảng trên).

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Trong đó K là thước đo "xung đột", được sử dụng để tái chuẩn hóa và được tính bằng:

nhập mô tả hình ảnh ở đây

Cũng có thể mô tả quá trình này về mặt hình học, như trong hình ảnh dưới đây. Nếu A = 011(Vàng hoặc Đỏ) và B = 101(Xanh hoặc Đỏ), thì giá trị m1(A) * m2(B) đóng góp cho (được thêm vào) giá trị của m1,2(001)(Đỏ). Quá trình này được lặp lại cho tất cả các kết hợp có thể có của A và B trong đó A&B != 0. Cuối cùng, mảng được chuẩn hóa lại để các giá trị cộng tổng cộng 1.

https://www.researchgate.net/profile/Fabio_Cuzzolin/publication/8337705/figure/fig1/AS:349313566822412@1460294252311/Fig-1-Dempster's-rule-of-combination-On- miêu tả-the-focal-Elements_big.pbm

Đây là một phương thức Java đơn giản kết hợp hai mảng theo quy tắc của 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;
}

Để xem cách thức hoạt động của nó trong thực tế, hãy xem xét các cảm biến đèn giao thông ở trên, độc lập cung cấp cho quần chúng [0, 0, 0, 0.8, 0, 0, 0, 0.2][0, 0.3, 0, 0, 0, 0, 0.7, 0]. Sau khi thực hiện quy tắc của Dempster, khối lượng chung kết quả là [0, 0.3, 0.56, 0, 0, 0, 0.14, 0]. Phần lớn khối lượng được gán cho "Màu vàng", điều này có ý nghĩa trực quan khi hai cảm biến trả về "không phải màu xanh lá cây" và "không màu đỏ" tương ứng. Hai khối lượng khác (0,3 cho "Đỏ" và 0,14 cho "Xanh hoặc Vàng") là do độ không đảm bảo của các phép đo.

Các thách thức

Viết chương trình lấy hai danh sách các số thực và đưa ra kết quả của việc áp dụng quy tắc của Dempster cho hai danh sách đầu vào. Độ dài của hai danh sách đầu vào sẽ bằng nhau và độ dài đó sẽ là lũy thừa bằng 2 và sẽ có ít nhất 4. Đối với mỗi danh sách, giá trị đầu tiên sẽ luôn là 0 và các giá trị còn lại sẽ không âm và thêm lên tới 1.

Đầu ra phải là một danh sách có cùng độ dài với danh sách đầu vào. Bạn có thể giả sử rằng một giải pháp tồn tại (có thể giải pháp không tồn tại khi có xung đột hoàn toàn giữa bằng chứng và do đó K = 1). Để đặt một yêu cầu tối thiểu về độ chính xác, chương trình của bạn phải có khả năng tạo ra kết quả chính xác khi được làm tròn đến bốn chữ số thập phân.

Ví dụ 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ột số điều tôi muốn đăng trong hộp cát, nhưng không có cơ hội: Tôi nghĩ rằng hầu hết các câu hỏi nên được viết để bất kỳ ai thành thạo về đại số đều có thể hiểu chúng .. đây là một vài điều mà tôi nghĩ nên được làm rõ: Điều gì là m (x)? một tập hợp rời rạc là gì? Làm thế nào để bạn có được từ 20% đến một tập hợp quần chúng? Tại sao bạn cần phải chuyển đổi khối lượng sang một nhóm quần chúng khác? theta thể hiện điều gì trong phương trình đầu tiên của bạn? AB và C đại diện cho cái gì? Tại sao bao gồm DST nếu thử thách chỉ dựa trên DRC? Không cần nhầm lẫn mọi người.

@trichoplax Tôi đã thêm một yêu cầu độ chính xác tối thiểu (chính xác khi được làm tròn đến 4 chữ số thập phân).
PhiNotPi

Câu trả lời:


2

Perl, 68 byte

Bao gồm +2 cho -an

Đặt tập đầu tiên là hàng và tập thứ hai dưới dạng cột trên 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

Một giải pháp golf khá chuẩn. Không hoạt động nếu tôi thay thế @Hbằng@;


Đẹp một. Giới thiệu về "không hoạt động với @;": xem stackoverflow.com/questions/39521060/ cấp
Dada

@Dada Câu trả lời tràn chồng đó rất hữu ích. Tôi mơ hồ biết các biến này không nội suy nhưng không bao giờ hiểu lý do. Và nó tiết kiệm cho tôi một byte trong Praming Puzles & Colf: Condense a String
TonMedel

Trước khi chỉnh sửa, bạn đã viết "bằng cách nào đó", vì vậy trong trường hợp bạn không biết tại sao, đó cũng là một lựa chọn không có giấy tờ trong việc triển khai ... "Không hoạt động với @;" là vì "@H" phải không? (Nếu không phải là xấu của tôi, đừng bận tâm đến nhận xét của tôi)
Dada

Có, vì @Hsau khi tôi đăng bài, tôi đã thử nghiệm thêm một chút và thấy vấn đề là nội suy chuỗi nên tôi đã xóa "bằng cách nào đó" vì ít nhất lý do trực tiếp đã rõ ràng. Nhưng cho đến khi bạn giới thiệu tôi đến bài viết đó, tôi vẫn không biết TẠI SAO kiểu nội suy đó không hoạt động. Bây giờ tôi nhận ra rằng đó là một lựa chọn có ý thức của các nhà phát triển nên người dùng sẽ ít ngạc nhiên hơn bởi phép nội suy mảng bất ngờ vì hầu hết người dùng không biết nhiều về các biến dấu chấm câu.
TonMedel

Ôi xin lỗi, tôi đã đọc sai nhận xét trước đó của bạn: Tôi đọc "không hữu ích lắm" thay vì "rất hữu ích". Thôi thì chúng ta đồng ý rồi!
Dada
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.