[Python] Mosek Fusion - access value of variable after timeout

Discussão em 'Python' iniciado por Stack, Junho 11, 2025.

  1. Stack

    Stack Membro Participativo

    I have an integer optimisation problem that I want to solve with Mosek-Fusion. Since it might take too long, I want to impose a timeout of 10 seconds. The program stops after 10 seconds, but how can I access the best solution that Mosek found until this point?

    When the program terminates normally, I get the solution via x.level(). But when it timeouts, I get an error.

    For simplicity, my MWE has a timeout of 1 second.

    from mosek.fusion import *
    import mosek.fusion.pythonic
    import numpy as np
    import sys

    if __name__ == '__main__':
    M = Model()
    A = np.array(np.random.randint(-1,2, size = (128,256)), dtype = np.float64)
    x = M.variable("x", 256, Domain.binary())
    b = np.array(np.random.randint(0,20, size = (128)), dtype = np.float64)
    c = np.random.random(size = 256)

    M.constraint(A @ x <= b)
    M.objective(ObjectiveSense.Maximize, x.T @ c)
    M.setSolverParam("optimizerMaxTime", 1)
    M.setLogHandler(sys.stdout)
    M.solve()
    print(x.level())


    This yields the error

    SolutionError: Solution status is Feasible but Optimal is expected. Reason: Accessing integer solution whose problem status is PrimalFeasible.


    Sidenote: I want to iteratively add constraints to my problem, without rerunning it. As far as I know, changing to cvxpy therefore is not an option.

    How do I obtain the best feasible solution at the end of the timeout?

    Continue reading...

Compartilhe esta Página