diff --git a/nars_core/nars/main/Plugins.java b/nars_core/nars/main/Plugins.java index db9e24ee180ec2cd267483d6fa632116a7a74e0f..6a03ce4944e6244c6088789164f1dd082ca34bf8 100644 --- a/nars_core/nars/main/Plugins.java +++ b/nars_core/nars/main/Plugins.java @@ -8,6 +8,10 @@ import nars.plugin.misc.RuntimeNARSettings; import nars.plugin.mental.Emotions; import nars.plugin.mental.Counting; import nars.plugin.mental.Abbreviation; +import nars.plugin.mental.ComplexEmotions; +import nars.language.SetInt; +import nars.language.Term; +import nars.plugin.perception.VisionChannel; /** * Default set of NAR parameters which have been classically used for development. @@ -17,8 +21,11 @@ public class Plugins { public NAR init(NAR n) { n.addPlugin(new RuntimeNARSettings()); n.addPlugin(new Emotions()); - n.addPlugin(new Anticipate()); // expect an event - + n.addPlugin(new Anticipate()); // expect an event + n.addPlugin(new ComplexEmotions()); + Term label = SetInt.make(new Term("bright")); + n.addSensoryChannel(label.toString(), + new VisionChannel(label, n, n, 1, 1)); boolean full_internal_experience = false; if(!full_internal_experience) { n.addPlugin(new InternalExperience()); diff --git a/nars_core/nars/plugin/perception/VisionChannel.java b/nars_core/nars/plugin/perception/VisionChannel.java new file mode 100644 index 0000000000000000000000000000000000000000..95d3e9f0485735999c7baa1c0e2b027860081978 --- /dev/null +++ b/nars_core/nars/plugin/perception/VisionChannel.java @@ -0,0 +1,71 @@ +package nars.plugin.perception; + +import nars.entity.BudgetValue; +import nars.entity.Sentence; +import nars.entity.Stamp; +import nars.main.NAR; +import nars.entity.Task; +import nars.entity.TruthValue; +import nars.inference.BudgetFunctions; +import nars.io.Symbols; +import nars.language.Inheritance; +import nars.language.Term; +import nars.main.Parameters; + +public class VisionChannel extends SensoryChannel { + double[][] inputs; + boolean[][] updated; + int cnt_updated = 0; + int height = 0; + int width = 0; + Term label; + NAR nar; + public VisionChannel(Term label, NAR nar, SensoryChannel reportResultsTo, int width, int height) { + super(nar,reportResultsTo); + this.nar = nar; + this.height = height; + this.width = width; + this.label = label; + inputs = new double[height][width]; + updated = new boolean[height][width]; + } + + public boolean AddToMatrix(Task t) { + int x = t.getTerm().term_indices[2]; + int y = t.getTerm().term_indices[3]; + inputs[y][x] = t.sentence.getTruth().getFrequency(); + if(!updated[y][x]) { + cnt_updated++; + updated[y][x] = true; + } + if(cnt_updated == height*width) { + cnt_updated = 0; + updated = new boolean[height][width]; + return true; + } + return false; + } + + @Override + public NAR addInput(Task t) { + if(AddToMatrix(t)) //new data complete + step_start(); + return nar; + } + + @Override + public void step_start() + { + Sentence s = new Sentence(Inheritance.make(new Term("A"), this.label), + Symbols.JUDGMENT_MARK, + new TruthValue(1.0f, + Parameters.DEFAULT_JUDGMENT_CONFIDENCE), + new Stamp(nar.memory)); + Task T = new Task(s, new BudgetValue(Parameters.DEFAULT_JUDGMENT_PRIORITY, + Parameters.DEFAULT_JUDGMENT_DURABILITY, + BudgetFunctions.truthToQuality(s.truth)), true); + this.results.add(T);//feeds results into "upper" sensory channels: + this.step_finished(); + } + +}