示例#1
0
        public void FloatPredeterminationTest()
        {
            var problem     = new Problem("test");
            var dom         = new FloatDomain("signed unit", -1, 1);
            var x           = (FloatVariable)dom.Instantiate("x", problem);
            var y           = (FloatVariable)dom.Instantiate("y", problem);
            var z           = (FloatVariable)dom.Instantiate("z", problem);
            var bigThresh   = 1.5f;
            var smallThresh = -2.3f;
            var xBig        = x > bigThresh;
            var ySmall      = y < smallThresh;
            var zBig        = z > bigThresh;
            var zSmall      = z < smallThresh;
            var xLTy        = x < y;
            var xGTz        = x > z;
            var yLTz        = y < z;

            for (var i = 0; i < 100; i++)
            {
                var xVal = Random.Float(-1, 1);
                var yVal = Random.Float(-1, 1);
                x.PredeterminedValue = xVal;
                y.PredeterminedValue = yVal;
                var s = problem.Solve();
                Assert.AreEqual(xVal, x.Value(s));
                Assert.AreEqual(yVal, y.Value(s));

                Assert.IsTrue(problem.IsPredetermined(xBig));
                Assert.AreEqual(s[xBig], xVal >= bigThresh);

                Assert.IsTrue(problem.IsPredetermined(ySmall));
                Assert.AreEqual(s[ySmall], yVal <= smallThresh);

                Assert.IsTrue(problem.IsPredetermined(xLTy));
                Assert.AreEqual(s[xLTy], xVal <= yVal);

                Assert.IsFalse(problem.IsPredetermined(zBig));
                Assert.IsFalse(problem.IsPredetermined(zSmall));

                Assert.IsFalse(problem.IsPredetermined(xGTz));
                Assert.IsFalse(problem.IsPredetermined(yLTz));
            }
        }