Accord.Tests.Math.GoldfarbIdnaniTest.GoldfarbIdnaniConstructorTest5 C# (CSharp) Method

GoldfarbIdnaniConstructorTest5() private method

private GoldfarbIdnaniConstructorTest5 ( ) : void
return void
        public void GoldfarbIdnaniConstructorTest5()
        {
            // min 1x² - 2xy + 3y² +z² - 4x - 5y -z, 6x-7y <= 8, 9x + 1y <= 11, 9x-y <= 11, -z-y = 12
            // http://www.wolframalpha.com/input/?i=min+1x%C2%B2+-+2xy+%2B+3y%C2%B2+%2Bz%C2%B2+-+4x+-+5y+-z%2C+6x-7y+%3C%3D+8%2C+9x+%2B+1y+%3C%3D+11%2C+9x-y+%3C%3D+11%2C+-z-y+%3D+12

            double x = 0, y = 0, z = 0;

            var f = new QuadraticObjectiveFunction(() => x * x - 2 * x * y + 3 * y * y + z * z - 4 * x - 5 * y - z);

            List<LinearConstraint> constraints = new List<LinearConstraint>();
            constraints.Add(new LinearConstraint(f, () => 6 * x - 7 * y <= 8));
            constraints.Add(new LinearConstraint(f, () => 9 * x + 1 * y <= 11));
            constraints.Add(new LinearConstraint(f, () => 9 * x - y <= 11));
            constraints.Add(new LinearConstraint(f, () => -z - y == 12));


            GoldfarbIdnani target = new GoldfarbIdnani(f, constraints);

            bool success = target.Minimize();
            double value = target.Value;

            Assert.IsTrue(success);

            Assert.AreEqual(14376 / 109.0, value, 1e-10);

            Assert.AreEqual(-186 / 109.0, target.Solution[0], 1e-10);
            Assert.AreEqual(-284 / 109.0, target.Solution[1], 1e-10);
            Assert.AreEqual(-1024 / 109.0, target.Solution[2], 1e-10);

            foreach (double v in target.Solution)
                Assert.IsFalse(double.IsNaN(v));

        }