RLPark 1.0.0
Reinforcement Learning Framework in Java

ParametersLogFileWriter.java

Go to the documentation of this file.
00001 package rlpark.plugin.rltoys.experiments.parametersweep.internal;
00002 
00003 import java.io.File;
00004 import java.io.FileOutputStream;
00005 import java.io.IOException;
00006 import java.io.PrintWriter;
00007 import java.util.ArrayList;
00008 import java.util.Collections;
00009 import java.util.List;
00010 
00011 import rlpark.plugin.rltoys.experiments.parametersweep.parameters.FrozenParameters;
00012 import rlpark.plugin.rltoys.experiments.parametersweep.parameters.Parameters;
00013 import rlpark.plugin.rltoys.experiments.parametersweep.parameters.RunInfo;
00014 import zephyr.plugin.core.api.internal.monitoring.fileloggers.LoggerRow;
00015 import zephyr.plugin.core.api.internal.monitoring.helpers.Loggers;
00016 
00017 @SuppressWarnings("restriction")
00018 public class ParametersLogFileWriter {
00019   public final String filepath;
00020   private RunInfo referenceInfos;
00021 
00022   public ParametersLogFileWriter(String filepath) {
00023     this.filepath = filepath;
00024   }
00025 
00026   private boolean canRead() {
00027     return new File(filepath).canRead();
00028   }
00029 
00030   public void writeParameters(List<FrozenParameters> unsortedResultingParameters) {
00031     try {
00032       List<FrozenParameters> resultingParameters = new ArrayList<FrozenParameters>(unsortedResultingParameters);
00033       Collections.sort(resultingParameters);
00034       LoggerRow loggerRow = new LoggerRow(filepath);
00035       loggerRow.writeLegend(resultingParameters.get(0).labels());
00036       for (FrozenParameters parameters : resultingParameters) {
00037         checkInfo(parameters);
00038         loggerRow.writeRow(parameters.values());
00039       }
00040       loggerRow.close();
00041     } catch (IOException e) {
00042       throw new RuntimeException(e);
00043     }
00044   }
00045 
00046   public void appendParameters(Parameters mutableParameters) {
00047     FrozenParameters parameters = mutableParameters.froze();
00048     boolean canRead = canRead();
00049     try {
00050       Loggers.checkParentFolder(this.filepath);
00051       checkInfo(parameters);
00052       LoggerRow loggerRow = new LoggerRow(new PrintWriter(new FileOutputStream(filepath, true), true));
00053       if (!canRead)
00054         loggerRow.writeLegend(parameters.labels());
00055       loggerRow.writeRow(parameters.values());
00056       loggerRow.close();
00057     } catch (IOException e) {
00058       throw new RuntimeException(e);
00059     }
00060   }
00061 
00062   private void checkInfo(FrozenParameters parameters) throws IOException {
00063     RunInfo infos = parameters.infos();
00064     if (referenceInfos == null) {
00065       referenceInfos = infos;
00066       writeInfoReferenceInfos();
00067       return;
00068     }
00069     if (!referenceInfos.equals(infos))
00070       throw new RuntimeException("Infos do not match previous parameters");
00071   }
00072 
00073   private void writeInfoReferenceInfos() throws IOException {
00074     String infoFile = ParametersLogFileReader.toInfoFilepath(filepath);
00075     LoggerRow loggerRow = new LoggerRow(infoFile);
00076     loggerRow.writeLegend(referenceInfos.infoLabels());
00077     loggerRow.writeRow(referenceInfos.infoValues());
00078     loggerRow.close();
00079   }
00080 
00081   public void reorganizeLogFile(String... parameterLabelsArray) {
00082     ParametersLogFileReader reader = new ParametersLogFileReader(filepath);
00083     List<FrozenParameters> logFileData = reader.extractParameters(parameterLabelsArray);
00084     writeParameters(logFileData);
00085   }
00086 }
 All Classes Namespaces Files Functions Variables Enumerations
Zephyr
RLPark