public void RunTest2()
{
// Maximize f(x) = x² + 4y² -8x -16y
//
// s.t. x + y <= 5
// x <= 3
// x,y >= 0
//
double[,] D =
{
{ 2, 0 }, // 1x²
{ 0, 8 }, // 4y²
};
double[] d = { -8, -16 };
double[,] A =
{
{ 1, 1 }, // x + y
{ 1, 0 }, // x
};
double[] b = { 5, 3 };
GoldfarbIdnani target = new GoldfarbIdnani(D, d.Multiply(-1), A.Transpose(), b);
Assert.IsTrue(target.Minimize());
double actual = target.Value;
Assert.AreEqual(64.8, actual, 1e-10);
Assert.IsFalse(double.IsNaN(actual));
Assert.AreEqual(2, target.Iterations);
Assert.AreEqual(0, target.Deletions);
Assert.AreEqual(4.8, target.Solution[0], 1e-6);
Assert.AreEqual(0.2, target.Solution[1], 1e-6);
Assert.AreEqual(17.6, target.Lagrangian[0]);
Assert.AreEqual(0.00, target.Lagrangian[1]);
foreach (double v in target.Lagrangian)
Assert.IsFalse(double.IsNaN(v));
foreach (double v in target.Solution)
Assert.IsFalse(double.IsNaN(v));
}