RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package rlpark.plugin.irobot.logfiles; 00002 00003 import java.io.IOException; 00004 00005 import rlpark.plugin.irobot.internal.descriptors.DropDescriptors; 00006 import rlpark.plugin.rltoys.envio.observations.Legend; 00007 import rlpark.plugin.rltoys.utils.Utils; 00008 import rlpark.plugin.robot.interfaces.RobotLog; 00009 import rlpark.plugin.robot.internal.disco.datagroup.DropScalarGroup; 00010 import rlpark.plugin.robot.internal.disco.drops.Drop; 00011 import rlpark.plugin.robot.internal.disco.io.DiscoLogfile; 00012 import rlpark.plugin.robot.internal.disco.io.DiscoPacket; 00013 import rlpark.plugin.robot.internal.sync.Syncs; 00014 import rlpark.plugin.robot.observations.ObservationVersatile; 00015 import rlpark.plugin.robot.observations.ObservationVersatileArray; 00016 import zephyr.plugin.core.api.monitoring.abstracts.DataMonitor; 00017 import zephyr.plugin.core.api.monitoring.abstracts.MonitorContainer; 00018 import zephyr.plugin.core.api.monitoring.abstracts.Monitored; 00019 00020 public class CreateBinaryLogfile implements MonitorContainer, RobotLog { 00021 public static final String Extension = "crtbin"; 00022 private final static Drop sensorDrop = DropDescriptors.newCreateSensorDrop(); 00023 private final static DropScalarGroup sensorGroup = new DropScalarGroup(sensorDrop); 00024 private final DiscoLogfile discoLogFile; 00025 private ObservationVersatile nextObservation; 00026 private ObservationVersatile currentObservation; 00027 00028 public CreateBinaryLogfile(String logfilename) throws IOException { 00029 discoLogFile = new DiscoLogfile(logfilename); 00030 nextObservation = readNextObservation(); 00031 } 00032 00033 private ObservationVersatile readNextObservation() { 00034 while (discoLogFile.hasNext()) { 00035 DiscoPacket packet = discoLogFile.next(); 00036 if (sensorDrop.name().equals(packet.name)) 00037 return Syncs.createObservation(packet.time, packet.byteBuffer(), sensorGroup); 00038 } 00039 return null; 00040 } 00041 00042 @Override 00043 public Legend legend() { 00044 return sensorGroup.legend(); 00045 } 00046 00047 @Override 00048 public boolean hasNextStep() { 00049 return nextObservation != null; 00050 } 00051 00052 @Override 00053 public ObservationVersatileArray nextStep() { 00054 currentObservation = nextObservation; 00055 nextObservation = readNextObservation(); 00056 return new ObservationVersatileArray(Utils.asList(currentObservation)); 00057 } 00058 00059 // @Override 00060 public void close() { 00061 discoLogFile.close(); 00062 } 00063 00064 @Override 00065 public void addToMonitor(DataMonitor monitor) { 00066 addToMonitor(monitor, this); 00067 } 00068 00069 static public void addToMonitor(DataMonitor monitor, final RobotLog problem) { 00070 for (String label : problem.legend().getLabels()) { 00071 final int obsIndex = problem.legend().indexOf(label); 00072 monitor.add(label, new Monitored() { 00073 @Override 00074 public double monitoredValue() { 00075 double[] obs = problem.nextStep().doubleValues(); 00076 if (obs == null) 00077 return -1; 00078 return obs[obsIndex]; 00079 } 00080 }); 00081 } 00082 } 00083 00084 @Override 00085 public int observationPacketSize() { 00086 return sensorDrop.dataSize(); 00087 } 00088 00089 public String filepath() { 00090 return discoLogFile.filepath; 00091 } 00092 }