diff --git a/src/main/java/org/opennars/lab/launcher/Launcher.java b/src/main/java/org/opennars/lab/launcher/Launcher.java index f48141a4ca3d141f9df01295a26b34575701e44b..9d72c53178e31083643b08028b46ebb28b8c1aff 100755 --- a/src/main/java/org/opennars/lab/launcher/Launcher.java +++ b/src/main/java/org/opennars/lab/launcher/Launcher.java @@ -21,10 +21,7 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.net.URLConnection; +import java.net.*; import java.text.ParseException; import java.util.logging.Level; import java.util.logging.Logger; @@ -438,8 +435,12 @@ public class Launcher extends javax.swing.JFrame { * * @param evt */ - private void jLabel9MouseClicked(java.awt.event.MouseEvent evt) { - org.opennars.lab.microworld.Pong.main(null); + private void jLabel9MouseClicked(java.awt.event.MouseEvent evt) { + try { + org.opennars.lab.microworld.Pong.main(null); + } catch (UnknownHostException e) { + e.printStackTrace(); + } this.dispose(); } @@ -466,8 +467,12 @@ public class Launcher extends javax.swing.JFrame { * * @param evt */ - private void jLabel11MouseClicked(java.awt.event.MouseEvent evt) { - org.opennars.lab.microworld.SimNAR.main(null); + private void jLabel11MouseClicked(java.awt.event.MouseEvent evt) { + try { + org.opennars.lab.microworld.SimNAR.main(null); + } catch (UnknownHostException e) { + e.printStackTrace(); + } this.dispose(); } diff --git a/src/main/java/org/opennars/lab/metric/MetricReporter.java b/src/main/java/org/opennars/lab/metric/MetricReporter.java new file mode 100644 index 0000000000000000000000000000000000000000..636b7aa6a1f81580718242879ef5fc1487860f5e --- /dev/null +++ b/src/main/java/org/opennars/lab/metric/MetricReporter.java @@ -0,0 +1,50 @@ +package org.opennars.lab.metric; + +import org.opennars.main.Nar; + +import java.io.IOException; +import java.net.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class MetricReporter { + public List<MetricSensor> sensors = new ArrayList<>(); + + public String narsVersion = Nar.VERSION; + public long runId = new Random().nextInt(); + + public void connect(String targetHost, int targetPort) throws UnknownHostException { + receiverTarget = InetAddress.getByName(targetHost); + receiverTargetPort = targetPort; + } + + public void sendFromAllSensors() { + for(final MetricSensor iSensor : sensors) { + send(iSensor.getValueAsString(), iSensor.getName()); + } + } + + private void send(final String dataAsString, final String metricPathName) { + final String timestampAsString = "-1"; // -1 leads to automatic timestamping on arrival of the message + + String metricPath = narsVersion + "_name=" + metricPathName + "_runId=" + runId; + + String payload = metricPath +" "+ dataAsString +" "+ timestampAsString + "\n"; + + final byte[] serializedPayload = payload.getBytes(); + + final DatagramPacket packet = new DatagramPacket(serializedPayload, serializedPayload.length, receiverTarget, receiverTargetPort); + try { + DatagramSocket datagramSocket = new DatagramSocket(); + datagramSocket.send(packet); + } catch (SocketException e) { + // unlikely to happen - ignored + } catch (IOException e) { + // unlikely to happen - ignored + } + } + + private InetAddress receiverTarget; + private int receiverTargetPort; +} diff --git a/src/main/java/org/opennars/lab/metric/MetricSensor.java b/src/main/java/org/opennars/lab/metric/MetricSensor.java new file mode 100644 index 0000000000000000000000000000000000000000..6e47af3c4e2be5e42de2ebd5d62441803e0d95b9 --- /dev/null +++ b/src/main/java/org/opennars/lab/metric/MetricSensor.java @@ -0,0 +1,7 @@ +package org.opennars.lab.metric; + +public interface MetricSensor { + String getName(); + + String getValueAsString(); +} diff --git a/src/main/java/org/opennars/lab/microworld/Pong.java b/src/main/java/org/opennars/lab/microworld/Pong.java index 95dee1adcb028e9a36a952060893e9a669248aac..d4f7fe113867aceb0732a372485f0c1d0b31c037 100755 --- a/src/main/java/org/opennars/lab/microworld/Pong.java +++ b/src/main/java/org/opennars/lab/microworld/Pong.java @@ -14,6 +14,8 @@ */ package org.opennars.lab.microworld; +import org.opennars.lab.metric.MetricReporter; +import org.opennars.lab.metric.MetricSensor; import org.opennars.storage.Memory; import org.opennars.main.Nar; //import org.opennars.nal.nal8.Operation; @@ -26,6 +28,7 @@ import processing.event.MouseEvent; import java.awt.*; import java.io.File; +import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; @@ -46,7 +49,41 @@ import org.opennars.operator.Operator; public class Pong extends Frame { public boolean verbose = true; - public Pong() { + public int ballHits; + public int ballMisses; + + public int t = 0; + + public MetricReporter metricReporter; + + public Pong() throws UnknownHostException { + metricReporter = new MetricReporter(); + metricReporter.connect("127.0.0.1", 1212); + + metricReporter.sensors.add(new MetricSensor() { + @Override + public String getName() { + return "ballHits"; + } + + @Override + public String getValueAsString() { + return "" + ballHits; + } + }); + + metricReporter.sensors.add(new MetricSensor() { + @Override + public String getName() { + return "ballMisses"; + } + + @Override + public String getValueAsString() { + return "" + ballMisses; + } + }); + String[] args = {"Pong"}; MyPapplet mp = new MyPapplet (); mp.setSize(800,600); @@ -200,6 +237,8 @@ public class Pong extends Frame { if(Math.abs(agent.x - ball.x) < middle_distance) { //touching the ball? if(Math.abs(agent.x - ball.x) < middle_distance && ball.y < 120) { //same here + ballHits++; + String s = "<{SELF} --> [good]>. :|:"; if(!s.equals(this.LastInput)) { if (verbose) { @@ -217,6 +256,8 @@ public class Pong extends Frame { this.LastInput = s; } } else { + ballMisses++; + if(agent.x < ball.x) { String s = "<{right} --> [on]>. :|:"; if(!s.equals(this.LastInput)) { @@ -241,9 +282,14 @@ public class Pong extends Frame { System.out.println("bad mr_nars"); nar.addInput("(--,<{SELF} --> [good]>). :|:"); }*/ - + + t++; nar.cycles(10); + if (t%100==0) { + metricReporter.sendFromAllSensors(); + } + if(lastAction==0 && random(1.0f) < Alpha) { //if Nar hasn't decided chose a executable random action lastAction = (int) random((float) nActions); if(obj.x == 0) { @@ -1352,7 +1398,7 @@ public class Pong extends Frame { } - public static void main(String[] args) { + public static void main(String[] args) throws UnknownHostException { NARSwing.themeInvert(); new Pong(); } diff --git a/src/main/java/org/opennars/lab/microworld/SimNAR.java b/src/main/java/org/opennars/lab/microworld/SimNAR.java index bfb99c0847092de52843f98e5a1d0d9f3dec71a1..f59530ce769bee80813bfdd114e92fdfd2d51763 100755 --- a/src/main/java/org/opennars/lab/microworld/SimNAR.java +++ b/src/main/java/org/opennars/lab/microworld/SimNAR.java @@ -14,6 +14,8 @@ */ package org.opennars.lab.microworld; +import org.opennars.lab.metric.MetricReporter; +import org.opennars.lab.metric.MetricSensor; import org.opennars.storage.Memory; import org.opennars.main.Nar; //import org.opennars.nal.nal8.Operation; @@ -25,6 +27,7 @@ import processing.core.PImage; import processing.event.MouseEvent; import java.awt.*; +import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; @@ -41,7 +44,36 @@ import org.opennars.operator.Operator; public class SimNAR extends Frame { - public SimNAR() { + public MetricReporter metricReporter; + + public SimNAR() throws UnknownHostException { + metricReporter = new MetricReporter(); + metricReporter.connect("127.0.0.1", 1212); + + metricReporter.sensors.add(new MetricSensor() { + @Override + public String getName() { + return "ateGood"; + } + + @Override + public String getValueAsString() { + return "" + counterAteGood; + } + }); + + metricReporter.sensors.add(new MetricSensor() { + @Override + public String getName() { + return "ateBad"; + } + + @Override + public String getValueAsString() { + return "" + counterAteBad; + } + }); + String[] args = {"Microworld"}; MyPapplet mp = new MyPapplet (); mp.setSize(800,600); @@ -1405,7 +1437,7 @@ fill(138,138,128); } - public static void main(String[] args) { + public static void main(String[] args) throws UnknownHostException { NARSwing.themeInvert(); new SimNAR(); }