RLPark 1.0.0
Reinforcement Learning Framework in Java

DataGroup.java

Go to the documentation of this file.
00001 package rlpark.plugin.robot.internal.disco.datagroup;
00002 
00003 import java.util.ArrayList;
00004 import java.util.Arrays;
00005 import java.util.List;
00006 
00007 import rlpark.plugin.rltoys.envio.observations.Legend;
00008 import rlpark.plugin.robot.internal.disco.drops.Drop;
00009 import rlpark.plugin.robot.internal.disco.drops.DropArray;
00010 import rlpark.plugin.robot.internal.disco.drops.DropData;
00011 
00012 public abstract class DataGroup {
00013   protected final DropData[] dropDatas;
00014   protected final Legend legend;
00015   protected final Drop drop;
00016 
00017   public DataGroup(String prefix, Drop drop) {
00018     dropDatas = getDropData(prefix, drop);
00019     this.drop = drop;
00020     legend = getLegend();
00021   }
00022 
00023   protected Legend getLegend() {
00024     List<String> labels = new ArrayList<String>();
00025     for (DropData data : dropDatas) {
00026       assert !labels.contains(data.label);
00027       labels.add(data.label);
00028     }
00029     return new Legend(labels);
00030   }
00031 
00032   protected DropData[] getDropData(String prefix, Drop drop) {
00033     List<DropData> datas = new ArrayList<DropData>();
00034     addDropData(prefix, datas, drop.dropDatas());
00035     DropData[] dropDatas = new DropData[datas.size()];
00036     datas.toArray(dropDatas);
00037     return dropDatas;
00038   }
00039 
00040   private void addDropData(String prefix, List<DropData> datas, DropData[] dropDatas) {
00041     for (DropData data : dropDatas)
00042       if (data instanceof DropArray)
00043         addDropData(prefix, datas, ((DropArray) data).dropDatas());
00044       else if (!data.readOnly && isDataEligible(prefix, data) && isDataSelected(data))
00045         datas.add(data);
00046   }
00047 
00048   private boolean isDataEligible(String prefix, DropData data) {
00049     if (prefix.isEmpty())
00050       return true;
00051     return data.label.startsWith(prefix);
00052   }
00053 
00054   public Legend legend() {
00055     return legend;
00056   }
00057 
00058   public Drop drop() {
00059     return drop;
00060   }
00061 
00062   @Override
00063   public boolean equals(Object obj) {
00064     if (super.equals(obj))
00065       return true;
00066     return drop().equals(((DataGroup) obj).drop());
00067   }
00068 
00069   @Override
00070   public int hashCode() {
00071     return size();
00072   }
00073 
00074   public void setTime(long time) {
00075     drop.setTime(time);
00076   }
00077 
00078   protected abstract boolean isDataSelected(DropData data);
00079 
00080   public int size() {
00081     return dropDatas.length;
00082   }
00083 
00084   @Override
00085   public String toString() {
00086     return Arrays.toString(dropDatas);
00087   }
00088 
00089 }
 All Classes Namespaces Files Functions Variables Enumerations
Zephyr
RLPark