Search in sources :

Example 1 with On

use of jcog.event.On in project narchy by automenta.

the class NAgent method run.

@Override
public void run() {
    if (!enabled.get())
        return;
    this.last = this.now;
    this.now = nar.time();
    if (now <= last)
        return;
    // stretched perceptual duration to the NAgent's effective framerate
    int dur = Math.max(nar.dur(), (int) (now - last));
    reward = act();
    happy.update(last, now, dur, nar);
    FloatFloatToObjectFunction<Truth> truther = (prev, next) -> $.t(next, nar.confDefault(BELIEF));
    sensors.forEach((key, value) -> value.input(key.update(last, now, truther, dur, nar)));
    always(motivation.floatValue());
    // HACK TODO compile this to re-used array on init like before
    Map.Entry<ActionConcept, CauseChannel<ITask>>[] aa = actions.entrySet().toArray(new Map.Entry[actions.size()]);
    // fair chance of ordering to all motors
    ArrayUtils.shuffle(aa, random());
    for (Map.Entry<ActionConcept, CauseChannel<ITask>> ac : aa) {
        Stream<ITask> s = ac.getKey().update(last, now, dur, NAgent.this.nar);
        if (s != null)
            ac.getValue().input(s);
    }
    Truth happynowT = nar.beliefTruth(happy, last, now);
    float happynow = happynowT != null ? (happynowT.freq() - 0.5f) * 2f : 0;
    nar.emotion.happy(motivation.floatValue() * dexterity(last, now) * happynow);
    if (trace)
        logger.info(summary());
}
Also used : Iterables(com.google.common.collect.Iterables) DurService(nars.control.DurService) java.util(java.util) Bitmap2DSensor(nars.util.signal.Bitmap2DSensor) LoggerFactory(org.slf4j.LoggerFactory) Scalar(nars.concept.scalar.Scalar) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) ArrayUtils(org.apache.commons.lang3.ArrayUtils) ETERNAL(nars.time.Tense.ETERNAL) Supplier(java.util.function.Supplier) Variable(nars.term.var.Variable) Truth(nars.truth.Truth) Tuples.pair(org.eclipse.collections.impl.tuple.Tuples.pair) Op(nars.Op) ActionConcept(nars.concept.action.ActionConcept) ThreadLocalRandom(java.util.concurrent.ThreadLocalRandom) On(jcog.event.On) Activate(nars.control.Activate) FloatFloatToObjectFunction(org.eclipse.collections.api.block.function.primitive.FloatFloatToObjectFunction) Concept(nars.concept.Concept) Term(nars.term.Term) Util.compose(jcog.Util.compose) Loop(jcog.exe.Loop) Logger(org.slf4j.Logger) Texts.n2(jcog.Texts.n2) Predicate(java.util.function.Predicate) FasterList(jcog.list.FasterList) Stamp(nars.truth.Stamp) NARService(nars.control.NARService) ITask(nars.task.ITask) NALTask(nars.task.NALTask) Consumer(java.util.function.Consumer) Nullable(org.jetbrains.annotations.Nullable) TODO(jcog.TODO) FilteredScalar(nars.concept.scalar.FilteredScalar) Stream(java.util.stream.Stream) Atomic(nars.term.atom.Atomic) jcog.math(jcog.math) Termed(nars.term.Termed) CauseChannel(nars.control.CauseChannel) NotNull(org.jetbrains.annotations.NotNull) DigitizedScalar(nars.concept.scalar.DigitizedScalar) ITask(nars.task.ITask) CauseChannel(nars.control.CauseChannel) Truth(nars.truth.Truth) ActionConcept(nars.concept.action.ActionConcept)

Example 2 with On

use of jcog.event.On in project narchy by automenta.

the class PhyWall method snake.

