using MLAgents.InferenceBrain; using UnityEngine; namespace MLAgents.Sensor { public abstract class SensorBase : ISensor { /// /// Write the observations to the output buffer. This size of the buffer will be product of the sizes returned /// by GetFloatObservationShape(). /// /// public abstract void WriteObservation(float[] output); public abstract int[] GetFloatObservationShape(); public abstract string GetName(); /// /// Default implementation of WriteToTensor interface. This creates a temporary array, calls WriteObservation, /// and then writes the results to the TensorProxy. /// /// /// public virtual void WriteToTensor(TensorProxy tensorProxy, int agentIndex) { // TODO reuse buffer for similar agents, don't call GetFloatObservationShape() int[] shape = GetFloatObservationShape(); int numFloats = 1; foreach (var dim in shape) { numFloats *= dim; } float[] buffer = new float[numFloats]; WriteObservation(buffer); for (var i = 0; i < numFloats; i++) { tensorProxy.data[agentIndex, i] = buffer[i]; } } public virtual byte[] GetCompressedObservation() { return null; } public virtual CompressionType GetCompressionType() { return CompressionType.None; } } }