2:- use_module(library(lists),[max_list/2]). 3:- ['working/rte.mod']. 4
5model(T,dabs,I,Gold,V):- mod(_,T,I,Gold,V,_,_,_).
6model(T,drel,I,Gold,V):- mod(_,T,I,Gold,_,V,_,_).
7model(T,fabs,I,Gold,V):- mod(_,T,I,Gold,_,_,V,_).
8model(T,frel,I,Gold,V):- mod(_,T,I,Gold,_,_,_,V).
9
10model(T,aabs,I,Gold,V):- alt(_,T,I,Gold,V,_).
11model(T,arel,I,Gold,V):- alt(_,T,I,Gold,_,V).
12
13model(T,wabs,I,Gold,V):- mwn(_,T,I,Gold,V,_).
14model(T,wrel,I,Gold,V):- mwn(_,T,I,Gold,_,V).
15
16model(T,dabs,fabs,I,Gold,V1,V2):- mod(_,T,I,Gold,V1,_,V2,_).
17model(T,dabs,frel,I,Gold,V1,V2):- mod(_,T,I,Gold,V1,_,_,V2).
18model(T,dabs,drel,I,Gold,V1,V2):- mod(_,T,I,Gold,V1,V2,_,_).
19model(T,frel,dabs,I,Gold,V1,V2):- mod(_,T,I,Gold,V2,_,_,V1).
20model(T,drel,fabs,I,Gold,V1,V2):- mod(_,T,I,Gold,_,V1,V2,_).
21model(T,fabs,drel,I,Gold,V1,V2):- mod(_,T,I,Gold,_,V2,V1,_).
22model(T,drel,frel,I,Gold,V1,V2):- mod(_,T,I,Gold,_,V1,_,V2).
23model(T,frel,drel,I,Gold,V1,V2):- mod(_,T,I,Gold,_,V2,_,V1).
24
25estimate(Task,Fea,Acc):-
26 findall(gold(V,Gold,I),model(Task,Fea,I,Gold,V),L),
27 est1(L,Fea,0,best(0,0,[]),Acc).
28
29est1(_,F,T1,Best,Acc):-
30 \+ ( model(_,F,_,_,T2) ,T2 > T1), !,
31 Best = best(Tau,Acc,Evidence),
32 length(Evidence,Len),
33 format('informative if ~p diff >= ~p (accuracy: ~p, n=~p)~n',[F,Tau,Acc,Len]).
35
36est1(L,F,T1,best(T,Best,IDs),Max):-
37 calc1(L,informative,T1,0,0,Acc,NewIDs),
38 ( Acc > Best, !, NewBest = best(T1,Acc,NewIDs); NewBest = best(T,Best,IDs) ),
39 step(F,T1,T2),
40 est1(L,F,T2,NewBest,Max).
41
42
43estimate(Task,F1,F2,Acc):-
44 findall(gold(V1,V2,Gold,I),model(Task,F1,F2,I,Gold,V1,V2),L),
45 est2(L,F1,F2,0,0,best(0,0,0,[]),Acc).
46
47est2(_,FD,FF,TauD,TauF,Best,Acc):-
48 \+ (model(_,FD,FF,_,_,DTau,_), DTau > TauD),
49 \+ (model(_,FD,FF,_,_,_,FTau), FTau > TauF), !,
50 Best = best(Tau1,Tau2,Acc,_Evidence),
51 format('informative if ~p diff >= ~p OR ~p diff >= ~p (accuracy ~p)~n',[FD,Tau1,FF,Tau2,Acc]).
53
54est2(L,FD,FF,TauD1,TauF1,best(TauD,TauF,Best,IDs),Max):-
55 calc2(L,informative,TauD1,TauF1,0,0,Acc,NewIDs),
56 ( Acc > Best, !, NewBest = best(TauD1,TauF1,Acc,NewIDs); NewBest = best(TauD,TauF,Best,IDs) ),
57 (
58 model(_,FD,FF,_,_,_,FTau), FTau > TauF1, !,
59 step(FF,TauF1,TauF2),
60 TauD2 = TauD1
61 ;
62 step(FD,TauD1,TauD2),
63 TauF2 = 0
64 ),
65 est2(L,FD,FF,TauD2,TauF2,NewBest,Max).
66
67
68step(dabs,T1,T2):- !, T2 is T1 + 1.
69step(fabs,T1,T2):- !, T2 is T1 + 1.
70step(wabs,T1,T2):- !, T2 is T1 + 1.
71step(aabs,T1,T2):- !, T2 is T1 + 1.
72
73step(drel,T1,T2):- !, T2 is T1 + 0.001.
74step(frel,T1,T2):- !, T2 is T1 + 0.001.
75step(wrel,T1,T2):- !, T2 is T1 + 0.001.
76step(arel,T1,T2):- !, T2 is T1 + 0.001.
77
78
79calc1([],_,_,C,N,Acc,[]):-
80 Acc is C/N.
81
82calc1([gold(Delta,Gold,Id)|L],F,Tau,C,M,Acc,[i:Id|IDs]):-
83 Gold = F, Delta >= Tau, !,
84 N is M + 1,
85 D is C + 1,
86 calc1(L,F,Tau,D,N,Acc,IDs).
87
88calc1([gold(Delta,Gold,Id)|L],F,Tau,C,M,Acc,[e:Id|IDs]):-
89 \+ Gold = F, Delta < Tau, !,
90 N is M + 1,
91 D is C + 1,
92 calc1(L,F,Tau,D,N,Acc,IDs).
93
94calc1([_|L],F,Tau,C,M,Acc,IDs):-
95 N is M + 1,
96 calc1(L,F,Tau,C,N,Acc,IDs).
97
98
99calc2([],_,_,_,C,N,Acc,[]):-
100 Acc is C/N.
101
102calc2([gold(DeltaD,_DeltaF,Gold,Id)|L],F,TauD,TauF,C,M,Acc,[i:Id|IDs]):-
103 Gold = F, DeltaD >= TauD, !,
104 N is M + 1,
105 D is C + 1,
106 calc2(L,F,TauD,TauF,D,N,Acc,IDs).
107
108calc2([gold(DeltaD,DeltaF,Gold,Id)|L],F,TauD,TauF,C,M,Acc,[i:Id|IDs]):-
109 Gold = F, DeltaD < TauD, DeltaF >= TauF, !,
110 N is M + 1,
111 D is C + 1,
112 calc2(L,F,TauD,TauF,D,N,Acc,IDs).
113
114calc2([gold(DeltaD,DeltaF,Gold,Id)|L],F,TauD,TauF,C,M,Acc,[e:Id|IDs]):-
115 \+ Gold = F, DeltaD < TauD, DeltaF < TauF, !,
116 N is M + 1,
117 D is C + 1,
118 calc2(L,F,TauD,TauF,D,N,Acc,IDs).
119
120calc2([_|L],F,TauD,TauF,C,M,Acc,IDs):-
121 N is M + 1,
122 calc2(L,F,TauD,TauF,C,N,Acc,IDs).
123
124
125estimate(T,Max):-
126 nl,write('---TASK---':T), nl,
127 estimate(T,dabs,Accdabs),
128 estimate(T,aabs,Accaabs),
129 estimate(T,dabs,fabs,Accdabsfabs),
130 estimate(T,dabs,drel,Accdabsdrel),
131 estimate(T,dabs,frel,Accdabsfrel), nl,
132 estimate(T,drel,Accdrel),
133 estimate(T,arel,Accarel),
134 estimate(T,drel,fabs,Accdrelfabs),
135 estimate(T,drel,frel,Accdrelfrel), nl,
136 estimate(T,fabs,Accfabs),
137 estimate(T,frel,Accfrel), nl,
138 estimate(T,wabs,Accwabs),
139 estimate(T,wrel,Accwrel),
140 max_list([Accdabs,Accaabs,Accdabsfabs,Accdabsfrel,Accdabsdrel,
141 Accdrel,Accarel,Accdrelfabs,Accdrelfrel,
142 Accfabs,Accfrel,Accwabs,Accwrel],Max).
143
144:- estimate('IE',Max1),
145 write(best:Max1),nl,
146 estimate('IR',Max2),
147 write(best:Max2),nl,
148 estimate('QA',Max3),
149 write(best:Max3),nl,
150 estimate('SUM',Max4),
151 write(best:Max4),nl,
152 estimate(_,Max),
153 write(best:Max),nl,
154 Task is ((Max1+Max2+Max3+Max4)/4),
155 write(task:Task),nl. 156
157:- halt.