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