Skip to content
This repository has been archived by the owner on Jan 30, 2023. It is now read-only.

Commit

Permalink
MixedIntegerLinearProgram.interactive_lp_problem: Factor out helper f…
Browse files Browse the repository at this point in the history
…unctions _backend_variable_names etc
  • Loading branch information
mkoeppe committed Jan 6, 2023
1 parent d8e70df commit fb935fb
Showing 1 changed file with 20 additions and 13 deletions.
33 changes: 20 additions & 13 deletions src/sage/numerical/mip.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -2946,6 +2946,24 @@ cdef class MixedIntegerLinearProgram(SageObject):
"""
return self._backend.get_relative_objective_gap()

def _format_backend_variable_name(self, name, prefix, index):
if name:
return name.replace('[','_').strip(']')
else:
return prefix + '_' + str(index)

def _backend_variable_names(self):
# Construct 'x'
back_end = self.get_backend()
return [self._format_backend_variable_name(back_end.col_name(i), 'x', i)
for i in range(back_end.ncols())]

def _backend_slack_names(self):
# Construct slack names
back_end = self.get_backend()
return [self._format_backend_variable_name(back_end.row_name(i), 'w', i)
for i in range(back_end.nrows())]

def interactive_lp_problem(self,form='standard'):
r"""
Returns an InteractiveLPProblem and, if available, a basis.
Expand Down Expand Up @@ -3048,27 +3066,16 @@ cdef class MixedIntegerLinearProgram(SageObject):
return back_end.objective_coefficient(i)
objective_coefs_vector = [get_obj_coef(i) for i in range(self.number_of_variables())]

def format(name, prefix, index):
if name:
return name.replace('[','_').strip(']')
else:
return prefix + '_' + str(index)

# Construct 'x'
var_names = [format(back_end.col_name(i), 'x', i) for i in range(back_end.ncols())]

A = coef_matrix
b = upper_bound_vector
c = objective_coefs_vector
x = var_names
x = self._backend_variable_names()

if form is None:
from sage.numerical.interactive_simplex_method import InteractiveLPProblem
return InteractiveLPProblem(A, b, c, x), None
elif form == 'standard' or form == 'std':
# Construct slack names
slack_names = [format(back_end.row_name(i), 'w', i) for i in range(back_end.nrows())]
w = slack_names
w = self._backend_slack_names()
from sage.numerical.interactive_simplex_method import InteractiveLPProblemStandardForm
lp = InteractiveLPProblemStandardForm(A, b, c, x, slack_variables=w)
basic_variables = []
Expand Down

0 comments on commit fb935fb

Please sign in to comment.