use of nars.control.DurService in project narchy by automenta.
the class ScalarBeliefTableTest method test1.
@Test
public void test1() {
NAR n = NARS.shell();
MutableFloat xx = new MutableFloat(0);
Scalar x = new Scalar($.the("x"), xx, n);
DurService xAuto = x.auto(n, 1);
ScalarBeliefTable xb = (ScalarBeliefTable) x.beliefs();
n.synch();
n.run(1);
assertEquals(1, xb.series.size());
assertEquals(1, xb.size());
xx.set(0.5f);
n.run(1);
assertEquals(2, xb.series.size());
assertEquals(2, xb.size());
}
use of nars.control.DurService in project narchy by automenta.
the class NAgent method runSynch.
/**
* default rate = 1 dur/ 1 frame
*/
public void runSynch(int frames) {
DurService d = DurService.on(nar, this);
nar.run(frames * nar.dur() + 1);
d.off();
}
use of nars.control.DurService in project narchy by automenta.
the class NARIn method taskWhile.
default DurService taskWhile(Term term, byte punc, Truth tru, Predicate<Task> cond) {
// HACK
NAR n = (NAR) this;
long start = n.time();
float activeFreq = tru.freq();
float inactiveFreq = 0f;
float evi = tru.evi();
LongFunction<Truthlet> stepUntil = (toWhen) -> {
return Truthlet.step(inactiveFreq, start, activeFreq, toWhen, activeFreq, evi);
};
TruthletTask t = new TruthletTask(term, punc, stepUntil.apply(start), n);
float pri = n.priDefault(punc);
t.priMax(pri);
n.input(t);
return DurService.onWhile(n, (nn) -> {
// nn.runLater(()->{
// t.concept(nn, false).goals().print();
// System.out.println();
// });
long now = nn.time();
boolean kontinue;
Truthlet tt;
if (!cond.test(t)) {
// convert from step function to impulse function which
// stops at the current time and end the service
tt = Truthlet.impulse(start, now, activeFreq, inactiveFreq, evi);
kontinue = false;
} else {
// stretch the step function to current time
tt = stepUntil.apply(now);
kontinue = true;
}
t.priMax(pri);
t.truth(tt, true, nn);
return kontinue;
});
}
use of nars.control.DurService in project narchy by automenta.
the class ExeCharts method metaGoalPlot.
public static Surface metaGoalPlot(NAR nar) {
int s = nar.causes.size();
FloatRange gain = new FloatRange(20f, 0f, 20f);
BitmapMatrixView bmp = new BitmapMatrixView((i) -> Util.tanhFast(gain.floatValue() * nar.causes.get(i).value()), // Util.tanhFast(nar.causes.get(i).value()),
s, Math.max(1, (int) Math.ceil(Math.sqrt(s))), Draw::colorBipolar) {
DurService on;
{
on = DurService.on(nar, this::update);
}
@Override
public void stop() {
on.off();
on = null;
super.stop();
}
};
return new Splitting(bmp, new AutoSurface<>(gain), 0.1f);
}
use of nars.control.DurService in project narchy by automenta.
the class ExeCharts method metaGoalChart.
private static Surface metaGoalChart(NAgent a) {
return new TreeChart<Cause>() {
final DurService on;
final FasterList<ItemVis<Cause>> cache = new FasterList();
final Function<Cause, TreeChart.ItemVis<Cause>> builder = ((i) -> {
short id = i.id;
ItemVis<Cause> item;
if (cache.capacity() - 1 < id)
cache.ensureCapacity(id + 16);
else {
item = cache.get(id);
if (item != null)
return item;
}
String str = i.toString();
if (str.startsWith("class nars."))
// skip default toString
str = str.substring("class nars.".length());
if (str.startsWith("class "))
// skip default toString
str = str.substring(5);
item = new CauseVis(i, str);
cache.set(id, item);
return item;
});
{
on = a.onFrame(() -> {
update(a.nar().causes, (c, i) -> {
float v = c.value();
float r, g, b;
if (v < 0) {
r = 0.75f * Math.max(0.1f, Math.min(1f, -v));
g = 0;
} else {
g = 0.75f * Math.max(0.1f, Math.min(1f, +v));
r = 0;
}
float t = Util.sum(((FloatFunction<Traffic>) (p -> Math.abs(p.last))), c.goal);
b = Math.max(r, g) / 2f * Util.unitize(t);
i.update(v, r, g, b);
// i.updateMomentum(
// //0.01f + Util.sqr(Util.tanhFast(v)+1),
// //Math.signum(v) *(1+Math.abs(v))*(t),
// //Math.signum(v) * t,
// v,
// 0.25f,
// r, g, b);
}, builder);
});
}
@Override
public void stop() {
super.stop();
on.off();
}
};
}
Aggregations