RLPark 1.0.0
Reinforcement Learning Framework in Java

ExperimentCounter.java

Go to the documentation of this file.
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 }
 All Classes Namespaces Files Functions Variables Enumerations
Zephyr
RLPark