/*
* Here comes the text of your license
* Each line should be prefixed with *
*/
package nars.lab.microworld;
import java.util.HashMap;
import nars.NAR;
import nars.entity.Sentence;
import nars.entity.Task;
import nars.gui.NARSwing;
import nars.io.Answered;
import nars.io.Narsese;
/**
*
* @author patrick.hammer
*/
public class SupervisedRecognition {
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.step(1000);
}
//Test phase:
inputExample(nar,
"ooxoo" + "\n" +
"ooxoo" + "\n" +
"ooxoo" + "\n" +
"ooxoo" + "\n" +
"ooxoo" + "\n", -1);
try {
nar.askNow("<?what --> EXAMPLE>", new Answered() {
@Override
public void onSolution(Sentence belief) {
System.out.println(belief);
}
@Override
public void onChildSolution(Task child, Sentence belief) {}
});
} catch (Narsese.InvalidInputException ex) {
}
nar.step(100000);
}
//Inputs an example image
private static void inputExample(NAR nar, String example, int solution) {
String[] lines = example.split("\n");
for(int i=0;i<lines.length;i++) {
for(int j=0;j<lines[i].length();j++) {
if(lines[i].charAt(j) == 'x') {
String inp = "<T_"+String.valueOf(i)+"_"+String.valueOf(j) + "--> on>. :|:";
nar.addInput(inp);
}
}
}
if(solution != -1) {
nar.addInput("<"+ String.valueOf(solution) +" --> EXAMPLE>. :|:");
}
}
}