use of nars.entity.Task in project opennars by opennars.
the class InternalExperience method beliefReason.
/**
* used in full internal experience mode only
*/
protected void beliefReason(Sentence belief, Term beliefTerm, Term taskTerm, DerivationContext nal) {
Memory memory = nal.memory;
if (Memory.randomNumber.nextDouble() < INTERNAL_EXPERIENCE_RARE_PROBABILITY) {
// the operators which dont have a innate belief
// also get a chance to reveal its effects to the system this way
Operator op = memory.getOperator(nonInnateBeliefOperators[Memory.randomNumber.nextInt(nonInnateBeliefOperators.length)]);
Product prod = new Product(new Term[] { belief.term });
if (op != null && prod != null) {
Term new_term = Inheritance.make(prod, op);
Sentence sentence = new Sentence(new_term, Symbols.GOAL_MARK, // a naming convension
new TruthValue(1, Parameters.DEFAULT_JUDGMENT_CONFIDENCE), new Stamp(memory));
float quality = BudgetFunctions.truthToQuality(sentence.truth);
BudgetValue budget = new BudgetValue(Parameters.DEFAULT_GOAL_PRIORITY * INTERNAL_EXPERIENCE_PRIORITY_MUL, Parameters.DEFAULT_GOAL_DURABILITY * INTERNAL_EXPERIENCE_DURABILITY_MUL, quality);
Task newTask = new Task(sentence, budget, true);
nal.derivedTask(newTask, false, false, false);
}
}
if (beliefTerm instanceof Implication && Memory.randomNumber.nextDouble() <= INTERNAL_EXPERIENCE_PROBABILITY) {
Implication imp = (Implication) beliefTerm;
if (imp.getTemporalOrder() == TemporalRules.ORDER_FORWARD) {
// 1. check if its (&/,term,+i1,...,+in) =/> anticipateTerm form:
boolean valid = true;
if (imp.getSubject() instanceof Conjunction) {
Conjunction conj = (Conjunction) imp.getSubject();
if (!conj.term[0].equals(taskTerm)) {
// the expected needed term is not included
valid = false;
}
for (int i = 1; i < conj.term.length; i++) {
if (!(conj.term[i] instanceof Interval)) {
valid = false;
break;
}
}
} else {
if (!imp.getSubject().equals(taskTerm)) {
valid = false;
}
}
if (valid) {
Operator op = memory.getOperator("^anticipate");
if (op == null)
throw new RuntimeException(this + " requires ^anticipate operator");
Product args = new Product(new Term[] { imp.getPredicate() });
Term new_term = Operation.make(args, op);
Sentence sentence = new Sentence(new_term, Symbols.GOAL_MARK, // a naming convension
new TruthValue(1, Parameters.DEFAULT_JUDGMENT_CONFIDENCE), new Stamp(memory));
float quality = BudgetFunctions.truthToQuality(sentence.truth);
BudgetValue budget = new BudgetValue(Parameters.DEFAULT_GOAL_PRIORITY * INTERNAL_EXPERIENCE_PRIORITY_MUL, Parameters.DEFAULT_GOAL_DURABILITY * INTERNAL_EXPERIENCE_DURABILITY_MUL, quality);
Task newTask = new Task(sentence, budget, true);
nal.derivedTask(newTask, false, false, false);
}
}
}
}
use of nars.entity.Task in project opennars by opennars.
the class Memory method executedTask.
/**
* ExecutedTask called in Operator.call
*
* @param operation The operation just executed
*/
public void executedTask(final Operation operation, TruthValue truth) {
Task opTask = operation.getTask();
// logic.TASK_EXECUTED.commit(opTask.budget.getPriority());
Stamp stamp = new Stamp(this, Tense.Present);
Sentence sentence = new Sentence(operation, Symbols.JUDGMENT_MARK, truth, stamp);
Task task = new Task(sentence, new BudgetValue(Parameters.DEFAULT_FEEDBACK_PRIORITY, Parameters.DEFAULT_FEEDBACK_DURABILITY, truthToQuality(sentence.getTruth())), true);
task.setElemOfSequenceBuffer(true);
addNewTask(task, "Executed");
}
use of nars.entity.Task in project opennars by opennars.
the class SpatialSamplingVisionChannel method step_start.
@Override
public void step_start() {
int ind = nar.memory.randomNumber.nextInt(sampling.size());
Position samplePos = sampling.get(ind);
Task sampled = spatialbag[samplePos.Y][samplePos.X].takeNext();
// Todo improve API, channel should not need to know where in the array x and y size is
// spatial biased random sampling:
int ind2 = nar.memory.randomNumber.nextInt(sampling.size());
int s2posY = sampling.get(ind2).Y;
int s2posX = sampling.get(ind2).X;
if (spatialbag[s2posY][s2posX] != null) {
Task sampled2 = spatialbag[s2posY][s2posX].takeNext();
if (sampled2 != null) {
// improve API, carrying out temporal inference should be easier..
List<Task> seq = proceedWithTemporalInduction(sampled.sentence, sampled2.sentence, sampled2, new DerivationContext(nar.memory), true, false, true);
if (seq != null) {
for (Task t : seq) {
if (!t.sentence.isEternal()) {
// TODO improve API, this check should not be necessary
AddToSpatialBag(t);
this.results.add(t);
}
}
}
// todo improve API, putting an element bag should be easy
spatialbag[s2posY][s2posX].putBack(sampled2, nar.memory.cycles(nar.memory.param.conceptForgetDurations), nar.memory);
}
}
spatialbag[samplePos.Y][samplePos.X].putBack(sampled, nar.memory.cycles(nar.memory.param.conceptForgetDurations), nar.memory);
// feeds results into "upper" sensory channels:
this.step_finished();
}
use of nars.entity.Task 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;
}
}
use of nars.entity.Task in project opennars by opennars.
the class ConceptMonitor method stringToTerm.
public static Term stringToTerm(NAR nar, String s) {
Narsese narsese = new Narsese(nar.memory);
Task ret;
try {
ret = narsese.parseTask(s + Symbols.JUDGMENT_MARK);
} catch (Narsese.InvalidInputException ex) {
return null;
}
if (ret == null) {
return null;
}
return ret.getTerm();
}
Aggregations