# Sage9.3 getting MILP model status after solve()

I'm using Sage9.3 MixedIntegerLinearProgram. After attempting to solve a milp problem M using M.solve(), when the program stops it could be
- M is solved with solution
- M is infeasible
- timeout (which I have imposed)
- terminated by some external factor

Is there a way (or function) to determine the status of M? I'm using both GLPK and Gurobi, so would appreciate solutions for both solvers. Thanks.

edit retag close merge delete

Sort by » oldest newest most voted

Hello, @Sim! I don't know about Gurobi, so perhaps its behaviour could be different, but at least with GLPK, you have the following possibilities:

1. If M has a solution: The instruction M.solve() should show you the optimum value of the objective function. Additionally, you can write M.get_values(x), where x is the family of variables of the MILP, in order to get the values that produce the optimum.
2. M is infeasible: Sage should show you the message "MIPSolverException: GLPK: Problem has no feasible solution".
3. Timeout (which you have imposed): Given that you imposed the time restriction, it should be as easy as to add a print statement with a message such as "Time constraint exceeded!"

Concerning the option "terminated by some external factor", it is not clear to me what you mean by "external factor". However, any event I could think of that could fit this description, should be rare enough to not have to worry about it. (Perhaps you could elaborate on this or present a couple of hypothetical examples.)

I hope this helps!

more

Hi @dsejas, Thanks for your suggestion.
Terminated by some external factor refers to the program terminating prematurely, e.g. by "Ctrl+c" or "kill" instruction
I'm running the program in the background so currently I'm outputting a log file of the entire solving process and manually check if there is an optimal solution found, infeasible or timeout.
But I would like to automate this process.
An example pseudocode
M.solve() if M is solved:
#output the optimal solution
if M is infeasible:
#output infeasible message
if M is timeout:
#output best upper and lower bound so far
if M is terminated by external factor:
#output best upper and lower bound so far

( 2021-08-18 18:31:29 +0200 )edit