|
- :- ensure_loaded(['BK.pl']).
- :- thread_setconcurrency(_, 8).
- :- use_module(library(thread)).
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %% For propositionalisation
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- eval_inst_feature(Ex, Feature):-
- eval_eq(Ex, Feature).
-
- %% Evaluate instance given feature
- eval_eq(Ex, Feature):-
- parse_eq(Ex, eq(X,Y,Z)),
- bitwise_calc(Feature,_,X,Y,Z), !.
-
- %%%%%%%%%%%%%%
- %% Abduction
- %%%%%%%%%%%%%%
- % Make abduction when given samples that have been interpreted as pseudo-labels
- abduce(Exs, Delta_C) :-
- abduce(Exs, [], Delta_C).
- abduce([], Delta_C, Delta_C).
- abduce([E|Exs], Delta_C0, Delta_C1) :-
- calc(Delta_C0, Delta_C2, E),
- abduce(Exs, Delta_C2, Delta_C1).
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %% Abduce pseudo-labels only
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- abduce_consistent_insts(Exs):-
- abduce(Exs, _), !.
- % (Experimental) Uncomment to use parallel abduction
- % abduce_consistent_exs_concurrent(Exs), !.
-
- logic_forward(Exs, X) :- abduce_consistent_insts(Exs) -> X = true ; X = false.
- logic_forward(Exs) :- abduce_consistent_insts(Exs).
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %% Abduce Delta_C given pseudo-labels
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- consistent_inst_feature(Exs, Delta_C):-
- abduce(Exs, Delta_C), !.
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %% (Experimental) Parallel abduction
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- abduce_consistent_exs_concurrent(Exs) :-
- % Split the current data batch into grounding samples and variable samples (which need to be revised)
- split_exs(Exs, Ground_Exs, Var_Exs),
- % Find the simplest Delta_C for grounding samples.
- abduce(Ground_Exs, Ground_Delta_C), !,
- % Extend Ground Delta_C into all possible variations
- extend_op_rule(Ground_Delta_C, Possible_Deltas),
- % Concurrently abduce the variable samples
- maplist(append([abduce2, Var_Exs, Ground_Exs]), [[Possible_Deltas]], Call_List),
- maplist(=.., Goals, Call_List),
- % writeln(Goals),
- first_solution(Var_Exs, Goals, [local(inf)]).
-
- split_exs([],[],[]).
- split_exs([E | Exs], [E | G_Exs], V_Exs):-
- ground(E), !,
- split_exs(Exs, G_Exs, V_Exs).
- split_exs([E | Exs], G_Exs, [E | V_Exs]):-
- split_exs(Exs, G_Exs, V_Exs).
-
- :- table extend_op_rule/2.
-
- extend_op_rule(Rules, Rules) :-
- length(Rules, 4).
- extend_op_rule(Rules, Ext) :-
- op_rule(R),
- valid_rules(Rules, R),
- extend_op_rule([R|Rules], Ext).
-
- % abduction without learning new Delta_C (Because they have been extended!)
- abduce2([], _, _).
- abduce2([E|Exs], Ground_Exs, Delta_C) :-
- % abduce by finding ground samples
- member(E, Ground_Exs),
- abduce2(Exs, Ground_Exs, Delta_C).
- abduce2([E|Exs], Ground_Exs, Delta_C) :-
- eval_inst_feature(E, Delta_C),
- abduce2(Exs, Ground_Exs, Delta_C).
|