RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package rlpark.plugin.robot.helpers; 00002 00003 00004 import rlpark.plugin.robot.interfaces.RobotLive; 00005 import rlpark.plugin.robot.internal.sync.ObservationSynchronizer; 00006 import rlpark.plugin.robot.observations.ObservationReceiver; 00007 import rlpark.plugin.robot.observations.ObservationVersatile; 00008 import rlpark.plugin.robot.observations.ObservationVersatileArray; 00009 import zephyr.plugin.core.api.labels.Labeled; 00010 00011 public abstract class RobotEnvironment implements RobotLive, Labeled { 00012 protected final ObservationSynchronizer obsSync; 00013 protected ObservationVersatile lastReceivedObsBuffer; 00014 00015 public RobotEnvironment(ObservationReceiver receiver, boolean persistent) { 00016 obsSync = new ObservationSynchronizer(receiver, persistent); 00017 } 00018 00019 public ObservationSynchronizer synchronizer() { 00020 return obsSync; 00021 } 00022 00023 protected ObservationReceiver receiver() { 00024 return obsSync.receiver(); 00025 } 00026 00027 public double[] newObsNow() { 00028 ObservationVersatileArray rawObs = newRawObsNow(); 00029 return rawObs != null ? rawObs.doubleValues() : null; 00030 } 00031 00032 public ObservationVersatileArray newRawObsNow() { 00033 ObservationVersatileArray newObs = obsSync.newObsNow(); 00034 if (newObs != null) 00035 lastReceivedObsBuffer = newObs.last(); 00036 return newObs; 00037 } 00038 00039 public double[] waitNewObs() { 00040 return waitNewRawObs().doubleValues(); 00041 } 00042 00043 @Override 00044 public ObservationVersatileArray waitNewRawObs() { 00045 ObservationVersatileArray observations = obsSync.waitNewObs(); 00046 if (observations == null) { 00047 lastReceivedObsBuffer = null; 00048 // close(); JVM - removed this as it causes a lost observation to cause 00049 // more problems. 00050 return null; 00051 } 00052 if (observations.last() != null) 00053 lastReceivedObsBuffer = observations.last(); 00054 return observations; 00055 } 00056 00057 @Override 00058 public void close() { 00059 obsSync.terminate(); 00060 } 00061 00062 @Override 00063 public String label() { 00064 return getClass().getSimpleName(); 00065 } 00066 00067 public double[] lastReceivedObs() { 00068 return lastReceivedObsBuffer != null ? lastReceivedObsBuffer.doubleValues() : null; 00069 } 00070 00071 @Override 00072 public ObservationVersatile lastReceivedRawObs() { 00073 return lastReceivedObsBuffer; 00074 } 00075 00076 @Override 00077 public int observationPacketSize() { 00078 return receiver().packetSize(); 00079 } 00080 00081 public boolean isClosed() { 00082 return obsSync.isTerminated(); 00083 } 00084 }