· 7 years ago · Sep 11, 2018, 11:28 AM
1public class GeneralInferenceControl {
2
3 public static void fireBelief(Memory mem, Timable time, Task task, Term taskConceptTerm, Concept taskConcept, Sentence belief) {
4 //Create a derivation context that works with OpenNARS "deriver":
5 DerivationContext cont = new DerivationContext(mem, mem.narParameters, time);
6 cont.setCurrentTask(task);
7 cont.setCurrentTerm(taskConceptTerm);
8 cont.setCurrentConcept(taskConcept);
9 cont.setCurrentBelief(belief);
10 //and fire rule table with the derivation context and our premise pair
11 RuleTables.reason(task, belief, cont);
12 //results go into into cyclingTasks by DerivationContext
13 }
14
15 public static void fireTask(Task task, Memory mem, Timable time) {
16 //remove intervals, as concepts do not have them
17 Term taskConceptTerm = CompoundTerm.replaceIntervals(task.getTerm());
18 //conceptualize task, and add (in case of belief) as belief to all subterm component concepts:
19 Concept taskConcept = mem.conceptualize(task.budget, taskConceptTerm);
20 //fire all beliefs of all of the subterm components
21 for(Term subterm : taskConcept.termLinkTemplates.keySet()) {
22 Concept beliefConcept = mem.concept(subterm);
23 for(Task beliefT : beliefConcept.beliefs) {
24 Sentence belief = beliefT.sentence;
25 fireBelief(mem, time, task, taskConceptTerm, taskConcept, belief);
26 }
27 }
28 }
29
30 public static void ALANNCircle(Memory mem, Timable time) {
31 Task task = null;
32 //check for input buffer element first
33 if(mem.inputTasks != null) {
34 task = mem.inputTasks.removeFirst();
35 }
36 //if none such exists, use one of the cycling tasks
37 else {
38 task = (Task) mem.cyclingTasks.takeHighestPriorityItem();
39 }
40 //fire the task and put it back into cycling tasks
41 if(task != null) {
42 fireTask(task, mem, time);
43 mem.cyclingTasks.putBack(task, mem.narParameters.TASKLINK_FORGET_DURATIONS, mem);
44 }
45 }
46}