diff --git a/main.py b/main.py index 725a6fe3a075db8acf5e0da3f48c7d4321b90cb8..cd3f1a2b137039f94ecc1a50dced05ad3c8875ff 100644 --- a/main.py +++ b/main.py @@ -12,7 +12,7 @@ Author: Brandon Rodriguez # User Class Imports. from resources import logging as init_logging -from resources.simplex.simplex import Simplex +from resources.simplex.base import SimplexBase # Initialize Logger. @@ -20,7 +20,7 @@ logger = init_logging.get_logger(__name__) def test_simplex(): - simplex = Simplex() + simplex = SimplexBase() # Read and display ex_1.json. logger.info('') @@ -44,7 +44,6 @@ def test_simplex(): logger.info('') - if __name__ == '__main__': logger.info('Starting program.') diff --git a/resources/simplex/simplex.py b/resources/simplex/base.py similarity index 87% rename from resources/simplex/simplex.py rename to resources/simplex/base.py index 714a91417970e14f316109322af49e61274bad1d..130c06d9c9ab8fcb135bd9e42d786114fbd00354 100644 --- a/resources/simplex/simplex.py +++ b/resources/simplex/base.py @@ -45,17 +45,17 @@ from resources import logging as init_logging logger = init_logging.get_logger(__name__) -class Simplex(): +class SimplexBase(): """ Class to run simplex algorithm. """ def __init__(self, *args, **kwargs): self._matrix_a = None - self._constants = None - self._obj_func = None + self._vector_b = None + self._vector_c = None self._obj_constant_index = None - self._basic_var_indexes = None - self._nonbasic_var_indexes = None + self._b_array = None + self._n_array = None self._description = None self._initialize = Initialize(self) @@ -166,11 +166,11 @@ class Simplex(): """ # Reset all values to None. self._matrix_a = None - self._constants = None - self._obj_func = None + self._vector_b = None + self._vector_c = None self._obj_constant_index = None - self._basic_var_indexes = None - self._nonbasic_var_indexes = None + self._b_array = None + self._n_array = None self._description = None # Check that values are of expected types. @@ -200,32 +200,32 @@ class Simplex(): if len(vector_c) == matrix_row_length: # vector_c is exactly equal to row length. logger.info('Assuming constant for objective function is initially 0.') - self._obj_func = vector_c - self._obj_func.append(0) + self._vector_c = vector_c + self._vector_c.append(0) elif len(vector_c) - 1 == matrix_row_length: # vector_c is equal to row length plus 1. logger.info('Assuming constant for objective function is last index value.') - self._obj_func = vector_c + self._vector_c = vector_c else: raise ValueError('Objective function is expected to be same length as constraint rows (or plus 1, ' 'if objective function constant is not 0.)') # If we made it this far, validation was successful. Set all values. self._matrix_a = matrix_a - self._constants = vector_b - self._obj_constant_index = len(self._obj_func) - 1 + self._vector_b = vector_b + self._obj_constant_index = len(self._vector_c) - 1 # Check if optional basic var arguments were provided. if basic_vars is not None: if isinstance(basic_vars, list): - self._basic_var_indexes = basic_vars + self._b_array = basic_vars else: raise TypeError('The "basic_vars" argument is expected to be of type list.') # Check if optional non-basic var arguments were provided. if non_basic_vars is not None: if isinstance(non_basic_vars, list): - self._nonbasic_var_indexes = non_basic_vars + self._n_array = non_basic_vars else: raise TypeError('The "non_basic_vars" argument is expected to be of type list.') @@ -243,16 +243,16 @@ class Simplex(): """ # Check that values exist. If they do, we will assume that this was called from "set_simplex_values" and we # don't need to re-validate. - if self._matrix_a is None or self._constants is None or self._obj_func is None: + if self._matrix_a is None or self._vector_b is None or self._vector_c is None: raise ValueError('Values are not yet set. This function should only be called from "set_simplex_values".') # Check if basic variables are already defined. - if isinstance(self._basic_var_indexes, list) and len(self._basic_var_indexes) > 0: + if isinstance(self._b_array, list) and len(self._b_array) > 0: # Basic variables are already defined. No reason to proceed. return None rows_with_slack = [] - self._basic_var_indexes = [] + self._b_array = [] expected_basic_var_count = len(self._matrix_a) # Loop through one column at a time of all rows, checking for potential instances of a basic variable. @@ -289,16 +289,16 @@ class Simplex(): if col_valid_for_slack and found_col_non_zero: # We found exactly one non-0 value of 1 in the column. Our saved index was a slack variable. rows_with_slack.append(non_zero_index) - self._basic_var_indexes.append(col_index) + self._b_array.append(col_index) # We've checked all rows and columns. Check our number of found basic variables. - if len(self._basic_var_indexes) > expected_basic_var_count: + if len(self._b_array) > expected_basic_var_count: # We found more possible basic variables than exist rows. # While this is technically a valid matrix format, it so gives us no way to determine which columns contain # the initial basic variables. User needs to define it themselves to proceed. raise ValueError('Only detected {0} constraint equations, yet found {1} possible basic variables. If the ' 'provided equations are correct, then please manually define "basic_variables" value.') - elif len(self._basic_var_indexes) < expected_basic_var_count: + elif len(self._b_array) < expected_basic_var_count: # Found less basic variables than exist rows. We need to add additional columns for the missing variables. for row_index in range(len(self._matrix_a)): # Find all rows without a slack variable. @@ -310,11 +310,11 @@ class Simplex(): self._matrix_a[new_row_index].append(0) # Add new column to objective function too. But make sure to keep objective constant at end of list. - self._obj_func.insert((len(self._obj_func) - 1), 0) + self._vector_c.insert((len(self._vector_c) - 1), 0) self._obj_constant_index += 1 # Save column location of basic var. - self._basic_var_indexes.append(len(self._matrix_a[0]) - 1) + self._b_array.append(len(self._matrix_a[0]) - 1) def _determine_nonbasic_variables(self): """ @@ -322,22 +322,22 @@ class Simplex(): """ # Check that values exist. If they do, we will assume that this was called from "set_simplex_values" and we # don't need to re-validate. - if self._matrix_a is None or self._constants is None or self._obj_func is None: + if self._matrix_a is None or self._vector_b is None or self._vector_c is None: raise ValueError('Values are not yet set. This function should only be called from "set_simplex_values".') # Check if nonbasic variables are already defined. - if isinstance(self._nonbasic_var_indexes, list) and len(self._nonbasic_var_indexes) > 0: + if isinstance(self._n_array, list) and len(self._n_array) > 0: # Nonbasic variables are already defined. No reason to proceed. return None - if self._basic_var_indexes is None or len(self._basic_var_indexes) == 0: + if self._b_array is None or len(self._b_array) == 0: raise ValueError('Values are not yet set. This function should only be called from "set_simplex_values".') # If we got this far, assume we have a proper count of basic variables and record all nonbasic columns. - self._nonbasic_var_indexes = [] + self._n_array = [] for col_index in range(len(self._matrix_a[0])): - if col_index not in self._basic_var_indexes: - self._nonbasic_var_indexes.append(col_index) + if col_index not in self._b_array: + self._n_array.append(col_index) #endregion Simplex Read in and Setup @@ -347,7 +347,7 @@ class Simplex(): logger.info('') # Calculate overall table width. - tableau_length = (len(self._obj_func) * 6) + 4 + tableau_length = (len(self._vector_c) * 6) + 4 # Optionally print description. if self._description is not None: @@ -357,9 +357,9 @@ class Simplex(): # Print variables for reference. print_string = ' ' - for index in range(len(self._obj_func)): + for index in range(len(self._vector_c)): # Check if last index. - if index == (len(self._obj_func) - 1): + if index == (len(self._vector_c) - 1): print_string += ' C ' else: print_string += ' {0:>4} '.format('x{0}'.format(index + 1)) @@ -370,12 +370,12 @@ class Simplex(): # Print objective function. logger.info(' ' + '-' * tableau_length) print_string = ' Max: |' - for index in range(len(self._obj_func)): + for index in range(len(self._vector_c)): # Check if last index. - if index == (len(self._obj_func) - 1): - print_string += ' | {0:>4} |'.format(self._obj_func[index]) + if index == (len(self._vector_c) - 1): + print_string += ' | {0:>4} |'.format(self._vector_c[index]) else: - print_string += ' {0:>4} '.format(self._obj_func[index]) + print_string += ' {0:>4} '.format(self._vector_c[index]) logger.info(print_string) # Print constraints. @@ -389,13 +389,15 @@ class Simplex(): # Loop through all items in row. for item in self._matrix_a[row_index]: print_string += ' {0:>4} '.format(item) - print_string += ' | {0:>4} |'.format(self._constants[row_index]) - print_string += ' {0:>4}'.format('x{0}'.format(self._basic_var_indexes[row_index] + 1)) + print_string += ' | {0:>4} |'.format(self._vector_b[row_index]) + print_string += ' {0:>4}'.format('x{0}'.format(self._b_array[row_index] + 1)) logger.info(print_string) logger.info(' ' + '-' * tableau_length) logger.info('') + #region Child Class Functions + def initialize(self): self._initialize() @@ -413,9 +415,11 @@ class Simplex(): n_array, b_array, matrix_a, vector_b, vector_c, obj_const_index = self._pivot(old_basic_index, new_basic_index) # Set new values to class. - self._nonbasic_var_indexes = n_array - self._basic_var_indexes = b_array + self._n_array = n_array + self._b_array = b_array self._matrix_a = matrix_a - self._constants = vector_b - self._obj_func = vector_c + self._vector_b = vector_b + self._vector_c = vector_c self._obj_constant_index = obj_const_index + + #endregion Child Class Functions diff --git a/resources/simplex/initialize.py b/resources/simplex/initialize.py index c2c7baa3a6a08684ae0515add23aab1abceca5c2..85c4f8bd168e89e7fa548cf438e88bdf61b9ccba 100644 --- a/resources/simplex/initialize.py +++ b/resources/simplex/initialize.py @@ -36,11 +36,11 @@ class Initialize(): def __call__(self, *args, **kwargs): # Get parent data at the point of call. self._matrix_a = self._parent._matrix_a - self._vector_b = self._parent._constants - self._vector_c = self._parent._obj_func + self._vector_b = self._parent._vector_b + self._vector_c = self._parent._vector_c self._obj_constant_index = self._parent._obj_constant_index - self._basic_var_indexes = self._parent._basic_var_indexes - self._nonbasic_var_indexes = self._parent._nonbasic_var_indexes + self._basic_var_indexes = self._parent._b_array + self._nonbasic_var_indexes = self._parent._n_array # Run initialize function. return self.initialize_simplex() @@ -92,15 +92,15 @@ class Initialize(): # Update our parent values for a pivot. self._parent._matrix_a = copy.deepcopy(matrix_a) - self._parent._obj_func = copy.deepcopy(vector_c) - self._parent._nonbasic_var_indexes.append(len(vector_c) - 2) + self._parent._vector_c = copy.deepcopy(vector_c) + self._parent._n_array.append(len(vector_c) - 2) # logger.info('Nonbasics: {0}'.format(self._parent._nonbasic_var_indexes)) # logger.info('Basics: {0}'.format(self._parent._basic_var_indexes)) # Now pivot once to get a feasible instance. # self._parent.display_tableau() # logger.info('Smallest Index: {0}'.format(smallest_index)) - self._parent.pivot(self._parent._basic_var_indexes[smallest_index], (len(vector_c) - 2)) + self._parent.pivot(self._parent._b_array[smallest_index], (len(vector_c) - 2)) # Need base "Simplex" function to run further? return None diff --git a/resources/simplex/pivot.py b/resources/simplex/pivot.py index bae9f3ea0bea42521dbea5552f73a87878c2c179..bf097bb938da0189a6484d8bb87cc50314894043 100644 --- a/resources/simplex/pivot.py +++ b/resources/simplex/pivot.py @@ -5,9 +5,10 @@ Assignment: Linear Programming Simplex Algorithm Author: Brandon Rodriguez -Implementation of the Pivot function for Linear Programming Simplex problems. +Implementation of the "Pivot" function for Linear Programming Simplex problems. """ + # System Imports. import copy @@ -35,11 +36,11 @@ class Pivot(): def __call__(self, old_basic_col, new_basic_col, *args, **kwargs): # Get parent data at the point of call. self._matrix_a = self._parent._matrix_a - self._vector_b = self._parent._constants - self._vector_c = self._parent._obj_func + self._vector_b = self._parent._vector_b + self._vector_c = self._parent._vector_c self._obj_constant_index = self._parent._obj_constant_index - self._basic_var_indexes = self._parent._basic_var_indexes - self._nonbasic_var_indexes = self._parent._nonbasic_var_indexes + self._basic_var_indexes = self._parent._b_array + self._nonbasic_var_indexes = self._parent._n_array # Run pivot function. return self.pivot(old_basic_col, new_basic_col) @@ -51,7 +52,7 @@ class Pivot(): :param new_basic_col: Column index of variable column turning basic. :return: Updated simplex values after pivot. """ - # Get values pulled from parent. We also use typing to make sure we get a new copy and not a reference. + # Get values pulled from parent. We make sure we get a new copy and not a reference. matrix_a = copy.deepcopy(self._matrix_a) vector_b = copy.deepcopy(self._vector_b) vector_c = copy.deepcopy(self._vector_c) diff --git a/tests/resources/simplex/initialize.py b/tests/resources/simplex/initialize.py index 4ff62ca5e807321fde7495a49fde2be1863676aa..7d88d9ec7b45f4ab2bd59d3383de04781c7252af 100644 --- a/tests/resources/simplex/initialize.py +++ b/tests/resources/simplex/initialize.py @@ -12,12 +12,12 @@ Tests for "Initialize" function implementation of the Simplex algorithm. import unittest # User Class Imports. -from resources.simplex.simplex import Simplex +from resources.simplex.base import SimplexBase class TestInitialize(unittest.TestCase): def setUp(self): - self.simplex = Simplex() + self.simplex = SimplexBase() def test__initialize(self): # Setup initial simplex. @@ -34,11 +34,11 @@ class TestInitialize(unittest.TestCase): [2, -1, 1, 0], [1, -5, 0, 1], ]) - self.assertEqual(self.simplex._constants, [2, -4]) - self.assertEqual(self.simplex._obj_func, [2, -1, 0, 0, 0]) + self.assertEqual(self.simplex._vector_b, [2, -4]) + self.assertEqual(self.simplex._vector_c, [2, -1, 0, 0, 0]) self.assertEqual(self.simplex._obj_constant_index, 4) - self.assertEqual(self.simplex._basic_var_indexes, [2, 3]) - self.assertEqual(self.simplex._nonbasic_var_indexes, [0, 1]) + self.assertEqual(self.simplex._b_array, [2, 3]) + self.assertEqual(self.simplex._n_array, [0, 1]) # Call initialize method to test. # self.simplex.display_tableau() diff --git a/tests/resources/simplex/pivot.py b/tests/resources/simplex/pivot.py index f4875fe270b2e98a3301a58524feee6638f0acdb..f1f25103d2a68dbb09dc60441753426b4b4ab0f1 100644 --- a/tests/resources/simplex/pivot.py +++ b/tests/resources/simplex/pivot.py @@ -5,19 +5,19 @@ Assignment: Linear Programming Simplex Algorithm Author: Brandon Rodriguez -Tests for Pivot implementation of the Simplex algorithm. +Tests for "Pivot" function implementation of the Simplex algorithm. """ # System Imports. import unittest # User Class Imports. -from resources.simplex.simplex import Simplex +from resources.simplex.base import SimplexBase class TestPivot(unittest.TestCase): def setUp(self): - self.simplex = Simplex() + self.simplex = SimplexBase() def test__pivot(self): # Setup initial simplex. @@ -37,11 +37,11 @@ class TestPivot(unittest.TestCase): [2, -1, 2, 0, 1, 0], [2, 1, 0, 0, 0, 1], ]) - self.assertEqual(self.simplex._constants, [5, 3, 4]) - self.assertEqual(self.simplex._obj_func, [2, 4, 1, 0, 0, 0, 0]) + self.assertEqual(self.simplex._vector_b, [5, 3, 4]) + self.assertEqual(self.simplex._vector_c, [2, 4, 1, 0, 0, 0, 0]) self.assertEqual(self.simplex._obj_constant_index, 6) - self.assertEqual(self.simplex._basic_var_indexes, [3, 4, 5]) - self.assertEqual(self.simplex._nonbasic_var_indexes, [0, 1, 2]) + self.assertEqual(self.simplex._b_array, [3, 4, 5]) + self.assertEqual(self.simplex._n_array, [0, 1, 2]) # Pivot once, switching col x6 for col x2. self.simplex.pivot(5, 1) @@ -52,8 +52,8 @@ class TestPivot(unittest.TestCase): [4, 0, 2, 0, 1, 1], [2, 1, 0, 0, 0, 1], ]) - self.assertEqual(self.simplex._constants, [1, 7, 4]) - self.assertEqual(self.simplex._obj_func, [-6, 0, 1, 0, 0, -4, -16]) + self.assertEqual(self.simplex._vector_b, [1, 7, 4]) + self.assertEqual(self.simplex._vector_c, [-6, 0, 1, 0, 0, -4, -16]) self.assertEqual(self.simplex._obj_constant_index, 6) - self.assertEqual(self.simplex._basic_var_indexes, [3, 4, 1]) - self.assertEqual(self.simplex._nonbasic_var_indexes, [0, 2, 5]) + self.assertEqual(self.simplex._b_array, [3, 4, 1]) + self.assertEqual(self.simplex._n_array, [0, 2, 5]) diff --git a/tests/resources/simplex/simplex.py b/tests/resources/simplex/simplex.py index cefe8a71fbebe6f360149db224cc94284044bcc2..9c238290d68820b260882a96f00ee27e464b1e7d 100644 --- a/tests/resources/simplex/simplex.py +++ b/tests/resources/simplex/simplex.py @@ -12,12 +12,12 @@ Tests for implementation of the "Simplex" algorithm. import unittest # User Class Imports. -from resources.simplex.simplex import Simplex +from resources.simplex.base import SimplexBase class TestSimplex(unittest.TestCase): def setUp(self): - self.simplex = Simplex() + self.simplex = SimplexBase() def test__parse_from_json__success(self): with self.subTest('Using first set of keys.'): @@ -31,11 +31,11 @@ class TestSimplex(unittest.TestCase): 'non_basic_vars': [5], }) self.assertEqual(self.simplex._matrix_a, [[1]]) - self.assertEqual(self.simplex._constants, [2]) - self.assertEqual(self.simplex._obj_func, [3, 0]) + self.assertEqual(self.simplex._vector_b, [2]) + self.assertEqual(self.simplex._vector_c, [3, 0]) self.assertEqual(self.simplex._obj_constant_index, 1) - self.assertEqual(self.simplex._basic_var_indexes, [4]) - self.assertEqual(self.simplex._nonbasic_var_indexes, [5]) + self.assertEqual(self.simplex._b_array, [4]) + self.assertEqual(self.simplex._n_array, [5]) with self.subTest('Using second set of keys.'): self.simplex._parse_json_data({ @@ -48,11 +48,11 @@ class TestSimplex(unittest.TestCase): 'non_basic_variables': [5], }) self.assertEqual(self.simplex._matrix_a, [[1]]) - self.assertEqual(self.simplex._constants, [2]) - self.assertEqual(self.simplex._obj_func, [3, 0]) + self.assertEqual(self.simplex._vector_b, [2]) + self.assertEqual(self.simplex._vector_c, [3, 0]) self.assertEqual(self.simplex._obj_constant_index, 1) - self.assertEqual(self.simplex._basic_var_indexes, [4]) - self.assertEqual(self.simplex._nonbasic_var_indexes, [5]) + self.assertEqual(self.simplex._b_array, [4]) + self.assertEqual(self.simplex._n_array, [5]) with self.subTest('Objective constant provided.'): self.simplex._parse_json_data({ @@ -65,11 +65,11 @@ class TestSimplex(unittest.TestCase): 'non_basic_variables': [5], }) self.assertEqual(self.simplex._matrix_a, [[1]]) - self.assertEqual(self.simplex._constants, [2]) - self.assertEqual(self.simplex._obj_func, [3, 5]) + self.assertEqual(self.simplex._vector_b, [2]) + self.assertEqual(self.simplex._vector_c, [3, 5]) self.assertEqual(self.simplex._obj_constant_index, 1) - self.assertEqual(self.simplex._basic_var_indexes, [4]) - self.assertEqual(self.simplex._nonbasic_var_indexes, [5]) + self.assertEqual(self.simplex._b_array, [4]) + self.assertEqual(self.simplex._n_array, [5]) def test__parse_from_json__failure(self): @@ -231,11 +231,11 @@ class TestSimplex(unittest.TestCase): [1, 1, 1, 0, 1, 0], [1, 1, 1, 0, 0, 1], ]) - self.assertEqual(self.simplex._constants, [1, 1, 1]) - self.assertEqual(self.simplex._obj_func, [1, 1, 1, 0, 0, 0, 0]) + self.assertEqual(self.simplex._vector_b, [1, 1, 1]) + self.assertEqual(self.simplex._vector_c, [1, 1, 1, 0, 0, 0, 0]) self.assertEqual(self.simplex._obj_constant_index, 6) - self.assertEqual(self.simplex._basic_var_indexes, [3, 4, 5]) - self.assertEqual(self.simplex._nonbasic_var_indexes, [0, 1, 2]) + self.assertEqual(self.simplex._b_array, [3, 4, 5]) + self.assertEqual(self.simplex._n_array, [0, 1, 2]) with self.subTest('Some basic vars implicitly provided.'): self.simplex.set_simplex_values([ @@ -251,11 +251,11 @@ class TestSimplex(unittest.TestCase): [1, 1, 1, 0, 1, 0], [1, 0, 1, 1, 1, 0], ]) - self.assertEqual(self.simplex._constants, [1, 1, 1]) - self.assertEqual(self.simplex._obj_func, [1, 0, 1, 0, 1, 0, 0]) + self.assertEqual(self.simplex._vector_b, [1, 1, 1]) + self.assertEqual(self.simplex._vector_c, [1, 0, 1, 0, 1, 0, 0]) self.assertEqual(self.simplex._obj_constant_index, 6) - self.assertEqual(self.simplex._basic_var_indexes, [1, 3, 5]) - self.assertEqual(self.simplex._nonbasic_var_indexes, [0, 2, 4]) + self.assertEqual(self.simplex._b_array, [1, 3, 5]) + self.assertEqual(self.simplex._n_array, [0, 2, 4]) with self.subTest('Some basic vars implicitly provided - With obj constant.'): self.simplex.set_simplex_values([ @@ -271,11 +271,11 @@ class TestSimplex(unittest.TestCase): [1, 1, 1, 0, 1, 0], [1, 0, 1, 1, 1, 0], ]) - self.assertEqual(self.simplex._constants, [1, 1, 1]) - self.assertEqual(self.simplex._obj_func, [1, 0, 1, 0, 1, 0, 5]) + self.assertEqual(self.simplex._vector_b, [1, 1, 1]) + self.assertEqual(self.simplex._vector_c, [1, 0, 1, 0, 1, 0, 5]) self.assertEqual(self.simplex._obj_constant_index, 6) - self.assertEqual(self.simplex._basic_var_indexes, [1, 3, 5]) - self.assertEqual(self.simplex._nonbasic_var_indexes, [0, 2, 4]) + self.assertEqual(self.simplex._b_array, [1, 3, 5]) + self.assertEqual(self.simplex._n_array, [0, 2, 4]) with self.subTest('All basic vars implicitly provided at start.'): self.simplex.set_simplex_values([ @@ -291,11 +291,11 @@ class TestSimplex(unittest.TestCase): [1, 0, 0, 1, 1, 1], [0, 0, 1, 1, 1, 1], ]) - self.assertEqual(self.simplex._constants, [1, 1, 1]) - self.assertEqual(self.simplex._obj_func, [0, 0, 0, 1, 1, 1, 0]) + self.assertEqual(self.simplex._vector_b, [1, 1, 1]) + self.assertEqual(self.simplex._vector_c, [0, 0, 0, 1, 1, 1, 0]) self.assertEqual(self.simplex._obj_constant_index, 6) - self.assertEqual(self.simplex._basic_var_indexes, [0, 1, 2]) - self.assertEqual(self.simplex._nonbasic_var_indexes, [3, 4, 5]) + self.assertEqual(self.simplex._b_array, [0, 1, 2]) + self.assertEqual(self.simplex._n_array, [3, 4, 5]) with self.subTest('All basic vars implicitly provided at start - With obj constant.'): self.simplex.set_simplex_values([ @@ -311,11 +311,11 @@ class TestSimplex(unittest.TestCase): [1, 0, 0, 1, 1, 1], [0, 0, 1, 1, 1, 1], ]) - self.assertEqual(self.simplex._constants, [1, 1, 1]) - self.assertEqual(self.simplex._obj_func, [0, 0, 0, 1, 1, 1, 5]) + self.assertEqual(self.simplex._vector_b, [1, 1, 1]) + self.assertEqual(self.simplex._vector_c, [0, 0, 0, 1, 1, 1, 5]) self.assertEqual(self.simplex._obj_constant_index, 6) - self.assertEqual(self.simplex._basic_var_indexes, [0, 1, 2]) - self.assertEqual(self.simplex._nonbasic_var_indexes, [3, 4, 5]) + self.assertEqual(self.simplex._b_array, [0, 1, 2]) + self.assertEqual(self.simplex._n_array, [3, 4, 5]) with self.subTest('All basic vars implicitly provided at end.'): self.simplex.set_simplex_values([ @@ -331,11 +331,11 @@ class TestSimplex(unittest.TestCase): [1, 1, 1, 0, 0, 1], [1, 1, 1, 1, 0, 0], ]) - self.assertEqual(self.simplex._constants, [1, 1, 1]) - self.assertEqual(self.simplex._obj_func, [1, 1, 1, 0, 0, 0, 0]) + self.assertEqual(self.simplex._vector_b, [1, 1, 1]) + self.assertEqual(self.simplex._vector_c, [1, 1, 1, 0, 0, 0, 0]) self.assertEqual(self.simplex._obj_constant_index, 6) - self.assertEqual(self.simplex._basic_var_indexes, [3, 4, 5]) - self.assertEqual(self.simplex._nonbasic_var_indexes, [0, 1, 2]) + self.assertEqual(self.simplex._b_array, [3, 4, 5]) + self.assertEqual(self.simplex._n_array, [0, 1, 2]) with self.subTest('All basic vars implicitly provided at end - With objective constant.'): self.simplex.set_simplex_values([ @@ -351,11 +351,11 @@ class TestSimplex(unittest.TestCase): [1, 1, 1, 0, 0, 1], [1, 1, 1, 1, 0, 0], ]) - self.assertEqual(self.simplex._constants, [1, 1, 1]) - self.assertEqual(self.simplex._obj_func, [1, 1, 1, 0, 0, 0, 5]) + self.assertEqual(self.simplex._vector_b, [1, 1, 1]) + self.assertEqual(self.simplex._vector_c, [1, 1, 1, 0, 0, 0, 5]) self.assertEqual(self.simplex._obj_constant_index, 6) - self.assertEqual(self.simplex._basic_var_indexes, [3, 4, 5]) - self.assertEqual(self.simplex._nonbasic_var_indexes, [0, 1, 2]) + self.assertEqual(self.simplex._b_array, [3, 4, 5]) + self.assertEqual(self.simplex._n_array, [0, 1, 2]) with self.subTest('All basic vars explicitly provided at start.'): self.simplex.set_simplex_values([ @@ -372,11 +372,11 @@ class TestSimplex(unittest.TestCase): [1, 0, 0, 1, 1, 1], [0, 0, 1, 1, 1, 1], ]) - self.assertEqual(self.simplex._constants, [1, 1, 1]) - self.assertEqual(self.simplex._obj_func, [0, 0, 0, 1, 1, 1, 0]) + self.assertEqual(self.simplex._vector_b, [1, 1, 1]) + self.assertEqual(self.simplex._vector_c, [0, 0, 0, 1, 1, 1, 0]) self.assertEqual(self.simplex._obj_constant_index, 6) - self.assertEqual(self.simplex._basic_var_indexes, [0, 1, 2]) - self.assertEqual(self.simplex._nonbasic_var_indexes, [3, 4, 5]) + self.assertEqual(self.simplex._b_array, [0, 1, 2]) + self.assertEqual(self.simplex._n_array, [3, 4, 5]) with self.subTest('All basic vars explicitly provided at end.'): self.simplex.set_simplex_values([ @@ -393,8 +393,8 @@ class TestSimplex(unittest.TestCase): [1, 1, 1, 0, 0, 1], [1, 1, 1, 1, 0, 0], ]) - self.assertEqual(self.simplex._constants, [1, 1, 1]) - self.assertEqual(self.simplex._obj_func, [1, 1, 1, 0, 0, 0, 0]) + self.assertEqual(self.simplex._vector_b, [1, 1, 1]) + self.assertEqual(self.simplex._vector_c, [1, 1, 1, 0, 0, 0, 0]) self.assertEqual(self.simplex._obj_constant_index, 6) - self.assertEqual(self.simplex._basic_var_indexes, [3, 4, 5]) - self.assertEqual(self.simplex._nonbasic_var_indexes, [0, 1, 2]) + self.assertEqual(self.simplex._b_array, [3, 4, 5]) + self.assertEqual(self.simplex._n_array, [0, 1, 2])