如何在Problog中设置互斥概率?
How to set mutually exclusive probabilities in Problog?
一个人 X
可以是 inpatient
或 outpatient
。
鉴于 location(X,outpatient)
这个事实,Problog 如何推断 location(X,inpatient)
的概率为 0?
例如我想要一个副作用:
person(1).
location(1,inpatient).
dependent(1,opioids).
receive(1,clonidine).
query(detoxification(1,opioids,success)).
推断 location(1,outpatient)
的概率为零。
如果我写 location(X,outpatient);location(X,inpatient).
,所有查询 return 的概率都是 1。
如果我写 P::location(X,outpatient);(1-P)::location(X,inpatient).
会给出错误,因为我没有为 P
指定值。如果我为 P
指定一个值,则该值永远不会更新(正如预期的那样,因为 Prolog 将变量视为 algebraic 变量并且我没有告诉 Problog 更新 P
.
如果我写 location(X,outpatient) :- \+ location(X,inpatient).
我创建了一个负循环,如果我要指定反向目标,我必须这样做。
一个解决方案:
P::property(X,location,inpatient);(1-P)::property(X,location, outpatient) :-
inpatient(X),
P is 1.
P::property(X,location,outpatient);(1-P)::property(X,location, inpatient) :-
outpatient(X),
P is 1.
P::inpatient(X);(1-P)::outpatient(X) :-
property(X,location,inpatient),
P is 1.
P::outpatient(X);(1-P)::inpatient(X) :-
property(X,location,outpatient),
P is 1.
对于值 inpatient
的 location
的 属性,这会将 inpatient/1
绑定到 property/3
。
一个人 X
可以是 inpatient
或 outpatient
。
鉴于 location(X,outpatient)
这个事实,Problog 如何推断 location(X,inpatient)
的概率为 0?
例如我想要一个副作用:
person(1).
location(1,inpatient).
dependent(1,opioids).
receive(1,clonidine).
query(detoxification(1,opioids,success)).
推断 location(1,outpatient)
的概率为零。
如果我写 location(X,outpatient);location(X,inpatient).
,所有查询 return 的概率都是 1。
如果我写 P::location(X,outpatient);(1-P)::location(X,inpatient).
会给出错误,因为我没有为 P
指定值。如果我为 P
指定一个值,则该值永远不会更新(正如预期的那样,因为 Prolog 将变量视为 algebraic 变量并且我没有告诉 Problog 更新 P
.
如果我写 location(X,outpatient) :- \+ location(X,inpatient).
我创建了一个负循环,如果我要指定反向目标,我必须这样做。
一个解决方案:
P::property(X,location,inpatient);(1-P)::property(X,location, outpatient) :-
inpatient(X),
P is 1.
P::property(X,location,outpatient);(1-P)::property(X,location, inpatient) :-
outpatient(X),
P is 1.
P::inpatient(X);(1-P)::outpatient(X) :-
property(X,location,inpatient),
P is 1.
P::outpatient(X);(1-P)::inpatient(X) :-
property(X,location,outpatient),
P is 1.
对于值 inpatient
的 location
的 属性,这会将 inpatient/1
绑定到 property/3
。