RLPark 1.0.0
Reinforcement Learning Framework in Java

LogFile.java

Go to the documentation of this file.
00001 package zephyr.plugin.core.api.internal.logfiles;
00002 
00003 import java.io.BufferedReader;
00004 import java.io.File;
00005 import java.io.IOException;
00006 import java.util.LinkedHashMap;
00007 import java.util.Map;
00008 import zephyr.plugin.core.api.labels.Labeled;
00009 import zephyr.plugin.core.api.monitoring.annotations.LabelProvider;
00010 import zephyr.plugin.core.api.monitoring.annotations.Monitor;
00011 
00012 @Monitor
00013 public abstract class LogFile implements Labeled {
00014   protected BufferedReader reader;
00015   final public String filepath;
00016   private final double[] current;
00017   private final String[] labels;
00018 
00019   public LogFile(String filepath) throws IOException {
00020     this.filepath = filepath;
00021     reader = getReader(filepath);
00022     labels = readLabels();
00023     current = new double[labels.length];
00024   }
00025 
00026   @LabelProvider(ids = { "current" })
00027   protected String labelOf(int i) {
00028     return labels[i];
00029   }
00030 
00031   public boolean eof() {
00032     if (reader == null)
00033       return true;
00034     boolean isReady = false;
00035     synchronized (reader) {
00036       try {
00037         if (reader != null)
00038           isReady = reader.ready();
00039       } catch (IOException e) {
00040         e.printStackTrace();
00041       }
00042     }
00043     return !isReady;
00044   }
00045 
00046   abstract protected BufferedReader getReader(String filepath) throws IOException;
00047 
00048   protected String[] readLabels() {
00049     String line = readLine();
00050     while (line.startsWith("#") || line.startsWith(" "))
00051       line = line.substring(1);
00052     String[] labels = line.split(" ");
00053     makeLabelsUnique(labels);
00054     return labels;
00055   }
00056 
00057   private static void makeLabelsUnique(String[] labels) {
00058     Map<String, Integer> nbInstances = new LinkedHashMap<String, Integer>();
00059     for (int i = 0; i < labels.length; i++) {
00060       Integer knownInstance = nbInstances.get(labels[i]);
00061       if (knownInstance != null)
00062         labels[i] = labels[i] + " (" + String.valueOf(knownInstance + 1) + ")";
00063       else
00064         knownInstance = 0;
00065       knownInstance++;
00066       nbInstances.put(labels[i], knownInstance);
00067     }
00068   }
00069 
00070   private String readDataLine() {
00071     if (reader == null)
00072       return null;
00073     String line = readLine();
00074     if (line == null || line.startsWith("#"))
00075       return null;
00076     if (line.isEmpty())
00077       return null;
00078     return line;
00079   }
00080 
00081 
00082   private String readLine() {
00083     String line = null;
00084     synchronized (reader) {
00085       try {
00086         line = reader.readLine();
00087       } catch (IOException e) {
00088         e.printStackTrace();
00089         close();
00090       }
00091     }
00092     return line;
00093   }
00094 
00095   public void step() {
00096     String line = null;
00097     while (!eof() && line == null)
00098       line = readDataLine();
00099     if (line != null)
00100       lineToData(line);
00101   }
00102 
00103   private void lineToData(String line) {
00104     assert line != null;
00105     String[] sarray = line.split(" ");
00106     for (int i = 0; i < Math.min(sarray.length, current.length); i++)
00107       try {
00108         current[i] = Double.valueOf(sarray[i]);
00109       } catch (Exception e) {
00110       }
00111   }
00112 
00113   public static LogFile load(String filename) {
00114     try {
00115       if (filename.endsWith(".gz"))
00116         return new GZippedLogFile(filename);
00117       if (filename.endsWith(".bz2"))
00118         return new BZippedLogFile(filename);
00119       if (filename.endsWith(".zip"))
00120         return new ZippedLogFile(filename);
00121       return new TextLogFile(filename);
00122     } catch (IOException e) {
00123       e.printStackTrace();
00124       return null;
00125     }
00126   }
00127 
00128   public void close() {
00129     if (reader == null)
00130       return;
00131     synchronized (reader) {
00132       try {
00133         reader.close();
00134         reader = null;
00135       } catch (IOException e) {
00136         e.printStackTrace();
00137       }
00138     }
00139   }
00140 
00141   @Override
00142   public String label() {
00143     String fileName = new File(filepath).getName();
00144     int extensionIndex = fileName.indexOf(".");
00145     if (extensionIndex == -1)
00146       return fileName;
00147     return fileName.substring(0, extensionIndex);
00148   }
00149 
00150   public double[] currentLine() {
00151     return current.clone();
00152   }
00153 
00154   public String[] labels() {
00155     return labels.clone();
00156   }
00157 }
 All Classes Namespaces Files Functions Variables Enumerations
Zephyr
RLPark