public void TestVectorObservations() { var boardString = @"000 000 010"; var gameObj = new GameObject("board"); var board = gameObj.AddComponent <StringBoard>(); board.SetBoard(boardString); var sensorComponent = gameObj.AddComponent <Match3SensorComponent>(); sensorComponent.ObservationType = Match3ObservationType.Vector; var sensor = sensorComponent.CreateSensor(); var expectedShape = new[] { 3 * 3 * 2 }; Assert.AreEqual(expectedShape, sensorComponent.GetObservationShape()); Assert.AreEqual(InplaceArray <int> .FromList(expectedShape), sensor.GetObservationSpec().Shape); var expectedObs = new float[] { 1, 0, /**/ 0, 1, /**/ 1, 0, 1, 0, /**/ 1, 0, /**/ 1, 0, 1, 0, /**/ 1, 0, /**/ 1, 0, }; SensorTestHelper.CompareObservation(sensor, expectedObs); }
public void TestCompressedVisualObservations() { var boardString = @"000 000 010"; var gameObj = new GameObject("board"); var board = gameObj.AddComponent <StringBoard>(); board.SetBoard(boardString); var sensorComponent = gameObj.AddComponent <Match3SensorComponent>(); sensorComponent.ObservationType = Match3ObservationType.CompressedVisual; var sensor = sensorComponent.CreateSensor(); var expectedShape = new[] { 3, 3, 2 }; Assert.AreEqual(expectedShape, sensorComponent.GetObservationShape()); Assert.AreEqual(InplaceArray <int> .FromList(expectedShape), sensor.GetObservationSpec().Shape); Assert.AreEqual(SensorCompressionType.PNG, sensor.GetCompressionType()); var pngData = sensor.GetCompressedObservation(); if (WritePNGDataToFile) { // Enable this if the format of the observation changes SavePNGs(pngData, "match3obs"); } var expectedPng = LoadPNGs("match3obs", 1); Assert.AreEqual(expectedPng, pngData); }
public void TestBufferSensor() { var bufferSensor = new BufferSensor(20, 4, "testName"); var shape = bufferSensor.GetObservationSpec().Shape; var dimProp = bufferSensor.GetObservationSpec().DimensionProperties; Assert.AreEqual(shape[0], 20); Assert.AreEqual(shape[1], 4); Assert.AreEqual(shape.Length, 2); Assert.AreEqual(dimProp[0], DimensionProperty.VariableSize); Assert.AreEqual(dimProp[1], DimensionProperty.None); Assert.AreEqual(dimProp.Length, 2); bufferSensor.AppendObservation(new float[] { 1, 2, 3, 4 }); bufferSensor.AppendObservation(new float[] { 5, 6, 7, 8 }); var obsWriter = new ObservationWriter(); var obs = bufferSensor.GetObservationProto(obsWriter); Assert.AreEqual(shape, InplaceArray <int> .FromList(obs.Shape)); Assert.AreEqual(obs.DimensionProperties.Count, 2); Assert.AreEqual((int)dimProp[0], obs.DimensionProperties[0]); Assert.AreEqual((int)dimProp[1], obs.DimensionProperties[1]); for (int i = 0; i < 8; i++) { Assert.AreEqual(obs.FloatData.Data[i], i + 1); } for (int i = 8; i < 80; i++) { Assert.AreEqual(obs.FloatData.Data[i], 0); } }
public void TestRenderTextureSensorComponent() { foreach (var grayscale in new[] { true, false }) { foreach (SensorCompressionType compression in Enum.GetValues(typeof(SensorCompressionType))) { var width = 24; var height = 16; var texture = new RenderTexture(width, height, 0); var agentGameObj = new GameObject("agent"); var renderTexComponent = agentGameObj.AddComponent <RenderTextureSensorComponent>(); renderTexComponent.RenderTexture = texture; renderTexComponent.Grayscale = grayscale; renderTexComponent.CompressionType = compression; var expectedShape = new[] { height, width, grayscale ? 1 : 3 }; Assert.AreEqual(expectedShape, renderTexComponent.GetObservationShape()); var sensor = renderTexComponent.CreateSensor(); Assert.AreEqual(InplaceArray <int> .FromList(expectedShape), sensor.GetObservationSpec().Shape); Assert.AreEqual(typeof(RenderTextureSensor), sensor.GetType()); } } }
public void TestFromList(int length) { var intArray = new int[length]; for (var i = 0; i < length; i++) { intArray[i] = (i + 1) * 11; // 11, 22, etc. } var converted = InplaceArray <int> .FromList(intArray); Assert.AreEqual(GetTestArray(length), converted); }
public void TestVisualObservationsSpecial() { var boardString = @"000 000 010"; var specialString = @"010 200 000"; var gameObj = new GameObject("board"); var board = gameObj.AddComponent <StringBoard>(); board.SetBoard(boardString); board.SetSpecial(specialString); var sensorComponent = gameObj.AddComponent <Match3SensorComponent>(); sensorComponent.ObservationType = Match3ObservationType.UncompressedVisual; var sensor = sensorComponent.CreateSensor(); var expectedShape = new[] { 3, 3, 2 + 3 }; Assert.AreEqual(expectedShape, sensorComponent.GetObservationShape()); Assert.AreEqual(InplaceArray <int> .FromList(expectedShape), sensor.GetObservationSpec().Shape); Assert.AreEqual(SensorCompressionType.None, sensor.GetCompressionType()); var expectedObs = new float[] { 1, 0, 1, 0, 0, /* (0, 0) */ 0, 1, 1, 0, 0, /* (0, 1) */ 1, 0, 1, 0, 0, /* (0, 0) */ 1, 0, 0, 0, 1, /* (0, 2) */ 1, 0, 1, 0, 0, /* (0, 0) */ 1, 0, 1, 0, 0, /* (0, 0) */ 1, 0, 1, 0, 0, /* (0, 0) */ 1, 0, 0, 1, 0, /* (0, 1) */ 1, 0, 1, 0, 0, /* (0, 0) */ }; SensorTestHelper.CompareObservation(sensor, expectedObs); var expectedObs3D = new float[, , ] { { { 1, 0, 1, 0, 0 }, { 0, 1, 1, 0, 0 }, { 1, 0, 1, 0, 0 } }, { { 1, 0, 0, 0, 1 }, { 1, 0, 1, 0, 0 }, { 1, 0, 1, 0, 0 } }, { { 1, 0, 1, 0, 0 }, { 1, 0, 0, 1, 0 }, { 1, 0, 1, 0, 0 } }, }; SensorTestHelper.CompareObservation(sensor, expectedObs3D); }
public void TestBufferSensorComponent() { var agentGameObj = new GameObject("agent"); var bufferComponent = agentGameObj.AddComponent <BufferSensorComponent>(); bufferComponent.MaxNumObservables = 20; bufferComponent.ObservableSize = 4; bufferComponent.SensorName = "TestName"; var sensor = bufferComponent.CreateSensors()[0]; var shape = sensor.GetObservationSpec().Shape; Assert.AreEqual(shape[0], 20); Assert.AreEqual(shape[1], 4); Assert.AreEqual(shape.Length, 2); bufferComponent.AppendObservation(new float[] { 1, 2, 3, 4 }); bufferComponent.AppendObservation(new float[] { 5, 6, 7, 8 }); var obsWriter = new ObservationWriter(); var obs = sensor.GetObservationProto(obsWriter); Assert.AreEqual(shape, InplaceArray <int> .FromList(obs.Shape)); Assert.AreEqual(obs.DimensionProperties.Count, 2); Assert.AreEqual(sensor.GetName(), "TestName"); for (int i = 0; i < 8; i++) { Assert.AreEqual(obs.FloatData.Data[i], i + 1); } for (int i = 8; i < 80; i++) { Assert.AreEqual(obs.FloatData.Data[i], 0); } }