RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package rlpark.plugin.critterbot.crtrlog; 00002 00003 import java.io.File; 00004 00005 import rlpark.plugin.critterbot.data.CritterbotLabels; 00006 import rlpark.plugin.rltoys.envio.observations.Legend; 00007 import rlpark.plugin.rltoys.math.ranges.Range; 00008 import rlpark.plugin.rltoys.utils.Utils; 00009 00010 public class LogFiles { 00011 static private int nbSamples; 00012 static private int nbSkipSamples; 00013 00014 public static Range[] extractRanges(CrtrLogFile logFile, Range[] ranges, boolean filterSamples) { 00015 int errorFlagIndex = filterSamples ? logFile.legend().indexOf(CritterbotLabels.ErrorFlags) : -1; 00016 nbSamples = 0; 00017 nbSkipSamples = 0; 00018 while (logFile.hasNextStep()) { 00019 double[] o_tp1 = logFile.step(); 00020 if (errorFlagIndex != -1 && o_tp1[errorFlagIndex] != 0 && o_tp1[errorFlagIndex] != 32768) { 00021 nbSkipSamples++; 00022 continue; 00023 } 00024 for (int i = 0; i < o_tp1.length; i++) 00025 ranges[i].update(o_tp1[i]); 00026 nbSamples++; 00027 } 00028 logFile.close(); 00029 return ranges; 00030 } 00031 00032 static public Range[] extractRanges(String filepath, boolean filterSamples) { 00033 CrtrLogFile logFile = CrtrLogFile.load(filepath); 00034 Legend legend = logFile.legend(); 00035 Range[] ranges = new Range[legend.nbLabels()]; 00036 for (int i = 0; i < ranges.length; i++) 00037 ranges[i] = new Range(Double.MAX_VALUE, -Double.MAX_VALUE); 00038 return extractRanges(logFile, ranges, filterSamples); 00039 } 00040 00041 public static Range[] extractRanges(CrtrLogFile logFile, boolean filterSamples) { 00042 return extractRanges(logFile.filepath, filterSamples); 00043 } 00044 00045 public static Range[] extractRanges(CrtrLogFile logFile) { 00046 return extractRanges(logFile.filepath, true); 00047 } 00048 00049 public static Range[] extractRanges(String[] files, boolean filterSamples) { 00050 Range[] ranges = extractRanges(files[0], true); 00051 int totalNbSamples = nbSamples; 00052 int totalNbSkipSamples = nbSkipSamples; 00053 for (int i = 1; i < files.length; i++) { 00054 CrtrLogFile logFile = CrtrLogFile.load(files[i]); 00055 extractRanges(logFile, ranges, filterSamples); 00056 totalNbSamples += nbSamples; 00057 totalNbSkipSamples += nbSkipSamples; 00058 } 00059 nbSamples = totalNbSamples; 00060 nbSkipSamples = totalNbSkipSamples; 00061 return ranges; 00062 } 00063 00064 public static Range[] loadRange(String rangeFilePath, boolean filterSamples, String... files) { 00065 File rangeFile = new File(rangeFilePath); 00066 if (rangeFile.canRead()) 00067 return (Range[]) Utils.load(rangeFile); 00068 Range[] ranges = extractRanges(files, filterSamples); 00069 Utils.save(ranges, rangeFile); 00070 return ranges; 00071 } 00072 }