Skip to content

Incremental solving with an objective function #32

@IgnaceBleukx

Description

@IgnaceBleukx

Hi,

I am using the Python interface of Choco to do incremental solving.
My situation is the following.
I have a model with a given objective to solve. After getting the optimal solution, I want to add a constraint to the model and re-solve to optimality again.

However, because of the consrtraints added to the solver during optimization, the status seems to be invalid.
Is there a way around this? Below is a minimal working example.

import pychoco as pc

model = pc.Model()

a = model.boolvar(name="a")
b = model.boolvar(name="b")
c = model.boolvar(name="c")
sum_of = model.intvar(0,3,name="thesum")

model.or_([a,b,c]).post()
model.sum([a,b,c], "=", sum_of).post()

solver = model.get_solver()
sol = solver.find_optimal_solution(maximize=False, objective=sum_of)

for var in [a,b,c]:
    print(var, sol.get_int_val(var))

model.arithm(sum_of, ">=", 2)
solver = model.get_solver()
sol = solver.find_optimal_solution(maximize=False, objective=sum_of)
print("Solution:", sol)
for var in [a,b,c]:
    print(var, sol.get_int_val(var))

Which produces the following output:

BoolVar 'a' = [0, 1] 0
BoolVar 'b' = [0, 1] 0
BoolVar 'c' = [0, 1] 1
Solution: Choco Solution
Unhandled exception: org.chocosolver.solver.exception.SolverException: Cannot access value of a = [0,1]: No solution has been recorded yet (empty solution). Make sure this.record() has been called.
    at org.chocosolver.solver.Solution.getIntVal(Solution.java:221)
    at org.chocosolver.capi.SolutionApi.getIntVal(SolutionApi.java:28)

Kind regards,
Ignace

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions