RLPark 1.0.0
Reinforcement Learning Framework in Java
|
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 }