RLPark 1.0.0
Reinforcement Learning Framework in Java

CreateBinaryLogfile.java

Go to the documentation of this file.
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 }
 All Classes Namespaces Files Functions Variables Enumerations
Zephyr
RLPark