def test__get_pivoting_row(self): """Test Tableau._get_pivoting_row method.""" tableau = lp.Tableau(5, 2) tableau.add_constraint([-6, 0, 1, -2, 2, 6], 2) tableau.add_constraint([-3, 1, 0, 6, 3, 15], 1) tableau.add_cost_function([5, 0, 0, 3, -2, -21]) self.assertEqual(tableau._get_pivoting_row(4), 0)
def test__pivote(self): """Test Tableau._pivote method.""" tableau = lp.Tableau(3, 3) tableau.add_constraint([1, 4, 2, 6], 0) tableau.add_constraint([3, 14, 8, 16], 1) tableau.add_constraint([4, 21, 10, 28], 2) # Pivote by x1 in the first equation tableau._pivote(0, 0) self.assertEqual( tableau._tableau, [[1.0, 4.0, 2.0, 6.0], [0.0, 2.0, 2.0, -2.0], [0.0, 5.0, 2.0, 4.0] ], ) # Pivote by x2 in the second equation tableau._pivote(1, 1) self.assertEqual( tableau._tableau, [[1.0, 0.0, -2.0, 10.0], [0.0, 1.0, 1.0, -1.0], [0.0, 0.0, -3.0, 9.0]], ) # Pivote by x3 in the third equation tableau._pivote(2, 2) self.assertEqual( tableau._tableau, [[1.0, 0.0, 0.0, 4.0], [0.0, 1.0, 0.0, 2.0], [0.0, 0.0, 1.0, -3.0] ], )
def test_is_basic_feasible_solution_fails(self): """Test Tableau.is_basic_feasible_solution failures.""" tableau = lp.Tableau(4, 2) tableau.add_constraint([1, 1, 2, 1, 6], 0) tableau.add_constraint([0, 3, 1, 8, 3], 1) tableau.add_cost_function([0, 0, 0, 0, 0]) self.assertRaises(AssertionError, tableau.is_basic_feasible_solution)
def test_is_basic_feasible_solution(self): """Test Tableau.is_basic_feasible_solution method.""" tableau = lp.Tableau(4, 2) tableau.add_constraint([1, 0, 1.667, 1.667, 5], 0) tableau.add_constraint([0, 1, 0.333, 2.667, 1], 1) tableau.add_cost_function([0, 0, 0, 0, 0]) self.assertTrue(tableau.is_basic_feasible_solution())
def test_is_canonical_almost_canonical(self): """Test Tableau.is_canonical when no canonical.""" tableau = lp.Tableau(2, 2) tableau.add_constraint([1, 2, 5], 0) tableau.add_constraint([0, 1, 5], 1) tableau.add_cost_function([2, 3, 5]) self.assertFalse(tableau.is_canonical())
def test_is_minimum(self): """Test Tableau.is_minimum method.""" tableau = lp.Tableau(3, 2) tableau.add_constraint([1, 2, 3, 4], 0) tableau.add_constraint([0, 1, 2, 3], 1) tableau.add_cost_function([0, 0, 1, 2]) self.assertTrue(tableau.is_minimum())
def test_is_canonical(self): """Test Tableau.is_canonical when canonical.""" tableau = lp.Tableau(2, 2) tableau.add_constraint([1, 0, 5], 0) tableau.add_constraint([0, 1, 5], 1) tableau.add_cost_function([0, 0, 5]) self.assertTrue(tableau.is_canonical())
def test_cost_function(self): """Test Tableau.cost_function for non artificial models.""" tableau = lp.Tableau(3, 2) tableau.add_constraint([1, 2, 3, 4], 0) tableau.add_constraint([0, 1, 2, 3], 1) tableau.add_cost_function([0, 0, 1, 2]) self.assertEqual(tableau.cost_function(), [0, 0, 1, 2])
def test_is_minimum_artificial_not_minimum(self): """Test Tableau.is_minimum method.""" tableau = lp.Tableau(3, 2) tableau.add_constraint([1, 2, 3, 4], 0) tableau.add_constraint([0, 1, 2, 3], 1) tableau.add_cost_function([0, 0, 1, 2]) tableau.add_artificial_function([2, -3, 0, 0]) self.assertFalse(tableau.is_minimum())
def test_drop_artificial_artificial_variable(self): """Test Tableau.drop_artificial fails when artificial variable.""" tableau = lp.Tableau(4, 2) tableau.add_constraint([1, 2, 1, 0, 5], 2) tableau.add_constraint([0, 1, 0, 1, 5], 3) tableau.add_cost_function([2, 3, 0, 0, 5]) tableau.add_artificial_function([1, 3, 0, 0, -15]) self.assertRaises(AssertionError, tableau.drop_artificial)
def test_drop_artificial_not_minimal(self): """Test Tableau.drop_artificial fails when not minimal.""" tableau = lp.Tableau(4, 2) tableau.add_constraint([1, 2, 1, 0, 5], 0) tableau.add_constraint([0, 1, 0, 1, 5], 1) tableau.add_cost_function([2, 3, 0, 0, 5]) tableau.add_artificial_function([-1, -3, 0, 0, -15]) self.assertRaises(AssertionError, tableau.drop_artificial)
def test_constraints(self): """Test Tableau.constraints method.""" tableau = lp.Tableau(3, 2) tableau.add_constraint([1, 2, 3, 4], 0) tableau.add_constraint([0, 1, 2, 3], 1) tableau.add_cost_function([0, 0, 1, 2]) tableau.add_artificial_function([1, 3, 5, 7]) self.assertEqual(tableau.constraints(), [[1, 2, 3, 4], [0, 1, 2, 3]])
def test_add_cost_function(self): """Test Tableau.add_cost_function success.""" tableau = lp.Tableau(3, 2) tableau.add_constraint([1, 2, 3, 4], 0) tableau.add_constraint([0, 1, 2, 3], 1) tableau.add_cost_function([0, 0, 1, 2]) self.assertEqual(tableau._tableau, [[1, 2, 3, 4], [0, 1, 2, 3], [0, 0, 1, 2]])
def test_add_constraint_fails(self): """Test Tableau.add_constraint asserts.""" tableau = lp.Tableau(3, 2) self.assertRaises(AssertionError, tableau.add_constraint, [1], 0) self.assertRaises(AssertionError, tableau.add_constraint, [1, 2, 3, 4, 5], 0) tableau.add_constraint([1, 2, 3, 4], 0) self.assertRaises(AssertionError, tableau.add_constraint, [1, 2, 3, 4], 0)
def test_drop_artificial(self): """Test Tableau.drop_artificial method.""" tableau = lp.Tableau(4, 2) tableau.add_constraint([1, 2, 1, 0, 5], 0) tableau.add_constraint([0, 1, 0, 1, 5], 1) tableau.add_cost_function([2, 3, 0, 0, 5]) tableau.add_artificial_function([1, 3, 0, 0, -15]) tableau.drop_artificial() self.assertFalse(tableau._artificial) self.assertEqual(tableau._tableau, [[1, 2, 5], [0, 1, 5], [2, 3, 5]])
def test_simplex(self): """Test Tableau.simplex method.""" tableau = lp.Tableau(5, 2) tableau.add_constraint([-6, 0, 1, -2, 2, 6], 2) tableau.add_constraint([-3, 1, 0, 6, 3, 15], 1) tableau.add_cost_function([5, 0, 0, 3, -2, -21]) tableau.simplex() self.assertEqual(tableau._basic_variables, [4, 0]) self.assertEqual(tableau._tableau, [[0.0, 1 / 2, -1 / 4, 7 / 2, 1.0, 6.0], [1.0, 1 / 6, -1 / 4, 3 / 2, 0.0, 1.0], [0.0, 1 / 6, 3 / 4, 5 / 2, 0.0, -14.0]])
def test_add_artificial_function_fails(self): """Test Tableau.add_artificial_function asserts.""" tableau = lp.Tableau(3, 2) self.assertRaises(AssertionError, tableau.add_artificial_function, [1]) self.assertRaises(AssertionError, tableau.add_artificial_function, [1, 2, 3, 4])
def test_add_constraint(self): """Test Tableau.add_constraint success.""" tableau = lp.Tableau(3, 2) tableau.add_constraint([1, 2, 3, 4], 0) self.assertEqual(tableau._basic_variables, [0]) self.assertEqual(tableau._tableau, [[1, 2, 3, 4]])