RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package rlpark.plugin.critterbot.environment; 00002 00003 import java.awt.Color; 00004 00005 import rlpark.plugin.critterbot.CritterbotProblem; 00006 import rlpark.plugin.critterbot.actions.CritterbotAction; 00007 import rlpark.plugin.critterbot.data.CritterbotLabels; 00008 import rlpark.plugin.critterbot.data.CritterbotLabels.LedMode; 00009 import rlpark.plugin.critterbot.data.CritterbotObservation; 00010 import rlpark.plugin.critterbot.internal.CritterbotConnection; 00011 import rlpark.plugin.rltoys.envio.actions.Action; 00012 import rlpark.plugin.rltoys.envio.observations.Legend; 00013 import rlpark.plugin.rltoys.envio.observations.ObsFilter; 00014 import rlpark.plugin.robot.helpers.RobotEnvironment; 00015 import rlpark.plugin.robot.observations.ObservationReceiver; 00016 import zephyr.plugin.core.api.monitoring.abstracts.DataMonitor; 00017 import zephyr.plugin.core.api.monitoring.abstracts.MonitorContainer; 00018 00019 public class CritterbotEnvironment extends RobotEnvironment implements CritterbotProblem, MonitorContainer { 00020 protected CritterbotAction agentAction; 00021 private LedMode ledMode = LedMode.BUSY; 00022 private final Color[] ledValues = new Color[CritterbotLabels.NbLeds]; 00023 protected final CritterbotConnection critterbotConnection; 00024 00025 protected CritterbotEnvironment(ObservationReceiver receiver) { 00026 super(receiver, false); 00027 critterbotConnection = (CritterbotConnection) receiver(); 00028 } 00029 00030 @Override 00031 public Legend legend() { 00032 return critterbotConnection.legend(); 00033 } 00034 00035 public void sendAction(CritterbotAction action) { 00036 agentAction = action; 00037 if (action != null) 00038 critterbotConnection.sendActionDrop(action, ledMode, ledValues); 00039 ledMode = LedMode.CLEAR; 00040 } 00041 00042 public void setLed(Color[] colors) { 00043 setLedMode(LedMode.CUSTOM); 00044 System.arraycopy(colors, 0, ledValues, 0, ledValues.length); 00045 } 00046 00047 public void setLedMode(LedMode ledMode) { 00048 this.ledMode = ledMode; 00049 } 00050 00051 public CritterbotObservation getCritterbotObservation(double[] obs) { 00052 return getCritterbotObservation(System.currentTimeMillis(), obs); 00053 } 00054 00055 public CritterbotObservation getCritterbotObservation(long time, double[] obs) { 00056 return new CritterbotObservation(legend(), time, obs); 00057 } 00058 00059 public ObsFilter getDefaultFilter() { 00060 return CritterbotLabels.newDefaultFilter(legend()); 00061 } 00062 00063 @Override 00064 public void addToMonitor(DataMonitor monitor) { 00065 CritterbotEnvironments.addObservationsLogged(this, monitor); 00066 CritterbotEnvironments.addActionsLogged(this, monitor); 00067 } 00068 00069 public void sendAction(Action a) { 00070 sendAction((CritterbotAction) a); 00071 } 00072 00073 @Override 00074 public CritterbotAction lastAction() { 00075 return agentAction; 00076 } 00077 00078 @Override 00079 public void close() { 00080 super.close(); 00081 } 00082 00083 @Override 00084 public boolean isClosed() { 00085 return super.isClosed(); 00086 } 00087 }