RLPark 1.0.0
Reinforcement Learning Framework in Java

ParametersLogFileReader.java

Go to the documentation of this file.
00001 package rlpark.plugin.rltoys.experiments.parametersweep.internal;
00002 
00003 import java.io.BufferedReader;
00004 import java.io.File;
00005 import java.io.FileInputStream;
00006 import java.io.IOException;
00007 import java.io.InputStreamReader;
00008 import java.util.ArrayList;
00009 import java.util.HashSet;
00010 import java.util.LinkedHashMap;
00011 import java.util.List;
00012 import java.util.Map;
00013 import java.util.Set;
00014 
00015 import rlpark.plugin.rltoys.experiments.parametersweep.parameters.FrozenParameters;
00016 import rlpark.plugin.rltoys.experiments.parametersweep.parameters.RunInfo;
00017 import rlpark.plugin.rltoys.utils.Utils;
00018 import zephyr.plugin.core.api.internal.logfiles.LogFile;
00019 
00020 @SuppressWarnings("restriction")
00021 public class ParametersLogFileReader {
00022   public final String filepath;
00023   private final RunInfo infos;
00024 
00025   public ParametersLogFileReader(String filepath) {
00026     this.filepath = filepath;
00027     infos = readInfos();
00028   }
00029 
00030   private RunInfo readInfos() {
00031     String infoFilepath = toInfoFilepath(filepath);
00032     if (!new File(infoFilepath).canRead())
00033       return null;
00034     LogFile logFile = LogFile.load(infoFilepath);
00035     String[] labels = logFile.labels();
00036     logFile.step();
00037     double[] values = logFile.currentLine();
00038     RunInfo infos = new RunInfo();
00039     for (int i = 0; i < values.length; i++)
00040       infos.put(labels[i], values[i]);
00041     return infos;
00042   }
00043 
00044   static protected String toInfoFilepath(String filepath) {
00045     return new File(filepath).getParentFile().getAbsolutePath() + "/infos.txt.gz";
00046   }
00047 
00048   private String[] readLabels(BufferedReader reader) throws IOException {
00049     String line = reader.readLine();
00050     if (line == null)
00051       return null;
00052     while (line.startsWith("#") || line.startsWith(" "))
00053       line = line.substring(1);
00054     return line.split(" ");
00055   }
00056 
00057   private FrozenParameters readParameter(Set<String> parameterLabels, String[] labels, BufferedReader reader)
00058       throws IOException {
00059     String read = reader.readLine();
00060     if (read == null)
00061       return null;
00062     Map<String, Double> parameterMap = new LinkedHashMap<String, Double>();
00063     Map<String, Double> resultMap = new LinkedHashMap<String, Double>();
00064     String[] values = read.split(" ");
00065     for (int i = 0; i < values.length; i++)
00066       if (parameterLabels.contains(labels[i]))
00067         parameterMap.put(labels[i], Double.parseDouble(values[i]));
00068       else
00069         resultMap.put(labels[i], Double.parseDouble(values[i]));
00070     return new FrozenParameters(infos, parameterMap, resultMap);
00071   }
00072 
00073   public List<FrozenParameters> extractParameters(String... parameterLabelsArray) {
00074     Set<String> parameterLabels = Utils.asSet(parameterLabelsArray);
00075     List<FrozenParameters> result = new ArrayList<FrozenParameters>();
00076     Set<FrozenParameters> alreadyLoaded = new HashSet<FrozenParameters>();
00077     if (!canRead() || infos == null)
00078       return result;
00079     FileInputStream in = null;
00080     try {
00081       in = new FileInputStream(filepath);
00082       InputStreamReader inReader = new InputStreamReader(in);
00083       BufferedReader reader = new BufferedReader(inReader);
00084       String[] labels = readLabels(reader);
00085       if (labels == null) {
00086         in.close();
00087         return result;
00088       }
00089       while (reader.ready()) {
00090         FrozenParameters parameters = readParameter(parameterLabels, labels, reader);
00091         if (alreadyLoaded.contains(parameters))
00092           continue;
00093         result.add(parameters);
00094         alreadyLoaded.add(parameters);
00095       }
00096       in.close();
00097     } catch (IOException e) {
00098       e.printStackTrace();
00099       if (in != null)
00100         try {
00101           in.close();
00102         } catch (IOException e1) {
00103         }
00104     }
00105     return result;
00106   }
00107 
00108   private boolean canRead() {
00109     return new File(filepath).canRead();
00110   }
00111 
00112   public RunInfo infos() {
00113     return infos;
00114   }
00115 }
 All Classes Namespaces Files Functions Variables Enumerations
Zephyr
RLPark