protected Snake snake(Wire wire, Runnable onRemove) {
    Surface source = wire.a;
    Surface target = wire.b;
    assert (source != target);
    float sa = source.bounds.area();
    float ta = target.bounds.area();
    float areaDiff = Math.abs(sa - ta) / (sa + ta);
    // heuristic estimate: larger area difference = shorter snake
    int segments = Util.lerp(areaDiff, 8, 6);
    float EXPAND_SCALE_FACTOR = 4;
    PushButton deleteButton = new PushButton("x");
    Surface menu = new TabPane(ButtonSet.Mode.Multi, Map.of("o", () -> new Gridding(new Label(source.toString()), new Label(target.toString()), deleteButton)), (l) -> new CheckBox(l) {

        @Override
        protected String label(String text, boolean on) {
            // override just display the 'o'
            return text;
        }

        @Override
        public ToggleButton set(boolean expanded) {
            super.set(expanded);
            synchronized (wire) {
                PhyWindow w = parent(PhyWindow.class);
                if (w == null)
                    return this;
                float cx = w.cx();
                float cy = w.cy();
                float ww, hh;
                if (expanded) {
                    // grow
                    ww = w.w() * EXPAND_SCALE_FACTOR;
                    hh = w.h() * EXPAND_SCALE_FACTOR;
                } else {
                    // shrink
                    ww = w.w() / EXPAND_SCALE_FACTOR;
                    hh = w.h() / EXPAND_SCALE_FACTOR;
                }
                w.pos(cx - ww / 2, cy - hh / 2, cx + ww / 2, cy + hh / 2);
            }
            return this;
        }
    });
    PhyWindow menuBody = put(menu, RectFloat2D.mid(source.bounds, target.bounds, 0.1f));
    float mw = menuBody.radius();
    Snake s = new Snake(source, target, segments, 1.618f * 2 * mw, mw) {

        @Override
        public void remove() {
            onRemove.run();
            super.remove();
        }
    };
    s.attach(menuBody.body, segments / 2 - 1);
    deleteButton.click(s::remove);
    int jj = 0;
    for (Joint j : s.joints) {
        float p = ((float) jj) / (segments - 1);
        // custom joint renderer: color coded indicate activity and type of data
        j.setData((ObjectLongProcedure<GL2>) (g, now) -> {
            int TIME_DECAY_MS = 250;
            boolean side = p < 0.5f;
            float activity = wire.activity(side, now, TIME_DECAY_MS);
            // Util.lerp(p, wire.activity(false, now, TIME_DECAY_MS), wire.activity(true, now, TIME_DECAY_MS));
            int th = wire.typeHash(side);
            if (th == 0) {
                g.glColor4f(0.5f, 0.5f, 0.5f, 0.5f);
            } else {
                Draw.colorHash(g, th, 0.9f, 0.5f + 0.5f * activity, 0.5f + 0.4f * activity);
            }
            g.glLineWidth(10f + activity * 10f);
        // Draw.line(g, w.a.cx(), w.a.cy(), w.b.cx(), w.b.cy());
        // return;
        });
        jj++;
    }
    return s;
}
Also used : RayCastInput(spacegraph.space2d.phys.collision.RayCastInput) Random(java.util.Random) ParticleColor(spacegraph.space2d.phys.particle.ParticleColor) ButtonSet(spacegraph.space2d.widget.tab.ButtonSet) TabPane(spacegraph.space2d.widget.tab.TabPane) ParticleSystem(spacegraph.space2d.phys.particle.ParticleSystem) spacegraph.space2d.phys.dynamics.joints(spacegraph.space2d.phys.dynamics.joints) ToggleButton(spacegraph.space2d.widget.button.ToggleButton) Map(java.util.Map) Finger(spacegraph.input.finger.Finger) XoRoShiRo128PlusRandom(jcog.math.random.XoRoShiRo128PlusRandom) PolygonShape(spacegraph.space2d.phys.collision.shapes.PolygonShape) NodeGraph(jcog.data.graph.NodeGraph) CircleShape(spacegraph.space2d.phys.collision.shapes.CircleShape) MapNodeGraph(jcog.data.graph.MapNodeGraph) Util(jcog.Util) Animated(spacegraph.util.animate.Animated) List(java.util.List) ImmutableDirectedEdge(jcog.data.graph.ImmutableDirectedEdge) GL2(com.jogamp.opengl.GL2) WizardFrame(spacegraph.space2d.widget.meta.WizardFrame) ObjectLongProcedure(org.eclipse.collections.api.block.procedure.primitive.ObjectLongProcedure) Shape(spacegraph.space2d.phys.collision.shapes.Shape) PolygonFixture(spacegraph.space2d.phys.fracture.PolygonFixture) spacegraph.space2d.phys.dynamics(spacegraph.space2d.phys.dynamics) Surface(spacegraph.space2d.Surface) Draw(spacegraph.video.Draw) Supplier(java.util.function.Supplier) Tuple2f(spacegraph.util.math.Tuple2f) EdgeShape(spacegraph.space2d.phys.collision.shapes.EdgeShape) Tuples.pair(org.eclipse.collections.impl.tuple.Tuples.pair) DoubleClicking(spacegraph.input.finger.DoubleClicking) Gridding(spacegraph.space2d.container.Gridding) On(jcog.event.On) AABB(spacegraph.space2d.phys.collision.AABB) RayCastOutput(spacegraph.space2d.phys.collision.RayCastOutput) Pair(org.eclipse.collections.api.tuple.Pair) Ortho(spacegraph.space2d.hud.Ortho) PushButton(spacegraph.space2d.widget.button.PushButton) FasterList(jcog.list.FasterList) Transform(spacegraph.space2d.phys.common.Transform) spacegraph.util.math.v2(spacegraph.util.math.v2) RectFloat2D(jcog.tree.rtree.rect.RectFloat2D) CheckBox(spacegraph.space2d.widget.button.CheckBox) Consumer(java.util.function.Consumer) ArrayIterator(jcog.util.ArrayIterator) FingerDragging(spacegraph.input.finger.FingerDragging) SurfaceBase(spacegraph.space2d.SurfaceBase) ProtoWidget(spacegraph.space2d.widget.meta.ProtoWidget) Collections(java.util.Collections) Label(spacegraph.space2d.widget.text.Label) TabPane(spacegraph.space2d.widget.tab.TabPane) ToggleButton(spacegraph.space2d.widget.button.ToggleButton) Label(spacegraph.space2d.widget.text.Label) GL2(com.jogamp.opengl.GL2) Surface(spacegraph.space2d.Surface) Gridding(spacegraph.space2d.container.Gridding) spacegraph.space2d.phys.dynamics.joints(spacegraph.space2d.phys.dynamics.joints) spacegraph.space2d.phys.dynamics(spacegraph.space2d.phys.dynamics) Collections(java.util.Collections) CheckBox(spacegraph.space2d.widget.button.CheckBox) PushButton(spacegraph.space2d.widget.button.PushButton)

Aggregations

Consumer (java.util.function.Consumer)2 Supplier (java.util.function.Supplier)2 On (jcog.event.On)2 FasterList (jcog.list.FasterList)2 Tuples.pair (org.eclipse.collections.impl.tuple.Tuples.pair)2 Iterables (com.google.common.collect.Iterables)1 GL2 (com.jogamp.opengl.GL2)1 java.util (java.util)1 Collections (java.util.Collections)1 List (java.util.List)1 Map (java.util.Map)1 Random (java.util.Random)1 ThreadLocalRandom (java.util.concurrent.ThreadLocalRandom)1 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)1 Predicate (java.util.function.Predicate)1 Stream (java.util.stream.Stream)1 TODO (jcog.TODO)1 Texts.n2 (jcog.Texts.n2)1 Util (jcog.Util)1 Util.compose (jcog.Util.compose)1