コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
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());
                }
            }
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
            }
        }