public void DegeneracyTest() { #region Arrange var target = new Solver(); var lc1 = new LinearConstraint() { Coefficients = new double[3] { 1, 1, 0 }, Relationship = Relationship.LessThanOrEquals, Value = 1 }; var lc2 = new LinearConstraint() { Coefficients = new double[3] { 0, -1, 1 }, Relationship = Relationship.LessThanOrEquals, Value = 0 }; var constraints = new List<LinearConstraint>() { lc1, lc2 }; var goal = new Goal() { Coefficients = new double[3] { 1, 1, 1 }, ConstantTerm = 0 }; var model = new Model() { Constraints = constraints, Goal = goal, GoalKind = GoalKind.Maximize }; var expected = new Solution() { Decisions = new double[3] { 0, 1, 1 }, Quality = SolutionQuality.Optimal, AlternateSolutionsExist = false, OptimalValue = 2 }; #endregion //Act var actual = target.Solve(model); //Assert CollectionAssert.AreEqual(expected.Decisions, actual.Decisions); Assert.AreEqual(expected.Quality, actual.Quality); Assert.AreEqual(expected.AlternateSolutionsExist, actual.AlternateSolutionsExist); }
public void TwoPhaseClassTest() { #region Arrange var target = new Solver(); var lc1 = new LinearConstraint() { Coefficients = new double[2] { 1, 1 }, Relationship = Relationship.LessThanOrEquals, Value = 35 }; var lc2 = new LinearConstraint() { Coefficients = new double[2] { 1, 2 }, Relationship = Relationship.LessThanOrEquals, Value = 38 }; var lc3 = new LinearConstraint() { Coefficients = new double[2] { 2, 2 }, Relationship = Relationship.LessThanOrEquals, Value = 50 }; var constraints = new List<LinearConstraint>() { lc1, lc2, lc3 }; var goal = new Goal() { Coefficients = new double[2] { 350, 450 }, ConstantTerm = 0 }; var model = new Model() { Constraints = constraints, Goal = goal, GoalKind = GoalKind.Maximize }; var expected = new Solution() { Decisions = new double[2] { 12, 13 }, Quality = SolutionQuality.Optimal, AlternateSolutionsExist = false, OptimalValue = 10050 // 12*350 + 13*450 }; var actual = target.Solve(model); #endregion ////Act ////Assert CollectionAssert.AreEqual(expected.Decisions, actual.Decisions); Assert.AreEqual(expected.Quality, actual.Quality); Assert.AreEqual(expected.AlternateSolutionsExist, actual.AlternateSolutionsExist); }
public void Simple2PhaseFromPaper() { #region Arrange var target = new Solver(); var lc1 = new LinearConstraint() { Coefficients = new double[2] { 1, 1 }, Relationship = Relationship.GreaterThanOrEquals, Value = 4 }; var lc2 = new LinearConstraint() { Coefficients = new double[2] { 1, -1 }, Relationship = Relationship.GreaterThanOrEquals, Value = 1 }; var lc3 = new LinearConstraint() { Coefficients = new double[2] { -1, 2 }, Relationship = Relationship.GreaterThanOrEquals, Value = -1 }; var constraints = new List<LinearConstraint>() { lc1, lc2, lc3 }; var goal = new Goal() { Coefficients = new double[2] { 1, 2 }, ConstantTerm = 0 }; var model = new Model() { Constraints = constraints, Goal = goal, GoalKind = GoalKind.Minimize }; var expected = new Solution() { Decisions = new double[2] { 3, 1 }, Quality = SolutionQuality.Optimal, AlternateSolutionsExist = false, OptimalValue = 5 }; #endregion //Act var actual = target.Solve(model); //Assert CollectionAssert.AreEqual(expected.Decisions, actual.Decisions); Assert.AreEqual(expected.Quality, actual.Quality); Assert.AreEqual(expected.AlternateSolutionsExist, actual.AlternateSolutionsExist); }