Crash Course บน 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
มวลชนเหล่านี้สามารถ notated [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
ในการหลอมรวมหลักฐานทั้งสองชิ้นนี้เพื่อสร้างการกระจายตัวจำนวนมากเราสามารถใช้ Rule of Combination ของ Dempster
Dempster's Rule of Combination
ที่ได้รับมอบหมายมวลสอง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 ที่รวมสองอาร์เรย์ตามกฎของ 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]หลังจากดำเนินการกฎทำการของที่เกิดมวลร่วมกัน[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]




