diff --git a/resources/simplex/base.py b/resources/simplex/base.py index c44768b34723a76405d840cfe50c52d77ea0e099..802a7fa274da162478677605962b0dfab35b897c 100644 --- a/resources/simplex/base.py +++ b/resources/simplex/base.py @@ -343,13 +343,20 @@ class SimplexBase(): #endregion Simplex Read in and Setup + #region Display Functions + + def display_all_printouts(self): + self.display_tableau() + self.display_equations() + self.display_right_aligned_equations() + def display_tableau(self): logger.info('') logger.info('Printing Simplex Tableau.') logger.info('') # Calculate overall table width. - tableau_length = (len(self._vector_c) * 6) + 4 + tableau_length = (len(self._vector_c) * 7) + 4 # Optionally print description. if self._description is not None: @@ -364,7 +371,7 @@ class SimplexBase(): if index == (len(self._vector_c) - 1): print_string += ' C ' else: - print_string += ' {0:>4} '.format('x{0}'.format(index + 1)) + print_string += ' {0:>5} '.format('x{0}'.format(index + 1)) print_string += ' B' logger.info(print_string) @@ -375,9 +382,9 @@ class SimplexBase(): for index in range(len(self._vector_c)): # Check if last index. if index == (len(self._vector_c) - 1): - print_string += ' | {0:>4} |'.format(self._vector_c[index]) + print_string += ' | {0:>5} |'.format(self._vector_c[index]) else: - print_string += ' {0:>4} '.format(self._vector_c[index]) + print_string += ' {0:>5} '.format(self._vector_c[index]) logger.info(print_string) # Print constraints. @@ -390,14 +397,164 @@ class SimplexBase(): # 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._vector_b[row_index]) - print_string += ' {0:>4}'.format('x{0}'.format(self._b_array[row_index] + 1)) + print_string += ' {0:>5} '.format(item) + print_string += ' | {0:>5} |'.format(self._vector_b[row_index]) + print_string += ' {0:>5}'.format('x{0}'.format(self._b_array[row_index] + 1)) logger.info(print_string) logger.info(' ' + '-' * tableau_length) logger.info('') + def display_equations(self): + logger.info('') + logger.info('Printing Simplex Equations.') + logger.info('') + + # Calculate overall equation width. + equation_length = (len(self._vector_c) * 9) + + # Optionally print description. + if self._description is not None: + logger.info('') + logger.info('Description: {0}'.format(self._description)) + logger.info('') + + # Print objective function. + print_string = ' Max: ' + for index in range(len(self._vector_c)): + # Check if last index. + if index == (len(self._vector_c) - 1): + print_string += ' = {0:>5} '.format(-self._vector_c[index]) + else: + if self._vector_c[index] == 0: + # Coefficient is 0. Print nothing. + print_string += ' ' + elif self._vector_c[index] < 0: + # Coefficient is negative. + print_string += ' {0:>5} x{1}'.format( + '-{0}'.format(-self._vector_c[index]), + index + 1, + ) + else: + # Coefficient is positive. + print_string += ' {0:>5} x{1}'.format( + '+{0}'.format(self._vector_c[index]), + index + 1, + ) + logger.info(print_string) + logger.info(' ' + '-' * equation_length) + + # Print constraints. + for row_index in range(len(self._matrix_a)): + if row_index == 0: + print_string = ' S.T. ' + else: + print_string = ' ' + # Loop through all items in row. + for col_index in range(len(self._matrix_a[row_index])): + if self._matrix_a[row_index][col_index] == 0: + # Coefficient is 0. Print nothing. + print_string += ' ' + elif self._matrix_a[row_index][col_index] < 0: + # Coefficient is negative. + print_string += ' {0:>5} x{1}'.format( + '-{0}'.format(-self._matrix_a[row_index][col_index]), + col_index + 1, + ) + else: + # Coefficient is positive. + print_string += ' {0:>5} x{1}'.format( + '+{0}'.format(self._matrix_a[row_index][col_index]), + col_index + 1, + ) + + # Add coefficient. + print_string += ' = {0:>5} '.format(self._vector_b[row_index]) + logger.info(print_string) + logger.info('') + + def display_right_aligned_equations(self): + logger.info('') + logger.info('Printing Simplex Equations (Right Aligned).') + logger.info('') + + # Calculate overall equation width. + equation_length = ((len(self._n_array) + 2) * 9) + + # Optionally print description. + if self._description is not None: + logger.info('') + logger.info('Description: {0}'.format(self._description)) + logger.info('') + + # Print objective function. + print_string = ' Max: ' + for index in range(len(self._vector_c)): + if index not in self._b_array: + # Check if last index. + if index == (len(self._vector_c) - 1): + print_string += ' = {0:>5} '.format(-self._vector_c[index]) + else: + if self._vector_c[index] == 0: + # Coefficient is 0. Print nothing. + print_string += ' ' + elif self._vector_c[index] < 0: + # Coefficient is negative. + print_string += ' {0:>5} x{1}'.format( + '-{0}'.format(-self._vector_c[index]), + index + 1, + ) + else: + # Coefficient is positive. + print_string += ' {0:>5} x{1}'.format( + '+{0}'.format(self._vector_c[index]), + index + 1, + ) + logger.info(print_string) + logger.info(' ' + '-' * equation_length) + + # Print constraints. + for row_index in range(len(self._matrix_a)): + if row_index == 0: + print_string = ' S.T. ' + else: + print_string = ' ' + + basic_index = self._b_array[row_index] + print_string += ' x{1} = '.format(self._matrix_a[row_index][basic_index], basic_index + 1) + + # Loop through all items in row. + for col_index in range(len(self._matrix_a[row_index])): + + if col_index not in self._b_array: + if self._matrix_a[row_index][col_index] == 0: + # Coefficient is 0. Print nothing. + print_string += ' ' + elif self._matrix_a[row_index][col_index] > 0: + # Coefficient is negative. + print_string += ' {0:>5} x{1}'.format( + '-{0}'.format(self._matrix_a[row_index][col_index]), + col_index + 1, + ) + else: + # Coefficient is positive. + print_string += ' {0:>5} x{1}'.format( + '+{0}'.format(-self._matrix_a[row_index][col_index]), + col_index + 1, + ) + + # Add coefficient. + if self._vector_b[row_index] >= 0: + # Constant is positive. + print_string += ' {0:>5} '.format('+{0}'.format(self._vector_b[row_index])) + else: + # Constant is negative. + print_string += ' {0:>5} '.format('-{0}'.format(-self._vector_b[row_index])) + logger.info(print_string) + logger.info('') + + #endregion Display Functions + #region Child Class Functions def solve(self):