Search in sources :

Example 6 with AnswerHandler

use of nars.io.events.AnswerHandler in project opennars by opennars.

the class Predict_NARS_Core method main.

public static void main(String[] args) throws Narsese.InvalidInputException, InterruptedException {
    Parameters.DEBUG = false;
    int duration = 4;
    float freq = 1.0f / duration * 0.03f;
    double discretization = 10;
    n = new NAR();
    n.param.noiseLevel.set(0);
    Random rnd = new Random();
    n.on(TaskImmediateProcess.class, new TaskImmediateProcess() {

        @Override
        public void onProcessed(Task t, DerivationContext n) {
            // return;
            if (t.sentence.getOccurenceTime() >= n.memory.time() && t.sentence.truth.getExpectation() > 0.5) {
                Term term = t.getTerm();
                int time = (int) t.sentence.getOccurenceTime() / thinkInterval;
                /*if(positionTruthExp.containsKey(time)) {
                        if(positionTruthExp.get(time) > t.sentence.truth.getExpectation()) {
                            return;
                        }
                    }*/
                int value = -1;
                String ts = term.toString();
            // Prediction(t.sentence, ts, time);
            }
        }
    });
    TreeMLData observed = new TreeMLData("value", Color.WHITE).setRange(0, 1f);
    // predictions = new TreeMLData[(int)discretization];
    predicted = new TreeMLData("seen", Color.WHITE).setRange(0, 1f);
    // for (int i = 0; i < predictions.length; i++) {
    // predictions[i] = new TreeMLData("Pred" + i,
    // Color.getHSBColor(0.25f + i / 4f, 0.85f, 0.85f));
    // }
    pred = (LineChart) new LineChart(predicted).thickness(16f).height(128).drawOverlapped();
    TimelineVis tc = new TimelineVis(pred, new LineChart(observed).thickness(16f).height(128).drawOverlapped());
    new NWindow("_", new PCanvas(tc)).show(800, 800, true);
    n.cycles((int) discretization * 4);
    NARSwing.themeInvert();
    new NARSwing(n);
    ChangedTextInput chg = new ChangedTextInput(n);
    int k = 0;
    String lastInput = "";
    boolean pause = false;
    HashSet<String> qus = new HashSet<String>();
    int truecnt = 0;
    String saved = "";
    int lastOrival = 0;
    while (true) {
        int steps = 40;
        int h = 0;
        do {
            truecnt++;
            if (truecnt % 100 == 0) {
            // qus.clear();
            }
            for (int i = 0; i < thinkInterval; i++) {
                n.cycles(1);
            }
            Thread.sleep(10);
            h++;
            int repeat = 500;
            signal = (float) Math.sin(freq * (k / 2 % 500) - Math.PI / 2) * 0.5f + 0.5f;
            int time = (int) (n.time() / thinkInterval);
            int val2 = (int) (((int) (((signal) * discretization)) * (10.0 / discretization)));
            // System.out.println("observed "+val);
            int tmp = val2;
            if (!pause && val2 != lastOrival) {
                float noise_amp = 0.5f;
                // noise
                val2 += (rnd.nextDouble() * noise_amp * 0.5f - noise_amp * 0.25f);
            }
            lastOrival = tmp;
            final int val = val2;
            lastInput = "<{" + val + "} --> value>. :|:";
            if (k % repeat == 0 && k != 0) {
                pause = true;
                // new run
                n.memory.seq_current.clear();
            }
            if (!pause && !saved.isEmpty()) {
                chg.set(saved);
                saved = "";
            }
            observed.add((int) time, val / 10.0);
            int curval = val;
            if (QUAnswers.containsKey(val)) {
                curval = QUAnswers.get(val);
            }
            int curtime = time;
            int hh = 0;
            // QUAnswers.put(8, 0); //end to start link is fixed
            while (QUAnswers.containsKey(curval)) {
                int shift = QUShift.get(curval) / thinkInterval;
                for (int i = 0; i < shift; i++) {
                    predicted.add((int) curtime + i, (curval) / 10.0);
                    pred.customColor.put(curtime + i, Color.RED.getRGB());
                    pred.customColor.put(curtime + i + 1, Color.RED.getRGB());
                }
                curtime = curtime + shift;
                curval = QUAnswers.get(curval);
                if (curval == 0) {
                    break;
                }
                hh++;
                if (hh > discretization * 2) {
                    break;
                }
            }
            // if(!positionTruthExp.containsKey(time)) { //keep pred line up to date
            // but don't overwrite predictions
            predicted.add((int) time, val / 10.0);
            if (true) {
                chg.set(lastInput);
                if (!pause) {
                } else {
                    saved = lastInput;
                }
                // n.addInput(lastInput);
                String S = "<(&/," + "<{" + val + "} --> value>,?I1) =/> ?what>";
                if (!qus.contains(S)) {
                    // n.addInput(S);
                    AnswerHandler cur = new AnswerHandler() {

                        @Override
                        public void onSolution(Sentence belief) {
                            // System.out.println("solution: " + belief);
                            System.out.println(belief);
                            String rpart = belief.toString().split("=/>")[1];
                            Prediction(belief, rpart, -1, val);
                        }
                    };
                    try {
                        // if(truecnt%10 == 0) {
                        qus.add(S);
                        n.askNow(S, cur);
                    // }
                    } catch (Narsese.InvalidInputException ex) {
                        Logger.getLogger(Predict_NARS_Core.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
            if (h > 20) {
                pause = false;
            }
        } while (pause);
        k += steps;
    }
}
Also used : Task(nars.entity.Task) ChangedTextInput(nars.lab.ioutils.ChangedTextInput) NWindow(automenta.vivisect.swing.NWindow) Narsese(nars.io.Narsese) AnswerHandler(nars.io.events.AnswerHandler) TimelineVis(automenta.vivisect.timeline.TimelineVis) Random(java.util.Random) TreeMLData(automenta.vivisect.TreeMLData) PCanvas(automenta.vivisect.swing.PCanvas) Sentence(nars.entity.Sentence) HashSet(java.util.HashSet) Term(nars.language.Term) DerivationContext(nars.control.DerivationContext) TaskImmediateProcess(nars.io.events.Events.TaskImmediateProcess) NARSwing(nars.gui.NARSwing) NAR(nars.main.NAR) LineChart(automenta.vivisect.timeline.LineChart)

Example 7 with AnswerHandler

use of nars.io.events.AnswerHandler in project opennars by opennars.

the class SupervisedRecognition method main.

public static void main(String[] args) {
    HashMap<String, Integer> map = new HashMap<>();
    // ONES:
    map.put("oxooo" + "\n" + "xxooo" + "\n" + "oxooo" + "\n" + "oxooo" + "\n" + "oxooo" + "\n", 1);
    map.put("oxxoo" + "\n" + "xoxoo" + "\n" + "ooxoo" + "\n" + "ooxoo" + "\n" + "ooxoo" + "\n", 1);
    map.put("oooxo" + "\n" + "ooxxo" + "\n" + "oooxo" + "\n" + "oooxo" + "\n" + "oooxo" + "\n", 1);
    map.put("oooox" + "\n" + "oooxx" + "\n" + "oooox" + "\n" + "oooox" + "\n" + "oooox" + "\n", 1);
    // ZEROS:
    map.put("ooooo" + "\n" + "xxxxx" + "\n" + "xooox" + "\n" + "xooox" + "\n" + "xxxxx" + "\n", 0);
    map.put("xxxxx" + "\n" + "xooox" + "\n" + "xooox" + "\n" + "xooox" + "\n" + "xxxxx" + "\n", 0);
    map.put("ooooo" + "\n" + "ooooo" + "\n" + "xxxxx" + "\n" + "xooox" + "\n" + "xxxxx" + "\n", 0);
    map.put("ooooo" + "\n" + "oxxxx" + "\n" + "oxoox" + "\n" + "oxoox" + "\n" + "oxxxx" + "\n", 0);
    map.put("ooooo" + "\n" + "xxxxx" + "\n" + "xooox" + "\n" + "xooox" + "\n" + "xxxxx" + "\n", 0);
    // training phase:
    NAR nar = new NAR();
    NARSwing.themeInvert();
    new NARSwing(nar);
    nar.param.noiseLevel.set(0);
    for (String example : map.keySet()) {
        int solution = map.get(example);
        inputExample(nar, example, solution);
        nar.cycles(1000);
    }
    // Test phase:
    inputExample(nar, "ooxoo" + "\n" + "ooxoo" + "\n" + "ooxoo" + "\n" + "ooxoo" + "\n" + "ooxoo" + "\n", -1);
    try {
        nar.askNow("<?what --> EXAMPLE>", new AnswerHandler() {

            @Override
            public void onSolution(Sentence belief) {
                System.out.println(belief);
            }
        });
    } catch (Narsese.InvalidInputException ex) {
    }
    nar.cycles(100000);
}
Also used : HashMap(java.util.HashMap) NARSwing(nars.gui.NARSwing) Narsese(nars.io.Narsese) Sentence(nars.entity.Sentence) NAR(nars.main.NAR) AnswerHandler(nars.io.events.AnswerHandler)

Aggregations

AnswerHandler (nars.io.events.AnswerHandler)7 Sentence (nars.entity.Sentence)5 NARSwing (nars.gui.NARSwing)4 NAR (nars.main.NAR)4 HashMap (java.util.HashMap)2 HashSet (java.util.HashSet)2 Narsese (nars.io.Narsese)2 TreeMLData (automenta.vivisect.TreeMLData)1 NWindow (automenta.vivisect.swing.NWindow)1 PCanvas (automenta.vivisect.swing.PCanvas)1 LineChart (automenta.vivisect.timeline.LineChart)1 TimelineVis (automenta.vivisect.timeline.TimelineVis)1 FileNotFoundException (java.io.FileNotFoundException)1 ArrayList (java.util.ArrayList)1 Random (java.util.Random)1 DerivationContext (nars.control.DerivationContext)1 Task (nars.entity.Task)1 TaskImmediateProcess (nars.io.events.Events.TaskImmediateProcess)1 ChangedTextInput (nars.lab.ioutils.ChangedTextInput)1 Term (nars.language.Term)1