RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package rlpark.plugin.rltoys.experiments.helpers; 00002 00003 import java.io.File; 00004 import java.io.Serializable; 00005 import java.text.DecimalFormat; 00006 import java.util.ArrayList; 00007 import java.util.List; 00008 import java.util.Random; 00009 00010 public class ExperimentCounter implements Cloneable, Serializable { 00011 private static final long serialVersionUID = 4512747323143545399L; 00012 public final File folder; 00013 private static final String LOGEXTENSION = "logtxt"; 00014 public static final String DefaultFileName = "data"; 00015 private final DecimalFormat formatter = new DecimalFormat("00"); 00016 private final int counterMax; 00017 private int counter = -1; 00018 private final List<File> folderPrepared = new ArrayList<File>(); 00019 private String defaultName = DefaultFileName; 00020 00021 public ExperimentCounter(int nbExperiment, String folderPath) { 00022 counterMax = nbExperiment - 1; 00023 folder = prepareFolder(folderPath); 00024 } 00025 00026 private ExperimentCounter(int nbExperiment, String folderPath, int counter) { 00027 counterMax = nbExperiment - 1; 00028 folder = prepareFolder(folderPath); 00029 this.counter = counter; 00030 } 00031 00032 public void setDefaultName(String defaultName) { 00033 this.defaultName = defaultName; 00034 } 00035 00036 private File prepareFolder(String folderPath) { 00037 File folder = new File(folderPath); 00038 if (folderPrepared.contains(folder)) 00039 return folder; 00040 folder.mkdir(); 00041 folderPrepared.add(folder); 00042 return folder; 00043 } 00044 00045 public void reset() { 00046 counter = -1; 00047 } 00048 00049 public boolean hasNext() { 00050 return counter < counterMax; 00051 } 00052 00053 public ExperimentCounter nextExperiment() { 00054 counter += 1; 00055 return this; 00056 } 00057 00058 public String filename() { 00059 return filename(defaultName, LOGEXTENSION); 00060 } 00061 00062 public String filename(String baseName) { 00063 return filename(baseName, LOGEXTENSION); 00064 } 00065 00066 public String filename(String baseName, String extension) { 00067 return folderFilename(null, baseName, extension); 00068 } 00069 00070 public String folderFilename(String folderName) { 00071 return folderFilename(folderName, defaultName); 00072 } 00073 00074 public String folderFilename(String folderName, String baseName) { 00075 return folderFilename(folderName, baseName, LOGEXTENSION); 00076 } 00077 00078 public String folderFilename(String folderName, String baseName, String extension) { 00079 String folderPath = folder.getAbsolutePath(); 00080 if (folderName != null && !folderName.isEmpty()) 00081 folderPath = folderPath + "/" + folderName; 00082 prepareFolder(folderPath); 00083 return folderPath + "/" + baseName + formatter.format(counter) + "." + extension; 00084 } 00085 00086 public Random newRandom() { 00087 return newRandom(counter); 00088 } 00089 00090 public int currentIndex() { 00091 return counter; 00092 } 00093 00094 public static Random newRandom(int counter) { 00095 return new Random(counter); 00096 } 00097 00098 @Override 00099 public ExperimentCounter clone() { 00100 ExperimentCounter experimentCounter = new ExperimentCounter(-1, folder.getAbsolutePath(), counter); 00101 experimentCounter.setDefaultName(defaultName); 00102 return experimentCounter; 00103 } 00104 }