using Unity.MLAgents.Sensors; namespace Unity.MLAgentsExamples { /// <summary> /// A simple sensor that provides a number default implementations. /// </summary> public abstract class SensorBase : ISensor { /// <summary> /// Write the observations to the output buffer. This size of the buffer will be product /// of the Shape array values returned by <see cref="ObservationSpec"/>. /// </summary> /// <param name="output"></param> public abstract void WriteObservation(float[] output); /// <inheritdoc/> public abstract ObservationSpec GetObservationSpec(); /// <inheritdoc/> public abstract string GetName(); /// <summary> /// Default implementation of Write interface. This creates a temporary array, /// calls WriteObservation, and then writes the results to the ObservationWriter. /// </summary> /// <param name="writer"></param> /// <returns>The number of elements written.</returns> public virtual int Write(ObservationWriter writer) { // TODO reuse buffer for similar agents var numFloats = this.ObservationSize(); float[] buffer = new float[numFloats]; WriteObservation(buffer); writer.AddList(buffer); return numFloats; } /// <inheritdoc/> public void Update() { } /// <inheritdoc/> public void Reset() { } /// <inheritdoc/> public virtual byte[] GetCompressedObservation() { return null; } /// <inheritdoc/> public virtual CompressionSpec GetCompressionSpec() { return CompressionSpec.Default(); } } }