该Paper的作者提出了一种新的度量证据是否冲突的方法,度量标准是
前者就是Dempster规则中的冲突质量(1/(1-k)中的k) 后者是the distance of betting commitment,我自己翻译为"赌博信度距离" 首先,将不同的BBA进行 pignistic transform,得到专属的BetP 然后做差,找到差值最大的代表这两个BBA的赌博信度距离。
下面的代码就是求difBetp的。
import numpy
as np
;
import pandas
as pd
;
def focal_Element(boe
):
key_m
=[];
m_key
=boe
.keys
();
for item
in m_key
:
key_m
.append
(item
)
keym_set
=set(key_m
);
return keym_set
;
def transform(bba
):
bba_set
=focal_Element
(bba
);
if "empty" in bba
.keys
():
m_empty
=bba
["empty"];
else:
m_empty
=0
BetP
=dict();
item_A
=set();
item_B
=set();
for variable
in bba_set
:
sum=0.00
item_A
.update
(variable
);
for B
in bba_set
:
item_B
.update
(B
);
A_insert_B
=item_A
.intersection
(item_B
);
size_insert
=len(A_insert_B
);
size_B
=len(B
);
mass_B
= bba
[B
];
sum+=(size_insert
/size_B
)*(mass_B
/(1-m_empty
));
item_B
.clear
();
if variable
in BetP
.keys
():
BetP
[variable
] = sum;
else:
BetP
[variable
] = sum;
item_A
.clear
();
return BetP
;
def difBetP(bba1
,bba2
):
for item
in bba1
:
if item
not in bba2
.keys
():
bba2
[item
] = 0;
for item
in bba2
:
if item
not in bba1
.keys
():
bba1
[item
]=0;
setbba1
=focal_Element
(bba1
);
setbba2
=focal_Element
(bba2
);
betP1
=transform
(bba1
);
betP2
=transform
(bba2
);
difbetp
=dict();
for item_1
in setbba1
:
for item_2
in setbba2
:
if item_1
==item_2
:
value
=abs(betP1
[item_1
]-betP2
[item_2
]);
if item_1
in difbetp
.keys
():
difbetp
[item_1
]=value
;
else:
difbetp
[item_1
] = value
;
maxdifBetP
=max(difbetp
.values
());
maxdifBetP
=round(maxdifBetP
,4);
return maxdifBetP
;