public void VideoLecture01() { var lp = new LinearProgram { M = 4, N = 2, BasicIndices = new[] { 0, 1, 4, 2, 6 }, NonBasicIndices = new[] { 0, 3, 5 }, Coefficients = new[] { new[] { 0.0, 0.0, 0.0 }, new[] { 2.0, 2.0 / 3.0, 1.0 / 3.0 }, new[] { 2.0, -1.0 / 3.0, -2.0 / 3.0 }, new[] { 2.0, 1.0 / 3.0, 2.0 / 3.0 }, new[] { 2.0, -2.0 / 3.0, -1.0 / 3.0 } }, ObjectiveCoefficients = new[] { 9.0, 9.0, 9.0 } }; var restorer = new SimpleRestoreObjective(); restorer.Restore(lp, new[] { 0.0, 1.0, 2.0 }, new[] { 0, 1, 2 }); lp.ObjectiveCoefficients.ShouldEqual(new[] { 6.0, 4.0 / 3.0, 5.0 / 3.0 }, .000001); }
public void ShouldRestoreObjective_Vl01() { var primal = _reader.Read(DictionaryFiles + "vl1.dict"); var dual = _mapPrimalToDual.Map(primal); var solver = new LinearProgramSolverWeek2(new SimpleAnalyzeEnteringLeavingVariables(), new HackyPivot2()); solver.Solve(dual); var newPrimal = _mapDualToPrimal.Map(dual); _restore.Restore(newPrimal, dual.OriginalObjectiveCoefficients, dual.OriginalNonBasicIndices); newPrimal.Coefficients[1].ShouldEqual(new[] { 2.0, 2.0 / 3.0, 1.0 / 3.0 }, Tolerance); newPrimal.Coefficients[2].ShouldEqual(new[] { 2.0, -1.0 / 3.0, -2.0 / 3.0 }, Tolerance); newPrimal.Coefficients[3].ShouldEqual(new[] { 2.0, 1.0 / 3.0, 2.0 / 3.0 }, Tolerance); newPrimal.Coefficients[4].ShouldEqual(new[] { 2.0, -2.0 / 3.0, -1.0 / 3.0 }, Tolerance); newPrimal.ObjectiveCoefficients.ShouldEqual(new[] { 6, 4.0 / 3.0, 5.0 / 3.0 }, Tolerance); }